{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/jquery/dist/jquery.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/modifiers/index.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/lodash/lodash.js", "../../../node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-array/src/descending.js", "../../../node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-array/src/number.js", "../../../node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-array/src/blur.js", "../../../node_modules/d3-array/src/count.js", "../../../node_modules/d3-array/src/cross.js", "../../../node_modules/d3-array/src/cumsum.js", "../../../node_modules/d3-array/src/variance.js", "../../../node_modules/d3-array/src/deviation.js", "../../../node_modules/d3-array/src/extent.js", "../../../node_modules/d3-array/src/fsum.js", "../../../node_modules/internmap/src/index.js", "../../../node_modules/d3-array/src/identity.js", "../../../node_modules/d3-array/src/group.js", "../../../node_modules/d3-array/src/permute.js", "../../../node_modules/d3-array/src/sort.js", "../../../node_modules/d3-array/src/groupSort.js", "../../../node_modules/d3-array/src/array.js", "../../../node_modules/d3-array/src/constant.js", "../../../node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-array/src/nice.js", "../../../node_modules/d3-array/src/threshold/sturges.js", "../../../node_modules/d3-array/src/bin.js", "../../../node_modules/d3-array/src/max.js", "../../../node_modules/d3-array/src/maxIndex.js", "../../../node_modules/d3-array/src/min.js", "../../../node_modules/d3-array/src/minIndex.js", "../../../node_modules/d3-array/src/quickselect.js", "../../../node_modules/d3-array/src/greatest.js", "../../../node_modules/d3-array/src/quantile.js", "../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js", "../../../node_modules/d3-array/src/threshold/scott.js", "../../../node_modules/d3-array/src/mean.js", "../../../node_modules/d3-array/src/median.js", "../../../node_modules/d3-array/src/merge.js", "../../../node_modules/d3-array/src/mode.js", "../../../node_modules/d3-array/src/pairs.js", "../../../node_modules/d3-array/src/range.js", "../../../node_modules/d3-array/src/rank.js", "../../../node_modules/d3-array/src/least.js", "../../../node_modules/d3-array/src/leastIndex.js", "../../../node_modules/d3-array/src/greatestIndex.js", "../../../node_modules/d3-array/src/scan.js", "../../../node_modules/d3-array/src/shuffle.js", "../../../node_modules/d3-array/src/sum.js", "../../../node_modules/d3-array/src/transpose.js", "../../../node_modules/d3-array/src/zip.js", "../../../node_modules/d3-array/src/every.js", "../../../node_modules/d3-array/src/some.js", "../../../node_modules/d3-array/src/filter.js", "../../../node_modules/d3-array/src/map.js", "../../../node_modules/d3-array/src/reduce.js", "../../../node_modules/d3-array/src/reverse.js", "../../../node_modules/d3-array/src/difference.js", "../../../node_modules/d3-array/src/disjoint.js", "../../../node_modules/d3-array/src/intersection.js", "../../../node_modules/d3-array/src/superset.js", "../../../node_modules/d3-array/src/subset.js", "../../../node_modules/d3-array/src/union.js", "../../../node_modules/d3-array/src/index.js", "../../../node_modules/d3-axis/src/identity.js", "../../../node_modules/d3-axis/src/axis.js", "../../../node_modules/d3-axis/src/index.js", "../../../node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-dispatch/src/index.js", "../../../node_modules/d3-selection/src/namespaces.js", "../../../node_modules/d3-selection/src/namespace.js", "../../../node_modules/d3-selection/src/creator.js", "../../../node_modules/d3-selection/src/selector.js", "../../../node_modules/d3-selection/src/selection/select.js", "../../../node_modules/d3-selection/src/array.js", "../../../node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/d3-selection/src/matcher.js", "../../../node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/d3-selection/src/constant.js", "../../../node_modules/d3-selection/src/selection/data.js", "../../../node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/d3-selection/src/selection/join.js", "../../../node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/d3-selection/src/selection/order.js", "../../../node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/d3-selection/src/selection/call.js", "../../../node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/d3-selection/src/selection/node.js", "../../../node_modules/d3-selection/src/selection/size.js", "../../../node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/d3-selection/src/selection/each.js", "../../../node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/d3-selection/src/window.js", "../../../node_modules/d3-selection/src/selection/style.js", "../../../node_modules/d3-selection/src/selection/property.js", "../../../node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/d3-selection/src/selection/text.js", "../../../node_modules/d3-selection/src/selection/html.js", "../../../node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/d3-selection/src/selection/append.js", "../../../node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/d3-selection/src/selection/on.js", "../../../node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/d3-selection/src/selection/index.js", "../../../node_modules/d3-selection/src/select.js", "../../../node_modules/d3-selection/src/create.js", "../../../node_modules/d3-selection/src/local.js", "../../../node_modules/d3-selection/src/sourceEvent.js", "../../../node_modules/d3-selection/src/pointer.js", "../../../node_modules/d3-selection/src/pointers.js", "../../../node_modules/d3-selection/src/selectAll.js", "../../../node_modules/d3-selection/src/index.js", "../../../node_modules/d3-drag/src/noevent.js", "../../../node_modules/d3-drag/src/nodrag.js", "../../../node_modules/d3-drag/src/constant.js", "../../../node_modules/d3-drag/src/event.js", "../../../node_modules/d3-drag/src/drag.js", "../../../node_modules/d3-drag/src/index.js", "../../../node_modules/d3-color/src/define.js", "../../../node_modules/d3-color/src/color.js", "../../../node_modules/d3-color/src/math.js", "../../../node_modules/d3-color/src/lab.js", "../../../node_modules/d3-color/src/cubehelix.js", "../../../node_modules/d3-color/src/index.js", "../../../node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-interpolate/src/numberArray.js", "../../../node_modules/d3-interpolate/src/array.js", "../../../node_modules/d3-interpolate/src/date.js", "../../../node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-interpolate/src/object.js", "../../../node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-interpolate/src/value.js", "../../../node_modules/d3-interpolate/src/discrete.js", "../../../node_modules/d3-interpolate/src/hue.js", "../../../node_modules/d3-interpolate/src/round.js", "../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-interpolate/src/zoom.js", "../../../node_modules/d3-interpolate/src/hsl.js", "../../../node_modules/d3-interpolate/src/lab.js", "../../../node_modules/d3-interpolate/src/hcl.js", "../../../node_modules/d3-interpolate/src/cubehelix.js", "../../../node_modules/d3-interpolate/src/piecewise.js", "../../../node_modules/d3-interpolate/src/quantize.js", "../../../node_modules/d3-interpolate/src/index.js", "../../../node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-timer/src/timeout.js", "../../../node_modules/d3-timer/src/interval.js", "../../../node_modules/d3-timer/src/index.js", "../../../node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/d3-transition/src/interrupt.js", "../../../node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/d3-transition/src/transition/on.js", "../../../node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/d3-transition/src/transition/select.js", "../../../node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/d3-transition/src/transition/style.js", "../../../node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/d3-transition/src/transition/text.js", "../../../node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/d3-transition/src/transition/end.js", "../../../node_modules/d3-transition/src/transition/index.js", "../../../node_modules/d3-ease/src/linear.js", "../../../node_modules/d3-ease/src/quad.js", "../../../node_modules/d3-ease/src/cubic.js", "../../../node_modules/d3-ease/src/poly.js", "../../../node_modules/d3-ease/src/sin.js", "../../../node_modules/d3-ease/src/math.js", "../../../node_modules/d3-ease/src/exp.js", "../../../node_modules/d3-ease/src/circle.js", "../../../node_modules/d3-ease/src/bounce.js", "../../../node_modules/d3-ease/src/back.js", "../../../node_modules/d3-ease/src/elastic.js", "../../../node_modules/d3-ease/src/index.js", "../../../node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/d3-transition/src/selection/index.js", "../../../node_modules/d3-transition/src/active.js", "../../../node_modules/d3-transition/src/index.js", "../../../node_modules/d3-brush/src/constant.js", "../../../node_modules/d3-brush/src/event.js", "../../../node_modules/d3-brush/src/noevent.js", "../../../node_modules/d3-brush/src/brush.js", "../../../node_modules/d3-brush/src/index.js", "../../../node_modules/d3-chord/src/math.js", "../../../node_modules/d3-chord/src/chord.js", "../../../node_modules/d3-path/src/path.js", "../../../node_modules/d3-path/src/index.js", "../../../node_modules/d3-chord/src/array.js", "../../../node_modules/d3-chord/src/constant.js", "../../../node_modules/d3-chord/src/ribbon.js", "../../../node_modules/d3-chord/src/index.js", "../../../node_modules/d3-contour/src/array.js", "../../../node_modules/d3-contour/src/ascending.js", "../../../node_modules/d3-contour/src/area.js", "../../../node_modules/d3-contour/src/constant.js", "../../../node_modules/d3-contour/src/contains.js", "../../../node_modules/d3-contour/src/noop.js", "../../../node_modules/d3-contour/src/contours.js", "../../../node_modules/d3-contour/src/density.js", "../../../node_modules/d3-contour/src/index.js", "../../../node_modules/robust-predicates/esm/util.js", "../../../node_modules/robust-predicates/esm/orient2d.js", "../../../node_modules/robust-predicates/esm/orient3d.js", "../../../node_modules/robust-predicates/esm/incircle.js", "../../../node_modules/robust-predicates/esm/insphere.js", "../../../node_modules/robust-predicates/index.js", "../../../node_modules/delaunator/index.js", "../../../node_modules/d3-delaunay/src/path.js", "../../../node_modules/d3-delaunay/src/polygon.js", "../../../node_modules/d3-delaunay/src/voronoi.js", "../../../node_modules/d3-delaunay/src/delaunay.js", "../../../node_modules/d3-delaunay/src/index.js", "../../../node_modules/d3-dsv/src/dsv.js", "../../../node_modules/d3-dsv/src/csv.js", "../../../node_modules/d3-dsv/src/tsv.js", "../../../node_modules/d3-dsv/src/autoType.js", "../../../node_modules/d3-dsv/src/index.js", "../../../node_modules/d3-fetch/src/blob.js", "../../../node_modules/d3-fetch/src/buffer.js", "../../../node_modules/d3-fetch/src/text.js", "../../../node_modules/d3-fetch/src/dsv.js", "../../../node_modules/d3-fetch/src/image.js", "../../../node_modules/d3-fetch/src/json.js", "../../../node_modules/d3-fetch/src/xml.js", "../../../node_modules/d3-fetch/src/index.js", "../../../node_modules/d3-force/src/center.js", "../../../node_modules/d3-quadtree/src/add.js", "../../../node_modules/d3-quadtree/src/cover.js", "../../../node_modules/d3-quadtree/src/data.js", "../../../node_modules/d3-quadtree/src/extent.js", "../../../node_modules/d3-quadtree/src/quad.js", "../../../node_modules/d3-quadtree/src/find.js", "../../../node_modules/d3-quadtree/src/remove.js", "../../../node_modules/d3-quadtree/src/root.js", "../../../node_modules/d3-quadtree/src/size.js", "../../../node_modules/d3-quadtree/src/visit.js", "../../../node_modules/d3-quadtree/src/visitAfter.js", "../../../node_modules/d3-quadtree/src/x.js", "../../../node_modules/d3-quadtree/src/y.js", "../../../node_modules/d3-quadtree/src/quadtree.js", "../../../node_modules/d3-quadtree/src/index.js", "../../../node_modules/d3-force/src/constant.js", "../../../node_modules/d3-force/src/jiggle.js", "../../../node_modules/d3-force/src/collide.js", "../../../node_modules/d3-force/src/link.js", "../../../node_modules/d3-force/src/lcg.js", "../../../node_modules/d3-force/src/simulation.js", "../../../node_modules/d3-force/src/manyBody.js", "../../../node_modules/d3-force/src/radial.js", "../../../node_modules/d3-force/src/x.js", "../../../node_modules/d3-force/src/y.js", "../../../node_modules/d3-force/src/index.js", "../../../node_modules/d3-format/src/formatDecimal.js", "../../../node_modules/d3-format/src/exponent.js", "../../../node_modules/d3-format/src/formatGroup.js", "../../../node_modules/d3-format/src/formatNumerals.js", "../../../node_modules/d3-format/src/formatSpecifier.js", "../../../node_modules/d3-format/src/formatTrim.js", "../../../node_modules/d3-format/src/formatPrefixAuto.js", "../../../node_modules/d3-format/src/formatRounded.js", "../../../node_modules/d3-format/src/formatTypes.js", "../../../node_modules/d3-format/src/identity.js", "../../../node_modules/d3-format/src/locale.js", "../../../node_modules/d3-format/src/defaultLocale.js", "../../../node_modules/d3-format/src/precisionFixed.js", "../../../node_modules/d3-format/src/precisionPrefix.js", "../../../node_modules/d3-format/src/precisionRound.js", "../../../node_modules/d3-format/src/index.js", "../../../node_modules/d3-geo/src/math.js", "../../../node_modules/d3-geo/src/noop.js", "../../../node_modules/d3-geo/src/stream.js", "../../../node_modules/d3-geo/src/area.js", "../../../node_modules/d3-geo/src/cartesian.js", "../../../node_modules/d3-geo/src/bounds.js", "../../../node_modules/d3-geo/src/centroid.js", "../../../node_modules/d3-geo/src/constant.js", "../../../node_modules/d3-geo/src/compose.js", "../../../node_modules/d3-geo/src/rotation.js", "../../../node_modules/d3-geo/src/circle.js", "../../../node_modules/d3-geo/src/clip/buffer.js", "../../../node_modules/d3-geo/src/pointEqual.js", "../../../node_modules/d3-geo/src/clip/rejoin.js", "../../../node_modules/d3-geo/src/polygonContains.js", "../../../node_modules/d3-geo/src/clip/index.js", "../../../node_modules/d3-geo/src/clip/antimeridian.js", "../../../node_modules/d3-geo/src/clip/circle.js", "../../../node_modules/d3-geo/src/clip/line.js", "../../../node_modules/d3-geo/src/clip/rectangle.js", "../../../node_modules/d3-geo/src/clip/extent.js", "../../../node_modules/d3-geo/src/length.js", "../../../node_modules/d3-geo/src/distance.js", "../../../node_modules/d3-geo/src/contains.js", "../../../node_modules/d3-geo/src/graticule.js", "../../../node_modules/d3-geo/src/interpolate.js", "../../../node_modules/d3-geo/src/identity.js", "../../../node_modules/d3-geo/src/path/area.js", "../../../node_modules/d3-geo/src/path/bounds.js", "../../../node_modules/d3-geo/src/path/centroid.js", "../../../node_modules/d3-geo/src/path/context.js", "../../../node_modules/d3-geo/src/path/measure.js", "../../../node_modules/d3-geo/src/path/string.js", "../../../node_modules/d3-geo/src/path/index.js", "../../../node_modules/d3-geo/src/transform.js", "../../../node_modules/d3-geo/src/projection/fit.js", "../../../node_modules/d3-geo/src/projection/resample.js", "../../../node_modules/d3-geo/src/projection/index.js", "../../../node_modules/d3-geo/src/projection/conic.js", "../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js", "../../../node_modules/d3-geo/src/projection/conicEqualArea.js", "../../../node_modules/d3-geo/src/projection/albers.js", "../../../node_modules/d3-geo/src/projection/albersUsa.js", "../../../node_modules/d3-geo/src/projection/azimuthal.js", "../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js", "../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js", "../../../node_modules/d3-geo/src/projection/mercator.js", "../../../node_modules/d3-geo/src/projection/conicConformal.js", "../../../node_modules/d3-geo/src/projection/equirectangular.js", "../../../node_modules/d3-geo/src/projection/conicEquidistant.js", "../../../node_modules/d3-geo/src/projection/equalEarth.js", "../../../node_modules/d3-geo/src/projection/gnomonic.js", "../../../node_modules/d3-geo/src/projection/identity.js", "../../../node_modules/d3-geo/src/projection/naturalEarth1.js", "../../../node_modules/d3-geo/src/projection/orthographic.js", "../../../node_modules/d3-geo/src/projection/stereographic.js", "../../../node_modules/d3-geo/src/projection/transverseMercator.js", "../../../node_modules/d3-geo/src/index.js", "../../../node_modules/d3-hierarchy/src/cluster.js", "../../../node_modules/d3-hierarchy/src/hierarchy/count.js", "../../../node_modules/d3-hierarchy/src/hierarchy/each.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js", "../../../node_modules/d3-hierarchy/src/hierarchy/find.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js", "../../../node_modules/d3-hierarchy/src/hierarchy/path.js", "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js", "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js", "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js", "../../../node_modules/d3-hierarchy/src/hierarchy/links.js", "../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js", "../../../node_modules/d3-hierarchy/src/hierarchy/index.js", "../../../node_modules/d3-hierarchy/src/accessors.js", "../../../node_modules/d3-hierarchy/src/constant.js", "../../../node_modules/d3-hierarchy/src/lcg.js", "../../../node_modules/d3-hierarchy/src/array.js", "../../../node_modules/d3-hierarchy/src/pack/enclose.js", "../../../node_modules/d3-hierarchy/src/pack/siblings.js", "../../../node_modules/d3-hierarchy/src/pack/index.js", "../../../node_modules/d3-hierarchy/src/treemap/round.js", "../../../node_modules/d3-hierarchy/src/treemap/dice.js", "../../../node_modules/d3-hierarchy/src/partition.js", "../../../node_modules/d3-hierarchy/src/stratify.js", "../../../node_modules/d3-hierarchy/src/tree.js", "../../../node_modules/d3-hierarchy/src/treemap/slice.js", "../../../node_modules/d3-hierarchy/src/treemap/squarify.js", "../../../node_modules/d3-hierarchy/src/treemap/index.js", "../../../node_modules/d3-hierarchy/src/treemap/binary.js", "../../../node_modules/d3-hierarchy/src/treemap/sliceDice.js", "../../../node_modules/d3-hierarchy/src/treemap/resquarify.js", "../../../node_modules/d3-hierarchy/src/index.js", "../../../node_modules/d3-polygon/src/area.js", "../../../node_modules/d3-polygon/src/centroid.js", "../../../node_modules/d3-polygon/src/cross.js", "../../../node_modules/d3-polygon/src/hull.js", "../../../node_modules/d3-polygon/src/contains.js", "../../../node_modules/d3-polygon/src/length.js", "../../../node_modules/d3-polygon/src/index.js", "../../../node_modules/d3-random/src/defaultSource.js", "../../../node_modules/d3-random/src/uniform.js", "../../../node_modules/d3-random/src/int.js", "../../../node_modules/d3-random/src/normal.js", "../../../node_modules/d3-random/src/logNormal.js", "../../../node_modules/d3-random/src/irwinHall.js", "../../../node_modules/d3-random/src/bates.js", "../../../node_modules/d3-random/src/exponential.js", "../../../node_modules/d3-random/src/pareto.js", "../../../node_modules/d3-random/src/bernoulli.js", "../../../node_modules/d3-random/src/geometric.js", "../../../node_modules/d3-random/src/gamma.js", "../../../node_modules/d3-random/src/beta.js", "../../../node_modules/d3-random/src/binomial.js", "../../../node_modules/d3-random/src/weibull.js", "../../../node_modules/d3-random/src/cauchy.js", "../../../node_modules/d3-random/src/logistic.js", "../../../node_modules/d3-random/src/poisson.js", "../../../node_modules/d3-random/src/lcg.js", "../../../node_modules/d3-random/src/index.js", "../../../node_modules/d3-scale/src/init.js", "../../../node_modules/d3-scale/src/ordinal.js", "../../../node_modules/d3-scale/src/band.js", "../../../node_modules/d3-scale/src/constant.js", "../../../node_modules/d3-scale/src/number.js", "../../../node_modules/d3-scale/src/continuous.js", "../../../node_modules/d3-scale/src/tickFormat.js", "../../../node_modules/d3-scale/src/linear.js", "../../../node_modules/d3-scale/src/identity.js", "../../../node_modules/d3-scale/src/nice.js", "../../../node_modules/d3-scale/src/log.js", "../../../node_modules/d3-scale/src/symlog.js", "../../../node_modules/d3-scale/src/pow.js", "../../../node_modules/d3-scale/src/radial.js", "../../../node_modules/d3-scale/src/quantile.js", "../../../node_modules/d3-scale/src/quantize.js", "../../../node_modules/d3-scale/src/threshold.js", "../../../node_modules/d3-time/src/interval.js", "../../../node_modules/d3-time/src/millisecond.js", "../../../node_modules/d3-time/src/duration.js", "../../../node_modules/d3-time/src/second.js", "../../../node_modules/d3-time/src/minute.js", "../../../node_modules/d3-time/src/hour.js", "../../../node_modules/d3-time/src/day.js", "../../../node_modules/d3-time/src/week.js", "../../../node_modules/d3-time/src/month.js", "../../../node_modules/d3-time/src/year.js", "../../../node_modules/d3-time/src/ticks.js", "../../../node_modules/d3-time/src/index.js", "../../../node_modules/d3-time-format/src/locale.js", "../../../node_modules/d3-time-format/src/defaultLocale.js", "../../../node_modules/d3-time-format/src/isoFormat.js", "../../../node_modules/d3-time-format/src/isoParse.js", "../../../node_modules/d3-time-format/src/index.js", "../../../node_modules/d3-scale/src/time.js", "../../../node_modules/d3-scale/src/utcTime.js", "../../../node_modules/d3-scale/src/sequential.js", "../../../node_modules/d3-scale/src/sequentialQuantile.js", "../../../node_modules/d3-scale/src/diverging.js", "../../../node_modules/d3-scale/src/index.js", "../../../node_modules/d3-scale-chromatic/src/colors.js", "../../../node_modules/d3-scale-chromatic/src/categorical/category10.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/observable10.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js", "../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js", "../../../node_modules/d3-scale-chromatic/src/ramp.js", "../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js", "../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js", "../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js", "../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js", "../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js", "../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js", "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js", "../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js", "../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js", "../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js", "../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js", "../../../node_modules/d3-scale-chromatic/src/index.js", "../../../node_modules/d3-shape/src/constant.js", "../../../node_modules/d3-shape/src/math.js", "../../../node_modules/d3-shape/src/path.js", "../../../node_modules/d3-shape/src/arc.js", "../../../node_modules/d3-shape/src/array.js", "../../../node_modules/d3-shape/src/curve/linear.js", "../../../node_modules/d3-shape/src/point.js", "../../../node_modules/d3-shape/src/line.js", "../../../node_modules/d3-shape/src/area.js", "../../../node_modules/d3-shape/src/descending.js", "../../../node_modules/d3-shape/src/identity.js", "../../../node_modules/d3-shape/src/pie.js", "../../../node_modules/d3-shape/src/curve/radial.js", "../../../node_modules/d3-shape/src/lineRadial.js", "../../../node_modules/d3-shape/src/areaRadial.js", "../../../node_modules/d3-shape/src/pointRadial.js", "../../../node_modules/d3-shape/src/curve/bump.js", "../../../node_modules/d3-shape/src/link.js", "../../../node_modules/d3-shape/src/symbol/asterisk.js", "../../../node_modules/d3-shape/src/symbol/circle.js", "../../../node_modules/d3-shape/src/symbol/cross.js", "../../../node_modules/d3-shape/src/symbol/diamond.js", "../../../node_modules/d3-shape/src/symbol/diamond2.js", "../../../node_modules/d3-shape/src/symbol/plus.js", "../../../node_modules/d3-shape/src/symbol/square.js", "../../../node_modules/d3-shape/src/symbol/square2.js", "../../../node_modules/d3-shape/src/symbol/star.js", "../../../node_modules/d3-shape/src/symbol/triangle.js", "../../../node_modules/d3-shape/src/symbol/triangle2.js", "../../../node_modules/d3-shape/src/symbol/wye.js", "../../../node_modules/d3-shape/src/symbol/times.js", "../../../node_modules/d3-shape/src/symbol.js", "../../../node_modules/d3-shape/src/noop.js", "../../../node_modules/d3-shape/src/curve/basis.js", "../../../node_modules/d3-shape/src/curve/basisClosed.js", "../../../node_modules/d3-shape/src/curve/basisOpen.js", "../../../node_modules/d3-shape/src/curve/bundle.js", "../../../node_modules/d3-shape/src/curve/cardinal.js", "../../../node_modules/d3-shape/src/curve/cardinalClosed.js", "../../../node_modules/d3-shape/src/curve/cardinalOpen.js", "../../../node_modules/d3-shape/src/curve/catmullRom.js", "../../../node_modules/d3-shape/src/curve/catmullRomClosed.js", "../../../node_modules/d3-shape/src/curve/catmullRomOpen.js", "../../../node_modules/d3-shape/src/curve/linearClosed.js", "../../../node_modules/d3-shape/src/curve/monotone.js", "../../../node_modules/d3-shape/src/curve/natural.js", "../../../node_modules/d3-shape/src/curve/step.js", "../../../node_modules/d3-shape/src/offset/none.js", "../../../node_modules/d3-shape/src/order/none.js", "../../../node_modules/d3-shape/src/stack.js", "../../../node_modules/d3-shape/src/offset/expand.js", "../../../node_modules/d3-shape/src/offset/diverging.js", "../../../node_modules/d3-shape/src/offset/silhouette.js", "../../../node_modules/d3-shape/src/offset/wiggle.js", "../../../node_modules/d3-shape/src/order/appearance.js", "../../../node_modules/d3-shape/src/order/ascending.js", "../../../node_modules/d3-shape/src/order/descending.js", "../../../node_modules/d3-shape/src/order/insideOut.js", "../../../node_modules/d3-shape/src/order/reverse.js", "../../../node_modules/d3-shape/src/index.js", "../../../node_modules/d3-zoom/src/constant.js", "../../../node_modules/d3-zoom/src/event.js", "../../../node_modules/d3-zoom/src/transform.js", "../../../node_modules/d3-zoom/src/noevent.js", "../../../node_modules/d3-zoom/src/zoom.js", "../../../node_modules/d3-zoom/src/index.js", "../../../node_modules/d3/src/index.js", "../../../node_modules/d3-simple-slider/dist/d3-simple-slider.js", "../../../node_modules/d3-svg-legend/src/legend.js", "../../../node_modules/d3-svg-legend/src/color.js", "../../../node_modules/d3-svg-legend/src/size.js", "../../../node_modules/d3-svg-legend/src/symbol.js", "../../../node_modules/d3-svg-legend/no-extend.js", "../../../node_modules/d3-svg-legend/index.js", "../../../node_modules/deserialize-json-api/lib/index.js", "../../../node_modules/leaflet/src/core/Util.js", "../../../node_modules/leaflet/src/core/Class.js", "../../../node_modules/leaflet/src/core/Events.js", "../../../node_modules/leaflet/src/geometry/Point.js", "../../../node_modules/leaflet/src/geometry/Bounds.js", "../../../node_modules/leaflet/src/geo/LatLngBounds.js", "../../../node_modules/leaflet/src/geo/LatLng.js", "../../../node_modules/leaflet/src/geo/crs/CRS.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Earth.js", "../../../node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js", "../../../node_modules/leaflet/src/geometry/Transformation.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js", "../../../node_modules/leaflet/src/layer/vector/SVG.Util.js", "../../../node_modules/leaflet/src/core/Browser.js", "../../../node_modules/leaflet/src/dom/DomEvent.Pointer.js", "../../../node_modules/leaflet/src/dom/DomEvent.DoubleTap.js", "../../../node_modules/leaflet/src/dom/DomUtil.js", "../../../node_modules/leaflet/src/dom/DomEvent.js", "../../../node_modules/leaflet/src/dom/PosAnimation.js", "../../../node_modules/leaflet/src/map/Map.js", "../../../node_modules/leaflet/src/control/Control.js", "../../../node_modules/leaflet/src/control/Control.Layers.js", "../../../node_modules/leaflet/src/control/Control.Zoom.js", "../../../node_modules/leaflet/src/control/Control.Scale.js", "../../../node_modules/leaflet/src/control/Control.Attribution.js", "../../../node_modules/leaflet/src/core/Handler.js", "../../../node_modules/leaflet/src/control/index.js", "../../../node_modules/leaflet/src/core/index.js", "../../../node_modules/leaflet/src/dom/Draggable.js", "../../../node_modules/leaflet/src/geometry/PolyUtil.js", "../../../node_modules/leaflet/src/geometry/LineUtil.js", "../../../node_modules/leaflet/src/geo/projection/Projection.LonLat.js", "../../../node_modules/leaflet/src/geo/projection/Projection.Mercator.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Simple.js", "../../../node_modules/leaflet/src/layer/Layer.js", "../../../node_modules/leaflet/src/geo/crs/index.js", "../../../node_modules/leaflet/src/layer/LayerGroup.js", "../../../node_modules/leaflet/src/layer/FeatureGroup.js", "../../../node_modules/leaflet/src/layer/marker/Icon.js", "../../../node_modules/leaflet/src/layer/marker/Icon.Default.js", "../../../node_modules/leaflet/src/layer/marker/Marker.Drag.js", "../../../node_modules/leaflet/src/layer/marker/Marker.js", "../../../node_modules/leaflet/src/layer/vector/Path.js", "../../../node_modules/leaflet/src/layer/vector/CircleMarker.js", "../../../node_modules/leaflet/src/layer/vector/Circle.js", "../../../node_modules/leaflet/src/layer/vector/Polyline.js", "../../../node_modules/leaflet/src/layer/vector/Polygon.js", "../../../node_modules/leaflet/src/layer/GeoJSON.js", "../../../node_modules/leaflet/src/layer/ImageOverlay.js", "../../../node_modules/leaflet/src/layer/VideoOverlay.js", "../../../node_modules/leaflet/src/layer/SVGOverlay.js", "../../../node_modules/leaflet/src/layer/DivOverlay.js", "../../../node_modules/leaflet/src/layer/Popup.js", "../../../node_modules/leaflet/src/layer/Tooltip.js", "../../../node_modules/leaflet/src/layer/marker/DivIcon.js", "../../../node_modules/leaflet/src/layer/marker/index.js", "../../../node_modules/leaflet/src/layer/tile/GridLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.WMS.js", "../../../node_modules/leaflet/src/layer/tile/index.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.js", "../../../node_modules/leaflet/src/layer/vector/Canvas.js", "../../../node_modules/leaflet/src/layer/vector/SVG.VML.js", "../../../node_modules/leaflet/src/layer/vector/SVG.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js", "../../../node_modules/leaflet/src/layer/vector/Rectangle.js", "../../../node_modules/leaflet/src/layer/vector/index.js", "../../../node_modules/leaflet/src/layer/index.js", "../../../node_modules/leaflet/src/map/handler/Map.BoxZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.Drag.js", "../../../node_modules/leaflet/src/map/handler/Map.Keyboard.js", "../../../node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.TapHold.js", "../../../node_modules/leaflet/src/map/handler/Map.TouchZoom.js", "../../../node_modules/leaflet/src/map/index.js", "../../../node_modules/leaflet/src/core/Util.js", "../../../node_modules/leaflet/src/core/Class.js", "../../../node_modules/leaflet/src/core/Events.js", "../../../node_modules/leaflet/src/geometry/Point.js", "../../../node_modules/leaflet/src/geometry/Bounds.js", "../../../node_modules/leaflet/src/geo/LatLngBounds.js", "../../../node_modules/leaflet/src/geo/LatLng.js", "../../../node_modules/leaflet/src/geo/crs/CRS.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Earth.js", "../../../node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js", "../../../node_modules/leaflet/src/geometry/Transformation.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js", "../../../node_modules/leaflet/src/layer/vector/SVG.Util.js", "../../../node_modules/leaflet/src/core/Browser.js", "../../../node_modules/leaflet/src/dom/DomEvent.Pointer.js", "../../../node_modules/leaflet/src/dom/DomEvent.DoubleTap.js", "../../../node_modules/leaflet/src/dom/DomUtil.js", "../../../node_modules/leaflet/src/dom/DomEvent.js", "../../../node_modules/leaflet/src/dom/PosAnimation.js", "../../../node_modules/leaflet/src/map/Map.js", "../../../node_modules/leaflet/src/control/Control.js", "../../../node_modules/leaflet/src/control/Control.Layers.js", "../../../node_modules/leaflet/src/control/Control.Zoom.js", "../../../node_modules/leaflet/src/control/Control.Scale.js", "../../../node_modules/leaflet/src/control/Control.Attribution.js", "../../../node_modules/leaflet/src/control/index.js", "../../../node_modules/leaflet/src/core/Handler.js", "../../../node_modules/leaflet/src/core/index.js", "../../../node_modules/leaflet/src/dom/Draggable.js", "../../../node_modules/leaflet/src/geometry/PolyUtil.js", "../../../node_modules/leaflet/src/geometry/LineUtil.js", "../../../node_modules/leaflet/src/geo/projection/Projection.LonLat.js", "../../../node_modules/leaflet/src/geo/projection/Projection.Mercator.js", "../../../node_modules/leaflet/src/geo/projection/index.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js", "../../../node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js", "../../../node_modules/leaflet/src/geo/crs/CRS.Simple.js", "../../../node_modules/leaflet/src/geo/crs/index.js", "../../../node_modules/leaflet/src/layer/Layer.js", "../../../node_modules/leaflet/src/layer/LayerGroup.js", "../../../node_modules/leaflet/src/layer/FeatureGroup.js", "../../../node_modules/leaflet/src/layer/marker/Icon.js", "../../../node_modules/leaflet/src/layer/marker/Icon.Default.js", "../../../node_modules/leaflet/src/layer/marker/Marker.Drag.js", "../../../node_modules/leaflet/src/layer/marker/Marker.js", "../../../node_modules/leaflet/src/layer/vector/Path.js", "../../../node_modules/leaflet/src/layer/vector/CircleMarker.js", "../../../node_modules/leaflet/src/layer/vector/Circle.js", "../../../node_modules/leaflet/src/layer/vector/Polyline.js", "../../../node_modules/leaflet/src/layer/vector/Polygon.js", "../../../node_modules/leaflet/src/layer/GeoJSON.js", "../../../node_modules/leaflet/src/layer/ImageOverlay.js", "../../../node_modules/leaflet/src/layer/VideoOverlay.js", "../../../node_modules/leaflet/src/layer/SVGOverlay.js", "../../../node_modules/leaflet/src/layer/DivOverlay.js", "../../../node_modules/leaflet/src/layer/Popup.js", "../../../node_modules/leaflet/src/layer/Tooltip.js", "../../../node_modules/leaflet/src/layer/marker/DivIcon.js", "../../../node_modules/leaflet/src/layer/marker/index.js", "../../../node_modules/leaflet/src/layer/tile/GridLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.js", "../../../node_modules/leaflet/src/layer/tile/TileLayer.WMS.js", "../../../node_modules/leaflet/src/layer/tile/index.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.js", "../../../node_modules/leaflet/src/layer/vector/Canvas.js", "../../../node_modules/leaflet/src/layer/vector/SVG.VML.js", "../../../node_modules/leaflet/src/layer/vector/SVG.js", "../../../node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js", "../../../node_modules/leaflet/src/layer/vector/Rectangle.js", "../../../node_modules/leaflet/src/layer/vector/index.js", "../../../node_modules/leaflet/src/layer/index.js", "../../../node_modules/leaflet/src/map/handler/Map.BoxZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.Drag.js", "../../../node_modules/leaflet/src/map/handler/Map.Keyboard.js", "../../../node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js", "../../../node_modules/leaflet/src/map/handler/Map.TapHold.js", "../../../node_modules/leaflet/src/map/handler/Map.TouchZoom.js", "../../../node_modules/leaflet/src/map/index.js", "../../../node_modules/leaflet-providers/leaflet-providers.js", "../../../node_modules/leaflet.sync/L.Map.Sync.js", "../../../node_modules/leaflet-fullscreen/dist/Leaflet.fullscreen.js", "../../../node_modules/datatables.net-scroller/node_modules/jquery/dist-module/jquery.module.js", "../../../node_modules/datatables.net-scroller/node_modules/jquery/dist/wrappers/jquery.bundler-require-wrapper.js", "../../../node_modules/datatables.net-scroller/node_modules/datatables.net/js/dataTables.js", "../../../node_modules/datatables.net-scroller/js/dataTables.scroller.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/add_jquery.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../../node_modules/jquery-ui/dist/jquery-ui.js", "../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js", "../../../node_modules/bootstrap5-autocomplete/autocomplete.js", "../../javascript/global.js", "../../../node_modules/ahoy.js/dist/ahoy.esm.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application_controller.js", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/errors.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/namespace.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/default-format-localization.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/datetime.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/service-locator.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/calendar-modes.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionsStore.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/validation.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/event-emitter.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/default-options.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/typeChecker.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionProcessor.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/optionConverter.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/dates.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/utilities/action-types.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/date-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/month-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/year-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/calendar/decade-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/time-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/hour-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/minute-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/time/second-display.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/collapse.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/display/index.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/actions.ts", "../../../node_modules/@eonasdan/tempus-dominus/src/js/tempus-dominus.ts", "../../javascript/controllers/confirm_controller.js", "../../javascript/controllers/countries_controller.js", "../../../node_modules/datatables.net-bs5/node_modules/jquery/dist-module/jquery.module.js", "../../../node_modules/datatables.net-bs5/node_modules/datatables.net/js/dataTables.mjs", "../../../node_modules/datatables.net-bs5/js/dataTables.bootstrap5.mjs", "../../javascript/controllers/country_profile_controller.js", "../../javascript/src/legend.js", "../../javascript/responsivefy.js", "../../javascript/controllers/documents_controller.js", "../../javascript/controllers/file_uploads_controller.js", "../../javascript/controllers/invitations_controller.js", "../../javascript/controllers/location_documents_controller.js", "../../javascript/controllers/location_migrations_controller.js", "../../javascript/controllers/location_periods_controller.js", "../../javascript/controllers/locations_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/nested_form_controller.js", "../../javascript/controllers/observation_collection_selector_controller.js", "../../javascript/controllers/observation_collections_controller.js", "../../javascript/controllers/observations_controller.js", "../../javascript/controllers/pagination_controller.js", "../../javascript/controllers/sortable_controller.js", "../../../node_modules/sortablejs/modular/sortable.esm.js", "../../javascript/controllers/source_documents_controller.js", "../../javascript/controllers/users_controller.js", "rails:/var/www/cholera-taxonomy/staging/releases/20260718143505/app/javascript/controllers/**/*_controller.js", "../../javascript/controllers/index.js", "../../javascript/application.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    this.monitor.recordMessage()\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return null\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href // eslint-disable-line\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import adapters from \"./adapters\"\nimport Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\nimport Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport Subscriptions from \"./subscriptions\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, trac-12537)\n\t//   .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x,\n      y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }, getWindow(popper)) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export { default as applyStyles } from \"./applyStyles.js\";\nexport { default as arrow } from \"./arrow.js\";\nexport { default as computeStyles } from \"./computeStyles.js\";\nexport { default as eventListeners } from \"./eventListeners.js\";\nexport { default as flip } from \"./flip.js\";\nexport { default as hide } from \"./hide.js\";\nexport { default as offset } from \"./offset.js\";\nexport { default as popperOffsets } from \"./popperOffsets.js\";\nexport { default as preventOverflow } from \"./preventOverflow.js\";", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref) {\n        var name = _ref.name,\n            _ref$options = _ref.options,\n            options = _ref$options === void 0 ? {} : _ref$options,\n            effect = _ref.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.18.1';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`',\n      INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * **Security:** See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md)\n     * \u2014 `_.template` is insecure and will be removed in v5.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n\n      // Prevent prototype pollution:\n      // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block constructor/prototype as non-terminal traversal keys to prevent\n        // escaping the object graph into built-in constructors and prototypes.\n        if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        baseAssignValue(result, pair[0], pair[1]);\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * **Note:** If `lower` is greater than `upper`, the values are swapped.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * // when lower is greater than upper the values are swapped\n     * _.random(5, 0);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(-5);\n     * // => an integer between -5 and 0\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('d\u00E9j\u00E0 vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Security:** `_.template` is insecure and should not be used. It will be\n     * removed in Lodash v5. Avoid untrusted input. See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md).\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      arrayEach(importsKeys, function(key) {\n        if (reForbiddenIdentifierChars.test(key)) {\n          throw new Error(INVALID_TEMPL_IMPORTS_ERROR_TEXT);\n        }\n      });\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n", "export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can\u2019t do this\n  // for a comparator (except for specific, known comparators) because we can\u2019t\n  // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n", "export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export function blur(values, r) {\n  if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\n  let length = values.length;\n  if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\n  if (!length || !r) return values;\n  const blur = blurf(r);\n  const temp = values.slice();\n  blur(values, temp, 0, length, 1);\n  blur(temp, values, 0, length, 1);\n  blur(values, temp, 0, length, 1);\n  return values;\n}\n\nexport const blur2 = Blur2(blurf);\n\nexport const blurImage = Blur2(blurfImage);\n\nfunction Blur2(blur) {\n  return function(data, rx, ry = rx) {\n    if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\n    if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\n    let {data: values, width, height} = data;\n    if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\n    if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\n    if (!width || !height || (!rx && !ry)) return data;\n    const blurx = rx && blur(rx);\n    const blury = ry && blur(ry);\n    const temp = values.slice();\n    if (blurx && blury) {\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    } else if (blurx) {\n      blurh(blurx, values, temp, width, height);\n      blurh(blurx, temp, values, width, height);\n      blurh(blurx, values, temp, width, height);\n    } else if (blury) {\n      blurv(blury, values, temp, width, height);\n      blurv(blury, temp, values, width, height);\n      blurv(blury, values, temp, width, height);\n    }\n    return data;\n  };\n}\n\nfunction blurh(blur, T, S, w, h) {\n  for (let y = 0, n = w * h; y < n;) {\n    blur(T, S, y, y += w, 1);\n  }\n}\n\nfunction blurv(blur, T, S, w, h) {\n  for (let x = 0, n = w * h; x < w; ++x) {\n    blur(T, S, x, x + n, w);\n  }\n}\n\nfunction blurfImage(radius) {\n  const blur = blurf(radius);\n  return (T, S, start, stop, step) => {\n    start <<= 2, stop <<= 2, step <<= 2;\n    blur(T, S, start + 0, stop + 0, step);\n    blur(T, S, start + 1, stop + 1, step);\n    blur(T, S, start + 2, stop + 2, step);\n    blur(T, S, start + 3, stop + 3, step);\n  };\n}\n\n// Given a target array T, a source array S, sets each value T[i] to the average\n// of {S[i - r], \u2026, S[i], \u2026, S[i + r]}, where r = \u230Aradius\u230B, start <= i < stop,\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\n// according to r - \u230Aradius\u230B.\nfunction blurf(radius) {\n  const radius0 = Math.floor(radius);\n  if (radius0 === radius) return bluri(radius);\n  const t = radius - radius0;\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius0 * S[start];\n    const s0 = step * radius0;\n    const s1 = s0 + step;\n    for (let i = start, j = start + s0; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s0)];\n      T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\n      sum -= S[Math.max(start, i - s0)];\n    }\n  };\n}\n\n// Like blurf, but optimized for integer radius.\nfunction bluri(radius) {\n  const w = 2 * radius + 1;\n  return (T, S, start, stop, step) => { // stop must be aligned!\n    if (!((stop -= step) >= start)) return; // inclusive stop\n    let sum = radius * S[start];\n    const s = step * radius;\n    for (let i = start, j = start + s; i < j; i += step) {\n      sum += S[Math.min(stop, i)];\n    }\n    for (let i = start, j = stop; i <= j; i += step) {\n      sum += S[Math.min(stop, i + s)];\n      T[i] = sum / w;\n      sum -= S[Math.max(start, i - s)];\n    }\n  };\n}\n", "export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n", "function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n", "export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}", "export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n", "export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n", "// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n", "export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "export default function identity(x) {\n  return x;\n}\n", "import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n", "export default function permute(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n", "import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n", "import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n  return (reduce.length !== 2\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n    .map(([key]) => key);\n}\n", "var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n", "export default function constant(x) {\n  return () => x;\n}\n", "const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n  let prestep;\n  while (true) {\n    const step = tickIncrement(start, stop, count);\n    if (step === prestep || step === 0 || !isFinite(step)) {\n      return [start, stop];\n    } else if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n    }\n    prestep = step;\n  }\n}\n", "import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n", "import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function bin() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    if (!Array.isArray(data)) data = Array.from(data);\n\n    var i,\n        n = data.length,\n        x,\n        step,\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, and nice the\n    // default domain accordingly.\n    if (!Array.isArray(tz)) {\n      const max = x1, tn = +tz;\n      if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n      tz = ticks(x0, x1, tn);\n\n      // If the domain is aligned with the first tick (which it will by\n      // default), then we can use quantization rather than bisection to bin\n      // values, which is substantially faster.\n      if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n      // If the last threshold is coincident with the domain\u2019s upper bound, the\n      // last bin will be zero-width. If the default domain is used, and this\n      // last threshold is coincident with the maximum input value, we can\n      // extend the niced upper bound by one tick to ensure uniform bin widths;\n      // otherwise, we simply remove the last threshold. Note that we don\u2019t\n      // coerce values or the domain to numbers, and thus must be careful to\n      // compare order (>=) rather than strict equality (===)!\n      if (tz[tz.length - 1] >= x1) {\n        if (max >= x1 && domain === extent) {\n          const step = tickIncrement(x0, x1, tn);\n          if (isFinite(step)) {\n            if (step > 0) {\n              x1 = (Math.floor(x1 / step) + 1) * step;\n            } else if (step < 0) {\n              x1 = (Math.ceil(x1 * -step) + 1) / -step;\n            }\n          }\n        } else {\n          tz.pop();\n        }\n      }\n    }\n\n    // Remove any thresholds outside the domain.\n    // Be careful not to mutate an array owned by the user!\n    var m = tz.length, a = 0, b = m;\n    while (tz[a] <= x0) ++a;\n    while (tz[b - 1] > x1) --b;\n    if (a || b < m) tz = tz.slice(a, b), m = b - a;\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    if (isFinite(step)) {\n      if (step > 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n          }\n        }\n      } else if (step < 0) {\n        for (i = 0; i < n; ++i) {\n          if ((x = values[i]) != null && x0 <= x && x <= x1) {\n            const j = Math.floor((x0 - x) * step);\n            bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n          }\n        }\n      }\n    } else {\n      for (i = 0; i < n; ++i) {\n        if ((x = values[i]) != null && x0 <= x && x <= x1) {\n          bins[bisect(tz, x, 0, m)].push(data[i]);\n        }\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\" ? _ : constant(Array.isArray(_) ? slice.call(_) : _), histogram) : threshold;\n  };\n\n  return histogram;\n}\n", "export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n", "export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n", "export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n", "export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n", "import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n", "import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (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\nexport function quantileIndex(values, p, valueof = number) {\n  if (isNaN(p = +p)) return;\n  numbers = Float64Array.from(values, (_, i) => number(valueof(values[i], i, values)));\n  if (p <= 0) return minIndex(numbers);\n  if (p >= 1) return maxIndex(numbers);\n  var numbers,\n      index = Uint32Array.from(values, (_, i) => i),\n      j = numbers.length - 1,\n      i = Math.floor(j * p);\n  quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n  i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n  return i >= 0 ? i : -1;\n}\n", "import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function thresholdFreedmanDiaconis(values, min, max) {\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n", "import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n  const c = count(values), d = deviation(values);\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n", "export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n", "import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n  return quantileIndex(values, 0.5, valueof);\n}\n", "function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n", "import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n  const counts = new InternMap();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  }\n  let modeValue;\n  let modeCount = 0;\n  for (const [value, count] of counts) {\n    if (count > modeCount) {\n      modeCount = count;\n      modeValue = value;\n    }\n  }\n  return modeValue;\n}\n", "export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n", "export default function range(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", "import ascending from \"./ascending.js\";\nimport {ascendingDefined, compareDefined} from \"./sort.js\";\n\nexport default function rank(values, valueof = ascending) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  let V = Array.from(values);\n  const R = new Float64Array(V.length);\n  if (valueof.length !== 2) V = V.map(valueof), valueof = ascending;\n  const compareIndex = (i, j) => valueof(V[i], V[j]);\n  let k, r;\n  values = Uint32Array.from(V, (_, i) => i);\n  // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\n  values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));\n  values.forEach((j, i) => {\n      const c = compareIndex(j, k === undefined ? j : k);\n      if (c >= 0) {\n        if (k === undefined || c > 0) k = j, r = i;\n        R[j] = r;\n      } else {\n        R[j] = NaN;\n      }\n    });\n  return R;\n}\n", "import ascending from \"./ascending.js\";\n\nexport default function least(values, compare = ascending) {\n  let min;\n  let defined = false;\n  if (compare.length === 1) {\n    let minValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, minValue) < 0\n          : ascending(value, value) === 0) {\n        min = element;\n        minValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, min) < 0\n          : compare(value, value) === 0) {\n        min = value;\n        defined = true;\n      }\n    }\n  }\n  return min;\n}\n", "import ascending from \"./ascending.js\";\nimport minIndex from \"./minIndex.js\";\n\nexport default function leastIndex(values, compare = ascending) {\n  if (compare.length === 1) return minIndex(values, compare);\n  let minValue;\n  let min = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (min < 0\n        ? compare(value, value) === 0\n        : compare(value, minValue) < 0) {\n      minValue = value;\n      min = index;\n    }\n  }\n  return min;\n}\n", "import ascending from \"./ascending.js\";\nimport maxIndex from \"./maxIndex.js\";\n\nexport default function greatestIndex(values, compare = ascending) {\n  if (compare.length === 1) return maxIndex(values, compare);\n  let maxValue;\n  let max = -1;\n  let index = -1;\n  for (const value of values) {\n    ++index;\n    if (max < 0\n        ? compare(value, value) === 0\n        : compare(value, maxValue) > 0) {\n      maxValue = value;\n      max = index;\n    }\n  }\n  return max;\n}\n", "import leastIndex from \"./leastIndex.js\";\n\nexport default function scan(values, compare) {\n  const index = leastIndex(values, compare);\n  return index < 0 ? undefined : index;\n}\n", "export default shuffler(Math.random);\n\nexport function shuffler(random) {\n  return function shuffle(array, i0 = 0, i1 = array.length) {\n    let m = i1 - (i0 = +i0);\n    while (m) {\n      const i = random() * m-- | 0, t = array[m + i0];\n      array[m + i0] = array[i + i0];\n      array[i + i0] = t;\n    }\n    return array;\n  };\n}\n", "export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n", "import min from \"./min.js\";\n\nexport default function transpose(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.js\";\n\nexport default function zip() {\n  return transpose(arguments);\n}\n", "export default function every(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (!test(value, ++index, values)) {\n      return false;\n    }\n  }\n  return true;\n}\n", "export default function some(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      return true;\n    }\n  }\n  return false;\n}\n", "export default function filter(values, test) {\n  if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n  const array = [];\n  let index = -1;\n  for (const value of values) {\n    if (test(value, ++index, values)) {\n      array.push(value);\n    }\n  }\n  return array;\n}\n", "export default function map(values, mapper) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n  return Array.from(values, (value, index) => mapper(value, index, values));\n}\n", "export default function reduce(values, reducer, value) {\n  if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n  const iterator = values[Symbol.iterator]();\n  let done, next, index = -1;\n  if (arguments.length < 3) {\n    ({done, value} = iterator.next());\n    if (done) return;\n    ++index;\n  }\n  while (({done, value: next} = iterator.next()), !done) {\n    value = reducer(value, next, ++index, values);\n  }\n  return value;\n}\n", "export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function difference(values, ...others) {\n  values = new InternSet(values);\n  for (const other of others) {\n    for (const value of other) {\n      values.delete(value);\n    }\n  }\n  return values;\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function disjoint(values, other) {\n  const iterator = other[Symbol.iterator](), set = new InternSet();\n  for (const v of values) {\n    if (set.has(v)) return false;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) break;\n      if (Object.is(v, value)) return false;\n      set.add(value);\n    }\n  }\n  return true;\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function intersection(values, ...others) {\n  values = new InternSet(values);\n  others = others.map(set);\n  out: for (const value of values) {\n    for (const other of others) {\n      if (!other.has(value)) {\n        values.delete(value);\n        continue out;\n      }\n    }\n  }\n  return values;\n}\n\nfunction set(values) {\n  return values instanceof InternSet ? values : new InternSet(values);\n}\n", "export default function superset(values, other) {\n  const iterator = values[Symbol.iterator](), set = new Set();\n  for (const o of other) {\n    const io = intern(o);\n    if (set.has(io)) continue;\n    let value, done;\n    while (({value, done} = iterator.next())) {\n      if (done) return false;\n      const ivalue = intern(value);\n      set.add(ivalue);\n      if (Object.is(io, ivalue)) break;\n    }\n  }\n  return true;\n}\n\nfunction intern(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "import superset from \"./superset.js\";\n\nexport default function subset(values, other) {\n  return superset(other, values);\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n  const set = new InternSet();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n", "export {default as bisect, bisectRight, bisectLeft, bisectCenter} from \"./bisect.js\";\nexport {default as ascending} from \"./ascending.js\";\nexport {default as bisector} from \"./bisector.js\";\nexport {blur, blur2, blurImage} from \"./blur.js\";\nexport {default as count} from \"./count.js\";\nexport {default as cross} from \"./cross.js\";\nexport {default as cumsum} from \"./cumsum.js\";\nexport {default as descending} from \"./descending.js\";\nexport {default as deviation} from \"./deviation.js\";\nexport {default as extent} from \"./extent.js\";\nexport {Adder, fsum, fcumsum} from \"./fsum.js\";\nexport {default as group, flatGroup, flatRollup, groups, index, indexes, rollup, rollups} from \"./group.js\";\nexport {default as groupSort} from \"./groupSort.js\";\nexport {default as bin, default as histogram} from \"./bin.js\"; // Deprecated; use bin.\nexport {default as thresholdFreedmanDiaconis} from \"./threshold/freedmanDiaconis.js\";\nexport {default as thresholdScott} from \"./threshold/scott.js\";\nexport {default as thresholdSturges} from \"./threshold/sturges.js\";\nexport {default as max} from \"./max.js\";\nexport {default as maxIndex} from \"./maxIndex.js\";\nexport {default as mean} from \"./mean.js\";\nexport {default as median, medianIndex} from \"./median.js\";\nexport {default as merge} from \"./merge.js\";\nexport {default as min} from \"./min.js\";\nexport {default as minIndex} from \"./minIndex.js\";\nexport {default as mode} from \"./mode.js\";\nexport {default as nice} from \"./nice.js\";\nexport {default as pairs} from \"./pairs.js\";\nexport {default as permute} from \"./permute.js\";\nexport {default as quantile, quantileIndex, quantileSorted} from \"./quantile.js\";\nexport {default as quickselect} from \"./quickselect.js\";\nexport {default as range} from \"./range.js\";\nexport {default as rank} from \"./rank.js\";\nexport {default as least} from \"./least.js\";\nexport {default as leastIndex} from \"./leastIndex.js\";\nexport {default as greatest} from \"./greatest.js\";\nexport {default as greatestIndex} from \"./greatestIndex.js\";\nexport {default as scan} from \"./scan.js\"; // Deprecated; use leastIndex.\nexport {default as shuffle, shuffler} from \"./shuffle.js\";\nexport {default as sum} from \"./sum.js\";\nexport {default as ticks, tickIncrement, tickStep} from \"./ticks.js\";\nexport {default as transpose} from \"./transpose.js\";\nexport {default as variance} from \"./variance.js\";\nexport {default as zip} from \"./zip.js\";\nexport {default as every} from \"./every.js\";\nexport {default as some} from \"./some.js\";\nexport {default as filter} from \"./filter.js\";\nexport {default as map} from \"./map.js\";\nexport {default as reduce} from \"./reduce.js\";\nexport {default as reverse} from \"./reverse.js\";\nexport {default as sort} from \"./sort.js\";\nexport {default as difference} from \"./difference.js\";\nexport {default as disjoint} from \"./disjoint.js\";\nexport {default as intersection} from \"./intersection.js\";\nexport {default as subset} from \"./subset.js\";\nexport {default as superset} from \"./superset.js\";\nexport {default as union} from \"./union.js\";\nexport {InternMap, InternSet} from \"internmap\";\n", "export default function(x) {\n  return x;\n}\n", "import identity from \"./identity.js\";\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)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\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      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\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] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\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 + offset) : 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)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\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 = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), 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  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\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", "export {\n  axisTop,\n  axisRight,\n  axisBottom,\n  axisLeft\n} from \"./axis.js\";\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) 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.js\";\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.js\";\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; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\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", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\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", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\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", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else 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", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\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", "export default function(update) {\n  return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\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.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\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\u2019t 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 = new Map,\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 = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(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 = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\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.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\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 = arraylike(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\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\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  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\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", "import {Selection} from \"./index.js\";\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", "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  return Array.from(this);\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  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\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 namespace from \"../namespace.js\";\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.js\";\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.js\";\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", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\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  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\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.options);\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, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\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.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\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  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\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", "export default function*() {\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]) yield node;\n    }\n  }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\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\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\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  selection: selection_selection,\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  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\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.js\";\nimport select from \"./select.js\";\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", "export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n", "import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\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    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n", "import pointer from \"./pointer.js\";\nimport sourceEvent from \"./sourceEvent.js\";\n\nexport default function(events, node) {\n  if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n    events = sourceEvent(events);\n    if (node === undefined) node = events.currentTarget;\n    events = events.touches || [events];\n  }\n  return Array.from(events, event => pointer(event, node));\n}\n", "import array from \"./array.js\";\nimport {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([array(selector)], root);\n}\n", "export {default as create} from \"./create.js\";\nexport {default as creator} from \"./creator.js\";\nexport {default as local} from \"./local.js\";\nexport {default as matcher} from \"./matcher.js\";\nexport {default as namespace} from \"./namespace.js\";\nexport {default as namespaces} from \"./namespaces.js\";\nexport {default as pointer} from \"./pointer.js\";\nexport {default as pointers} from \"./pointers.js\";\nexport {default as select} from \"./select.js\";\nexport {default as selectAll} from \"./selectAll.js\";\nexport {default as selection} from \"./selection/index.js\";\nexport {default as selector} from \"./selector.js\";\nexport {default as selectorAll} from \"./selectorAll.js\";\nexport {styleValue as style} from \"./selection/style.js\";\nexport {default as window} from \"./window.js\";\n", "// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n", "import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\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, nonpassivecapture);\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 x => () => x;\n", "export default function DragEvent(type, {\n  sourceEvent,\n  subject,\n  target,\n  identifier,\n  active,\n  x, y, dx, dy,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    subject: {value: subject, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    identifier: {value: identifier, enumerable: true, configurable: true},\n    active: {value: active, enumerable: true, configurable: true},\n    x: {value: x, enumerable: true, configurable: true},\n    y: {value: y, enumerable: true, configurable: true},\n    dx: {value: dx, enumerable: true, configurable: true},\n    dy: {value: dy, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\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 {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"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, nonpassive)\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(event, d) {\n    if (touchending || !filter.call(this, event, d)) return;\n    var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n    if (!gesture) return;\n    select(event.view)\n      .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n      .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n    nodrag(event.view);\n    nopropagation(event);\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\", event);\n  }\n\n  function mousemoved(event) {\n    noevent(event);\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\", event);\n  }\n\n  function mouseupped(event) {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent(event);\n    gestures.mouse(\"end\", event);\n  }\n\n  function touchstarted(event, d) {\n    if (!filter.call(this, event, d)) return;\n    var touches = event.changedTouches,\n        c = container.call(this, event, d),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n        nopropagation(event);\n        gesture(\"start\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchmoved(event) {\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(event);\n        gesture(\"drag\", event, touches[i]);\n      }\n    }\n  }\n\n  function touchended(event) {\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(event);\n        gesture(\"end\", event, touches[i]);\n      }\n    }\n  }\n\n  function beforestart(that, container, event, d, identifier, touch) {\n    var dispatch = listeners.copy(),\n        p = pointer(touch || event, container), dx, dy,\n        s;\n\n    if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n        sourceEvent: event,\n        target: drag,\n        identifier,\n        active,\n        x: p[0],\n        y: p[1],\n        dx: 0,\n        dy: 0,\n        dispatch\n      }), d)) == null) return;\n\n    dx = s.x - p[0] || 0;\n    dy = s.y - p[1] || 0;\n\n    return function gesture(type, event, touch) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[identifier] = gesture, n = active++; break;\n        case \"end\": delete gestures[identifier], --active; // falls through\n        case \"drag\": p = pointer(touch || event, container), n = active; break;\n      }\n      dispatch.call(\n        type,\n        that,\n        new DragEvent(type, {\n          sourceEvent: event,\n          subject: s,\n          target: drag,\n          identifier,\n          active: n,\n          x: p[0] + dx,\n          y: p[1] + dy,\n          dx: p[0] - p0[0],\n          dy: p[1] - p0[1],\n          dispatch\n        }),\n        d\n      );\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 as drag} from \"./drag.js\";\nexport {default as dragDisable, yesdrag as dragEnable} from \"./nodrag.js\";\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.js\";\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    reHex = /^#([0-9a-f]{3,8})$/,\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  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\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]) // eslint-disable-line no-prototype-builtins\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(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(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() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\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(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(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() {\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  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\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  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\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 const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst 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) return hcl2lab(o);\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(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\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.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\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\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\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) * degrees - 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(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(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() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\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.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\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.js\";\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 x => () => x;\n", "import constant from \"./constant.js\";\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.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\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", "export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(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 = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import value from \"./value.js\";\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.js\";\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 {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\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      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\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.js\";\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 = +b, function(t) {\n    return Math.round(a * (1 - t) + 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 decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\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 number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\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 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\nexport default (function zoomRho(rho, rho2, rho4) {\n\n  // p0 = [ux0, uy0, w0]\n  // p1 = [ux1, uy1, w1]\n  function zoom(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 \u2245 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 * rho / Math.SQRT2;\n\n    return i;\n  }\n\n  zoom.rho = function(_) {\n    var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n    return zoomRho(_1, _2, _4);\n  };\n\n  return zoom;\n})(Math.SQRT2, 2, 4);\n", "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\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.js\";\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.js\";\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.js\";\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", "import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\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.js\";\nexport {default as interpolateArray} from \"./array.js\";\nexport {default as interpolateBasis} from \"./basis.js\";\nexport {default as interpolateBasisClosed} from \"./basisClosed.js\";\nexport {default as interpolateDate} from \"./date.js\";\nexport {default as interpolateDiscrete} from \"./discrete.js\";\nexport {default as interpolateHue} from \"./hue.js\";\nexport {default as interpolateNumber} from \"./number.js\";\nexport {default as interpolateNumberArray} from \"./numberArray.js\";\nexport {default as interpolateObject} from \"./object.js\";\nexport {default as interpolateRound} from \"./round.js\";\nexport {default as interpolateString} from \"./string.js\";\nexport {interpolateTransformCss, interpolateTransformSvg} from \"./transform/index.js\";\nexport {default as interpolateZoom} from \"./zoom.js\";\nexport {default as interpolateRgb, rgbBasis as interpolateRgbBasis, rgbBasisClosed as interpolateRgbBasisClosed} from \"./rgb.js\";\nexport {default as interpolateHsl, hslLong as interpolateHslLong} from \"./hsl.js\";\nexport {default as interpolateLab} from \"./lab.js\";\nexport {default as interpolateHcl, hclLong as interpolateHclLong} from \"./hcl.js\";\nexport {default as interpolateCubehelix, cubehelixLong as interpolateCubehelixLong} from \"./cubehelix.js\";\nexport {default as piecewise} from \"./piecewise.js\";\nexport {default as quantize} from \"./quantize.js\";\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\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, 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.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {Timer, now} from \"./timer.js\";\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  t._restart = t.restart;\n  t.restart = function(callback, delay, time) {\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  }\n  t.restart(callback, delay, time);\n  return t;\n}\n", "export {\n  now,\n  timer,\n  timerFlush\n} from \"./timer.js\";\n\nexport {\n  default as timeout\n} from \"./timeout.js\";\n\nexport {\n  default as interval\n} from \"./interval.js\";\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.js\";\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 interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {get, set} from \"./schedule.js\";\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\u2019re 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\u2019re 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 {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\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 {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, 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.js\";\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.js\";\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.js\";\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 {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\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.js\";\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 {get, set, init} from \"./schedule.js\";\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\u2019re 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 {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\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.js\";\nimport schedule, {get} from \"./schedule.js\";\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 {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.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\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\u2019re 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.call(this, 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.js\";\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", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) 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, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\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 {set} from \"./schedule.js\";\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\u2019re 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    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\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  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\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  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export const linear = t => +t;\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 (+t === 1) ? 1 : 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", "// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n", "import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n  return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n  return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 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) * t * (s * (t - 1) + t);\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 * ((t + 1) * s + t) + 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", "import {tpmt} from \"./math.js\";\n\nvar 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 * tpmt(-(--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 * tpmt(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 * tpmt(-t) * Math.sin((s - t) / p)\n        : 2 - a * tpmt(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.js\";\n\nexport {\n  quadInOut as easeQuad,\n  quadIn as easeQuadIn,\n  quadOut as easeQuadOut,\n  quadInOut as easeQuadInOut\n} from \"./quad.js\";\n\nexport {\n  cubicInOut as easeCubic,\n  cubicIn as easeCubicIn,\n  cubicOut as easeCubicOut,\n  cubicInOut as easeCubicInOut\n} from \"./cubic.js\";\n\nexport {\n  polyInOut as easePoly,\n  polyIn as easePolyIn,\n  polyOut as easePolyOut,\n  polyInOut as easePolyInOut\n} from \"./poly.js\";\n\nexport {\n  sinInOut as easeSin,\n  sinIn as easeSinIn,\n  sinOut as easeSinOut,\n  sinInOut as easeSinInOut\n} from \"./sin.js\";\n\nexport {\n  expInOut as easeExp,\n  expIn as easeExpIn,\n  expOut as easeExpOut,\n  expInOut as easeExpInOut\n} from \"./exp.js\";\n\nexport {\n  circleInOut as easeCircle,\n  circleIn as easeCircleIn,\n  circleOut as easeCircleOut,\n  circleInOut as easeCircleInOut\n} from \"./circle.js\";\n\nexport {\n  bounceOut as easeBounce,\n  bounceIn as easeBounceIn,\n  bounceOut as easeBounceOut,\n  bounceInOut as easeBounceInOut\n} from \"./bounce.js\";\n\nexport {\n  backInOut as easeBack,\n  backIn as easeBackIn,\n  backOut as easeBackOut,\n  backInOut as easeBackInOut\n} from \"./back.js\";\n\nexport {\n  elasticOut as easeElastic,\n  elasticIn as easeElasticIn,\n  elasticOut as easeElasticOut,\n  elasticInOut as easeElasticInOut\n} from \"./elastic.js\";\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\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      throw new Error(`transition ${id} not found`);\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.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\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.js\";\nexport {default as transition} from \"./transition/index.js\";\nexport {default as active} from \"./active.js\";\nexport {default as interrupt} from \"./interrupt.js\";\n", "export default x => () => x;\n", "export default function BrushEvent(type, {\n  sourceEvent,\n  target,\n  selection,\n  mode,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    selection: {value: selection, enumerable: true, configurable: true},\n    mode: {value: mode, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\n}\n", "export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\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 {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+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 == null ? null : [[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\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(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(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D 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      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"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        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\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 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? 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 ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\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, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\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(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && 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 = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\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      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\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 = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, 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(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\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      } 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(event, mode.name);\n    }\n\n    function keydowned(event) {\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(event);\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(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\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(event);\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(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(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(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\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 {\n  default as brush,\n  brushX,\n  brushY,\n  brushSelection\n} from \"./brush.js\";\n", "export var abs = Math.abs;\nexport 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;\nexport var epsilon = 1e-12;\n", "import {max, tau} from \"./math.js\";\n\nfunction range(i, j) {\n  return Array.from({length: j - i}, (_, k) => i + k);\n}\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  return chord(false, false);\n}\n\nexport function chordTranspose() {\n  return chord(false, true);\n}\n\nexport function chordDirected() {\n  return chord(true, false);\n}\n\nfunction chord(directed, transpose) {\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 = new Array(n),\n        groupIndex = range(0, n),\n        chords = new Array(n * n),\n        groups = new Array(n),\n        k = 0, dx;\n\n    matrix = Float64Array.from({length: n * n}, transpose\n        ? (_, i) => matrix[i % n][i / n | 0]\n        : (_, i) => matrix[i / n | 0][i % n]);\n\n    // Compute the scaling factor from value to angle in [0, 2pi].\n    for (let i = 0; i < n; ++i) {\n      let x = 0;\n      for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n      k += groupSums[i] = x;\n    }\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the angles for each group and constituent chord.\n    {\n      let x = 0;\n      if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n      for (const i of groupIndex) {\n        const x0 = x;\n        if (directed) {\n          const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\n          if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\n          for (const j of subgroupIndex) {\n            if (j < 0) {\n              const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n            } else {\n              const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n            }\n          }\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n        } else {\n          const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n          if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n          for (const j of subgroupIndex) {\n            let chord;\n            if (i < j) {\n              chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n              chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n            } else {\n              chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n              chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n              if (i === j) chord.source = chord.target;\n            }\n            if (chord.source && chord.target && chord.source.value < chord.target.value) {\n              const source = chord.source;\n              chord.source = chord.target;\n              chord.target = source;\n            }\n          }\n          groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n        }\n        x += dx;\n      }\n    }\n\n    // Remove empty chords.\n    chords = Object.values(chords);\n    chords.groups = groups;\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", "const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`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._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let 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._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`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._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We\u2019re 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._append`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._append`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(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n", "export {Path, path, pathRound} from \"./path.js\";\n", "export var slice = Array.prototype.slice;\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\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\nfunction defaultPadAngle() {\n  return 0;\n}\n\nfunction defaultArrowheadRadius() {\n  return 10;\n}\n\nfunction ribbon(headRadius) {\n  var source = defaultSource,\n      target = defaultTarget,\n      sourceRadius = defaultRadius,\n      targetRadius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      padAngle = defaultPadAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        s = source.apply(this, arguments),\n        t = target.apply(this, arguments),\n        ap = padAngle.apply(this, arguments) / 2,\n        argv = slice.call(arguments),\n        sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi,\n        sa1 = endAngle.apply(this, argv) - halfPi,\n        tr = +targetRadius.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    if (ap > epsilon) {\n      if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n      else sa0 = sa1 = (sa0 + sa1) / 2;\n      if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n      else ta0 = ta1 = (ta0 + ta1) / 2;\n    }\n\n    context.moveTo(sr * cos(sa0), sr * sin(sa0));\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) {\n      if (headRadius) {\n        var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n        context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n        context.lineTo(tr * cos(ta2), tr * sin(ta2));\n        context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n      } else {\n        context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n        context.arc(0, 0, tr, ta0, ta1);\n      }\n    }\n    context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  if (headRadius) ribbon.headRadius = function(_) {\n    return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n  };\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n  };\n\n  ribbon.sourceRadius = function(_) {\n    return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n  };\n\n  ribbon.targetRadius = function(_) {\n    return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\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.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\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\nexport default function() {\n  return ribbon();\n}\n\nexport function ribbonArrow() {\n  return ribbon(defaultArrowheadRadius);\n}\n", "export {default as chord, chordTranspose, chordDirected} from \"./chord.js\";\nexport {default as ribbon, ribbonArrow} from \"./ribbon.js\";\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 x => () => x;\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, nice, thresholdSturges, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport ascending from \"./ascending.js\";\nimport area from \"./area.js\";\nimport constant from \"./constant.js\";\nimport contains from \"./contains.js\";\nimport noop from \"./noop.js\";\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      const e = extent(values, finite);\n      tz = ticks(...nice(e[0], e[1], tz), tz);\n      while (tz[tz.length - 1] >= e[1]) tz.pop();\n      while (tz[1] < e[0]) tz.shift();\n    } else {\n      tz = tz.slice().sort(ascending);\n    }\n\n    return tz.map(value => contour(values, value));\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    const v = value == null ? NaN : +value;\n    if (isNaN(v)) throw new Error(`invalid value: ${value}`);\n\n    var polygons = [],\n        holes = [];\n\n    isorings(values, v, function(ring) {\n      smooth(ring, values, v);\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 = above(values[0], value);\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = above(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 = above(values[y * dx + dx], value);\n      t2 = above(values[y * dx], value);\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\n        t3 = t2, t2 = above(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 = above(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          v1 = valid(values[yt * dx + xt]);\n      if (x > 0 && x < dx && xt === x) {\n        point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\n      }\n      if (y > 0 && y < dy && yt === y) {\n        point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.floor(_[0]), _1 = Math.floor(_[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\n// When computing the extent, ignore infinite values (as well as invalid ones).\nfunction finite(x) {\n  return isFinite(x) ? x : NaN;\n}\n\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\n// Treat any invalid value as below negative infinity.\nfunction above(x, value) {\n  return x == null ? false : +x >= value;\n}\n\n// During smoothing, treat any invalid value as negative infinity.\nfunction valid(v) {\n  return v == null || isNaN(v = +v) ? -Infinity : v;\n}\n\nfunction smooth1(x, v0, v1, value) {\n  const a = value - v0;\n  const b = v1 - v0;\n  const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\n  return isNaN(d) ? x : x + d - 0.5;\n}\n", "import {blur2, max, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport Contours from \"./contours.js\";\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 grid(data) {\n    var values = new Float32Array(n * m),\n        pow2k = Math.pow(2, -k),\n        i = -1;\n\n    for (const d of data) {\n      var xi = (x(d, ++i, data) + o) * pow2k,\n          yi = (y(d, i, data) + o) * pow2k,\n          wi = +weight(d, i, data);\n      if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        var x0 = Math.floor(xi),\n            y0 = Math.floor(yi),\n            xt = xi - x0 - 0.5,\n            yt = yi - y0 - 0.5;\n        values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\n        values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\n        values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\n        values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\n      }\n    }\n\n    blur2({data: values, width: n, height: m}, r * pow2k);\n    return values;\n  }\n\n  function density(data) {\n    var values = grid(data),\n        tz = threshold(values),\n        pow4k = Math.pow(2, 2 * k);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = ticks(Number.MIN_VALUE, max(values) / pow4k, tz);\n    }\n\n    return Contours()\n        .size([n, m])\n        .thresholds(tz.map(d => d * pow4k))\n      (values)\n        .map((c, i) => (c.value = +tz[i], transform(c)));\n  }\n\n  density.contours = function(data) {\n    var values = grid(data),\n        contours = Contours().size([n, m]),\n        pow4k = Math.pow(2, 2 * k),\n        contour = value => {\n          value = +value;\n          var c = transform(contours.contour(values, value * pow4k));\n          c.value = value; // preserve exact threshold value\n          return c;\n        };\n    Object.defineProperty(contour, \"max\", {get: () => max(values) / pow4k});\n    return contour;\n  };\n\n  function transform(geometry) {\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 = +_[0], _1 = +_[1];\n    if (!(_0 >= 0 && _1 >= 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.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\n  };\n\n  return density;\n}\n", "export {default as contours} from \"./contours.js\";\nexport {default as contourDensity} from \"./density.js\";\n", "export const epsilon = 1.1102230246251565e-16;\nexport const splitter = 134217729;\nexport const resulterrbound = (3 + 8 * epsilon) * epsilon;\n\n// fast_expansion_sum_zeroelim routine from original code\nexport function sum(elen, e, flen, f, h) {\n    let Q, Qnew, hh, bvirt;\n    let enow = e[0];\n    let fnow = f[0];\n    let eindex = 0;\n    let findex = 0;\n    if ((fnow > enow) === (fnow > -enow)) {\n        Q = enow;\n        enow = e[++eindex];\n    } else {\n        Q = fnow;\n        fnow = f[++findex];\n    }\n    let hindex = 0;\n    if (eindex < elen && findex < flen) {\n        if ((fnow > enow) === (fnow > -enow)) {\n            Qnew = enow + Q;\n            hh = Q - (Qnew - enow);\n            enow = e[++eindex];\n        } else {\n            Qnew = fnow + Q;\n            hh = Q - (Qnew - fnow);\n            fnow = f[++findex];\n        }\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        while (eindex < elen && findex < flen) {\n            if ((fnow > enow) === (fnow > -enow)) {\n                Qnew = Q + enow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (enow - bvirt);\n                enow = e[++eindex];\n            } else {\n                Qnew = Q + fnow;\n                bvirt = Qnew - Q;\n                hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n                fnow = f[++findex];\n            }\n            Q = Qnew;\n            if (hh !== 0) {\n                h[hindex++] = hh;\n            }\n        }\n    }\n    while (eindex < elen) {\n        Qnew = Q + enow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (enow - bvirt);\n        enow = e[++eindex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    while (findex < flen) {\n        Qnew = Q + fnow;\n        bvirt = Qnew - Q;\n        hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n        fnow = f[++findex];\n        Q = Qnew;\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function sum_three(alen, a, blen, b, clen, c, tmp, out) {\n    return sum(sum(alen, a, blen, b, tmp), tmp, clen, c, out);\n}\n\n// scale_expansion_zeroelim routine from oritinal code\nexport function scale(elen, e, b, h) {\n    let Q, sum, hh, product1, product0;\n    let bvirt, c, ahi, alo, bhi, blo;\n\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    let enow = e[0];\n    Q = enow * b;\n    c = splitter * enow;\n    ahi = c - (c - enow);\n    alo = enow - ahi;\n    hh = alo * blo - (Q - ahi * bhi - alo * bhi - ahi * blo);\n    let hindex = 0;\n    if (hh !== 0) {\n        h[hindex++] = hh;\n    }\n    for (let i = 1; i < elen; i++) {\n        enow = e[i];\n        product1 = enow * b;\n        c = splitter * enow;\n        ahi = c - (c - enow);\n        alo = enow - ahi;\n        product0 = alo * blo - (product1 - ahi * bhi - alo * bhi - ahi * blo);\n        sum = Q + product0;\n        bvirt = sum - Q;\n        hh = Q - (sum - bvirt) + (product0 - bvirt);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n        Q = product1 + sum;\n        hh = sum - (Q - product1);\n        if (hh !== 0) {\n            h[hindex++] = hh;\n        }\n    }\n    if (Q !== 0 || hindex === 0) {\n        h[hindex++] = Q;\n    }\n    return hindex;\n}\n\nexport function negate(elen, e) {\n    for (let i = 0; i < elen; i++) e[i] = -e[i];\n    return elen;\n}\n\nexport function estimate(elen, e) {\n    let Q = e[0];\n    for (let i = 1; i < elen; i++) Q += e[i];\n    return Q;\n}\n\nexport function vec(n) {\n    return new Float64Array(n);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum} from './util.js';\n\nconst ccwerrboundA = (3 + 16 * epsilon) * epsilon;\nconst ccwerrboundB = (2 + 12 * epsilon) * epsilon;\nconst ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n    let acxtail, acytail, bcxtail, bcytail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const acx = ax - cx;\n    const bcx = bx - cx;\n    const acy = ay - cy;\n    const bcy = by - cy;\n\n    s1 = acx * bcy;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcx;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    B[3] = u3;\n\n    let det = estimate(4, B);\n    let errbound = ccwerrboundB * detsum;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - acx;\n    acxtail = ax - (acx + bvirt) + (bvirt - cx);\n    bvirt = bx - bcx;\n    bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n    bvirt = ay - acy;\n    acytail = ay - (acy + bvirt) + (bvirt - cy);\n    bvirt = by - bcy;\n    bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n    if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n        return det;\n    }\n\n    errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n    det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n    if (det >= errbound || -det >= errbound) return det;\n\n    s1 = acxtail * bcy;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcy;\n    bhi = c - (c - bcy);\n    blo = bcy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcx;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcx;\n    bhi = c - (c - bcx);\n    blo = bcx - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C1len = sum(4, B, 4, u, C1);\n\n    s1 = acx * bcytail;\n    c = splitter * acx;\n    ahi = c - (c - acx);\n    alo = acx - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acy * bcxtail;\n    c = splitter * acy;\n    ahi = c - (c - acy);\n    alo = acy - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const C2len = sum(C1len, C1, 4, u, C2);\n\n    s1 = acxtail * bcytail;\n    c = splitter * acxtail;\n    ahi = c - (c - acxtail);\n    alo = acxtail - ahi;\n    c = splitter * bcytail;\n    bhi = c - (c - bcytail);\n    blo = bcytail - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = acytail * bcxtail;\n    c = splitter * acytail;\n    ahi = c - (c - acytail);\n    alo = acytail - ahi;\n    c = splitter * bcxtail;\n    bhi = c - (c - bcxtail);\n    blo = bcxtail - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    u[3] = u3;\n    const Dlen = sum(C2len, C2, 4, u, D);\n\n    return D[Dlen - 1];\n}\n\nexport function orient2d(ax, ay, bx, by, cx, cy) {\n    const detleft = (ay - cy) * (bx - cx);\n    const detright = (ax - cx) * (by - cy);\n    const det = detleft - detright;\n\n    const detsum = Math.abs(detleft + detright);\n    if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n    return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nexport function orient2dfast(ax, ay, bx, by, cx, cy) {\n    return (ay - cy) * (bx - cx) - (ax - cx) * (by - cy);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, scale} from './util.js';\n\nconst o3derrboundA = (7 + 56 * epsilon) * epsilon;\nconst o3derrboundB = (3 + 28 * epsilon) * epsilon;\nconst o3derrboundC = (26 + 288 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst at_b = vec(4);\nconst at_c = vec(4);\nconst bt_c = vec(4);\nconst bt_a = vec(4);\nconst ct_a = vec(4);\nconst ct_b = vec(4);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abt = vec(8);\nconst u = vec(4);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _16 = vec(16);\nconst _12 = vec(12);\n\nlet fin = vec(192);\nlet fin2 = vec(192);\n\nfunction finadd(finlen, alen, a) {\n    finlen = sum(finlen, fin, alen, a, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction tailinit(xtail, ytail, ax, ay, bx, by, a, b) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3, negate;\n    if (xtail === 0) {\n        if (ytail === 0) {\n            a[0] = 0;\n            b[0] = 0;\n            return 1;\n        }\n        negate = -ytail;\n        s1 = negate * ax;\n        c = splitter * negate;\n        ahi = c - (c - negate);\n        alo = negate - ahi;\n        c = splitter * ax;\n        bhi = c - (c - ax);\n        blo = ax - bhi;\n        a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n        a[1] = s1;\n        s1 = ytail * bx;\n        c = splitter * ytail;\n        ahi = c - (c - ytail);\n        alo = ytail - ahi;\n        c = splitter * bx;\n        bhi = c - (c - bx);\n        blo = bx - bhi;\n        b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n        b[1] = s1;\n        return 2;\n    }\n    if (ytail === 0) {\n        s1 = xtail * ay;\n        c = splitter * xtail;\n        ahi = c - (c - xtail);\n        alo = xtail - ahi;\n        c = splitter * ay;\n        bhi = c - (c - ay);\n        blo = ay - bhi;\n        a[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n        a[1] = s1;\n        negate = -xtail;\n        s1 = negate * by;\n        c = splitter * negate;\n        ahi = c - (c - negate);\n        alo = negate - ahi;\n        c = splitter * by;\n        bhi = c - (c - by);\n        blo = by - bhi;\n        b[0] = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n        b[1] = s1;\n        return 2;\n    }\n    s1 = xtail * ay;\n    c = splitter * xtail;\n    ahi = c - (c - xtail);\n    alo = xtail - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ytail * ax;\n    c = splitter * ytail;\n    ahi = c - (c - ytail);\n    alo = ytail - ahi;\n    c = splitter * ax;\n    bhi = c - (c - ax);\n    blo = ax - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    a[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    a[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    a[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    a[3] = u3;\n    s1 = ytail * bx;\n    c = splitter * ytail;\n    ahi = c - (c - ytail);\n    alo = ytail - ahi;\n    c = splitter * bx;\n    bhi = c - (c - bx);\n    blo = bx - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = xtail * by;\n    c = splitter * xtail;\n    ahi = c - (c - xtail);\n    alo = xtail - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    b[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    b[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    b[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    b[3] = u3;\n    return 4;\n}\n\nfunction tailadd(finlen, a, b, k, z) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, u3;\n    s1 = a * b;\n    c = splitter * a;\n    ahi = c - (c - a);\n    alo = a - ahi;\n    c = splitter * b;\n    bhi = c - (c - b);\n    blo = b - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    c = splitter * k;\n    bhi = c - (c - k);\n    blo = k - bhi;\n    _i = s0 * k;\n    c = splitter * s0;\n    ahi = c - (c - s0);\n    alo = s0 - ahi;\n    u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n    _j = s1 * k;\n    c = splitter * s1;\n    ahi = c - (c - s1);\n    alo = s1 - ahi;\n    _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n    _k = _i + _0;\n    bvirt = _k - _i;\n    u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n    u3 = _j + _k;\n    u[2] = _k - (u3 - _j);\n    u[3] = u3;\n    finlen = finadd(finlen, 4, u);\n    if (z !== 0) {\n        c = splitter * z;\n        bhi = c - (c - z);\n        blo = z - bhi;\n        _i = s0 * z;\n        c = splitter * s0;\n        ahi = c - (c - s0);\n        alo = s0 - ahi;\n        u[0] = alo * blo - (_i - ahi * bhi - alo * bhi - ahi * blo);\n        _j = s1 * z;\n        c = splitter * s1;\n        ahi = c - (c - s1);\n        alo = s1 - ahi;\n        _0 = alo * blo - (_j - ahi * bhi - alo * bhi - ahi * blo);\n        _k = _i + _0;\n        bvirt = _k - _i;\n        u[1] = _i - (_k - bvirt) + (_0 - bvirt);\n        u3 = _j + _k;\n        u[2] = _k - (u3 - _j);\n        u[3] = u3;\n        finlen = finadd(finlen, 4, u);\n    }\n    return finlen;\n}\n\nfunction orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail;\n    let adytail, bdytail, cdytail;\n    let adztail, bdztail, cdztail;\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _k, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            scale(4, bc, adz, _8), _8,\n            scale(4, ca, bdz, _8b), _8b, _16), _16,\n        scale(4, ab, cdz, _8), _8, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = o3derrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    bvirt = az - adz;\n    adztail = az - (adz + bvirt) + (bvirt - dz);\n    bvirt = bz - bdz;\n    bdztail = bz - (bdz + bvirt) + (bvirt - dz);\n    bvirt = cz - cdz;\n    cdztail = cz - (cdz + bvirt) + (bvirt - dz);\n\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 &&\n        adytail === 0 && bdytail === 0 && cdytail === 0 &&\n        adztail === 0 && bdztail === 0 && cdztail === 0) {\n        return det;\n    }\n\n    errbound = o3derrboundC * permanent + resulterrbound * Math.abs(det);\n    det +=\n        adz * (bdx * cdytail + cdy * bdxtail - (bdy * cdxtail + cdx * bdytail)) + adztail * (bdx * cdy - bdy * cdx) +\n        bdz * (cdx * adytail + ady * cdxtail - (cdy * adxtail + adx * cdytail)) + bdztail * (cdx * ady - cdy * adx) +\n        cdz * (adx * bdytail + bdy * adxtail - (ady * bdxtail + bdx * adytail)) + cdztail * (adx * bdy - ady * bdx);\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    const at_len = tailinit(adxtail, adytail, bdx, bdy, cdx, cdy, at_b, at_c);\n    const bt_len = tailinit(bdxtail, bdytail, cdx, cdy, adx, ady, bt_c, bt_a);\n    const ct_len = tailinit(cdxtail, cdytail, adx, ady, bdx, bdy, ct_a, ct_b);\n\n    const bctlen = sum(bt_len, bt_c, ct_len, ct_b, bct);\n    finlen = finadd(finlen, scale(bctlen, bct, adz, _16), _16);\n\n    const catlen = sum(ct_len, ct_a, at_len, at_c, cat);\n    finlen = finadd(finlen, scale(catlen, cat, bdz, _16), _16);\n\n    const abtlen = sum(at_len, at_b, bt_len, bt_a, abt);\n    finlen = finadd(finlen, scale(abtlen, abt, cdz, _16), _16);\n\n    if (adztail !== 0) {\n        finlen = finadd(finlen, scale(4, bc, adztail, _12), _12);\n        finlen = finadd(finlen, scale(bctlen, bct, adztail, _16), _16);\n    }\n    if (bdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ca, bdztail, _12), _12);\n        finlen = finadd(finlen, scale(catlen, cat, bdztail, _16), _16);\n    }\n    if (cdztail !== 0) {\n        finlen = finadd(finlen, scale(4, ab, cdztail, _12), _12);\n        finlen = finadd(finlen, scale(abtlen, abt, cdztail, _16), _16);\n    }\n\n    if (adxtail !== 0) {\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, adxtail, bdytail, cdz, cdztail);\n        }\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, -adxtail, cdytail, bdz, bdztail);\n        }\n    }\n    if (bdxtail !== 0) {\n        if (cdytail !== 0) {\n            finlen = tailadd(finlen, bdxtail, cdytail, adz, adztail);\n        }\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, -bdxtail, adytail, cdz, cdztail);\n        }\n    }\n    if (cdxtail !== 0) {\n        if (adytail !== 0) {\n            finlen = tailadd(finlen, cdxtail, adytail, bdz, bdztail);\n        }\n        if (bdytail !== 0) {\n            finlen = tailadd(finlen, -cdxtail, bdytail, adz, adztail);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function orient3d(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n\n    const det =\n        adz * (bdxcdy - cdxbdy) +\n        bdz * (cdxady - adxcdy) +\n        cdz * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * Math.abs(adz) +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * Math.abs(bdz) +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * Math.abs(cdz);\n\n    const errbound = o3derrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n\n    return orient3dadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, permanent);\n}\n\nexport function orient3dfast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n    const adz = az - dz;\n    const bdz = bz - dz;\n    const cdz = cz - dz;\n\n    return adx * (bdy * cdz - bdz * cdy) +\n        bdx * (cdy * adz - cdz * ady) +\n        cdx * (ady * bdz - adz * bdy);\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale} from './util.js';\n\nconst iccerrboundA = (10 + 96 * epsilon) * epsilon;\nconst iccerrboundB = (4 + 48 * epsilon) * epsilon;\nconst iccerrboundC = (44 + 576 * epsilon) * epsilon * epsilon;\n\nconst bc = vec(4);\nconst ca = vec(4);\nconst ab = vec(4);\nconst aa = vec(4);\nconst bb = vec(4);\nconst cc = vec(4);\nconst u = vec(4);\nconst v = vec(4);\nconst axtbc = vec(8);\nconst aytbc = vec(8);\nconst bxtca = vec(8);\nconst bytca = vec(8);\nconst cxtab = vec(8);\nconst cytab = vec(8);\nconst abt = vec(8);\nconst bct = vec(8);\nconst cat = vec(8);\nconst abtt = vec(4);\nconst bctt = vec(4);\nconst catt = vec(4);\n\nconst _8 = vec(8);\nconst _16 = vec(16);\nconst _16b = vec(16);\nconst _16c = vec(16);\nconst _32 = vec(32);\nconst _32b = vec(32);\nconst _48 = vec(48);\nconst _64 = vec(64);\n\nlet fin = vec(1152);\nlet fin2 = vec(1152);\n\nfunction finadd(finlen, a, alen) {\n    finlen = sum(finlen, fin, a, alen, fin2);\n    const tmp = fin; fin = fin2; fin2 = tmp;\n    return finlen;\n}\n\nfunction incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent) {\n    let finlen;\n    let adxtail, bdxtail, cdxtail, adytail, bdytail, cdytail;\n    let axtbclen, aytbclen, bxtcalen, bytcalen, cxtablen, cytablen;\n    let abtlen, bctlen, catlen;\n    let abttlen, bcttlen, cattlen;\n    let n1, n0;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    s1 = bdx * cdy;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cdx * bdy;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cdx * ady;\n    c = splitter * cdx;\n    ahi = c - (c - cdx);\n    alo = cdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = adx * cdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * cdy;\n    bhi = c - (c - cdy);\n    blo = cdy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ca[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ca[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ca[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ca[3] = u3;\n    s1 = adx * bdy;\n    c = splitter * adx;\n    ahi = c - (c - adx);\n    alo = adx - ahi;\n    c = splitter * bdy;\n    bhi = c - (c - bdy);\n    blo = bdy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bdx * ady;\n    c = splitter * bdx;\n    ahi = c - (c - bdx);\n    alo = bdx - ahi;\n    c = splitter * ady;\n    bhi = c - (c - ady);\n    blo = ady - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n\n    finlen = sum(\n        sum(\n            sum(\n                scale(scale(4, bc, adx, _8), _8, adx, _16), _16,\n                scale(scale(4, bc, ady, _8), _8, ady, _16b), _16b, _32), _32,\n            sum(\n                scale(scale(4, ca, bdx, _8), _8, bdx, _16), _16,\n                scale(scale(4, ca, bdy, _8), _8, bdy, _16b), _16b, _32b), _32b, _64), _64,\n        sum(\n            scale(scale(4, ab, cdx, _8), _8, cdx, _16), _16,\n            scale(scale(4, ab, cdy, _8), _8, cdy, _16b), _16b, _32), _32, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = iccerrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - adx;\n    adxtail = ax - (adx + bvirt) + (bvirt - dx);\n    bvirt = ay - ady;\n    adytail = ay - (ady + bvirt) + (bvirt - dy);\n    bvirt = bx - bdx;\n    bdxtail = bx - (bdx + bvirt) + (bvirt - dx);\n    bvirt = by - bdy;\n    bdytail = by - (bdy + bvirt) + (bvirt - dy);\n    bvirt = cx - cdx;\n    cdxtail = cx - (cdx + bvirt) + (bvirt - dx);\n    bvirt = cy - cdy;\n    cdytail = cy - (cdy + bvirt) + (bvirt - dy);\n    if (adxtail === 0 && bdxtail === 0 && cdxtail === 0 && adytail === 0 && bdytail === 0 && cdytail === 0) {\n        return det;\n    }\n\n    errbound = iccerrboundC * permanent + resulterrbound * Math.abs(det);\n    det += ((adx * adx + ady * ady) * ((bdx * cdytail + cdy * bdxtail) - (bdy * cdxtail + cdx * bdytail)) +\n        2 * (adx * adxtail + ady * adytail) * (bdx * cdy - bdy * cdx)) +\n        ((bdx * bdx + bdy * bdy) * ((cdx * adytail + ady * cdxtail) - (cdy * adxtail + adx * cdytail)) +\n        2 * (bdx * bdxtail + bdy * bdytail) * (cdx * ady - cdy * adx)) +\n        ((cdx * cdx + cdy * cdy) * ((adx * bdytail + bdy * adxtail) - (ady * bdxtail + bdx * adytail)) +\n        2 * (cdx * cdxtail + cdy * cdytail) * (adx * bdy - ady * bdx));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n        s1 = adx * adx;\n        c = splitter * adx;\n        ahi = c - (c - adx);\n        alo = adx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = ady * ady;\n        c = splitter * ady;\n        ahi = c - (c - ady);\n        alo = ady - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        aa[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        aa[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        aa[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        aa[3] = u3;\n    }\n    if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n        s1 = bdx * bdx;\n        c = splitter * bdx;\n        ahi = c - (c - bdx);\n        alo = bdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = bdy * bdy;\n        c = splitter * bdy;\n        ahi = c - (c - bdy);\n        alo = bdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        bb[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        bb[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        bb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        bb[3] = u3;\n    }\n    if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n        s1 = cdx * cdx;\n        c = splitter * cdx;\n        ahi = c - (c - cdx);\n        alo = cdx - ahi;\n        s0 = alo * alo - (s1 - ahi * ahi - (ahi + ahi) * alo);\n        t1 = cdy * cdy;\n        c = splitter * cdy;\n        ahi = c - (c - cdy);\n        alo = cdy - ahi;\n        t0 = alo * alo - (t1 - ahi * ahi - (ahi + ahi) * alo);\n        _i = s0 + t0;\n        bvirt = _i - s0;\n        cc[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n        _j = s1 + _i;\n        bvirt = _j - s1;\n        _0 = s1 - (_j - bvirt) + (_i - bvirt);\n        _i = _0 + t1;\n        bvirt = _i - _0;\n        cc[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n        u3 = _j + _i;\n        bvirt = u3 - _j;\n        cc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n        cc[3] = u3;\n    }\n\n    if (adxtail !== 0) {\n        axtbclen = scale(4, bc, adxtail, axtbc);\n        finlen = finadd(finlen, sum_three(\n            scale(axtbclen, axtbc, 2 * adx, _16), _16,\n            scale(scale(4, cc, adxtail, _8), _8, bdy, _16b), _16b,\n            scale(scale(4, bb, adxtail, _8), _8, -cdy, _16c), _16c, _32, _48), _48);\n    }\n    if (adytail !== 0) {\n        aytbclen = scale(4, bc, adytail, aytbc);\n        finlen = finadd(finlen, sum_three(\n            scale(aytbclen, aytbc, 2 * ady, _16), _16,\n            scale(scale(4, bb, adytail, _8), _8, cdx, _16b), _16b,\n            scale(scale(4, cc, adytail, _8), _8, -bdx, _16c), _16c, _32, _48), _48);\n    }\n    if (bdxtail !== 0) {\n        bxtcalen = scale(4, ca, bdxtail, bxtca);\n        finlen = finadd(finlen, sum_three(\n            scale(bxtcalen, bxtca, 2 * bdx, _16), _16,\n            scale(scale(4, aa, bdxtail, _8), _8, cdy, _16b), _16b,\n            scale(scale(4, cc, bdxtail, _8), _8, -ady, _16c), _16c, _32, _48), _48);\n    }\n    if (bdytail !== 0) {\n        bytcalen = scale(4, ca, bdytail, bytca);\n        finlen = finadd(finlen, sum_three(\n            scale(bytcalen, bytca, 2 * bdy, _16), _16,\n            scale(scale(4, cc, bdytail, _8), _8, adx, _16b), _16b,\n            scale(scale(4, aa, bdytail, _8), _8, -cdx, _16c), _16c, _32, _48), _48);\n    }\n    if (cdxtail !== 0) {\n        cxtablen = scale(4, ab, cdxtail, cxtab);\n        finlen = finadd(finlen, sum_three(\n            scale(cxtablen, cxtab, 2 * cdx, _16), _16,\n            scale(scale(4, bb, cdxtail, _8), _8, ady, _16b), _16b,\n            scale(scale(4, aa, cdxtail, _8), _8, -bdy, _16c), _16c, _32, _48), _48);\n    }\n    if (cdytail !== 0) {\n        cytablen = scale(4, ab, cdytail, cytab);\n        finlen = finadd(finlen, sum_three(\n            scale(cytablen, cytab, 2 * cdy, _16), _16,\n            scale(scale(4, aa, cdytail, _8), _8, bdx, _16b), _16b,\n            scale(scale(4, bb, cdytail, _8), _8, -adx, _16c), _16c, _32, _48), _48);\n    }\n\n    if (adxtail !== 0 || adytail !== 0) {\n        if (bdxtail !== 0 || bdytail !== 0 || cdxtail !== 0 || cdytail !== 0) {\n            s1 = bdxtail * cdy;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdy;\n            bhi = c - (c - cdy);\n            blo = cdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * cdytail;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            s1 = cdxtail * -bdy;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * -bdy;\n            bhi = c - (c - -bdy);\n            blo = -bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * -bdytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * -bdytail;\n            bhi = c - (c - -bdytail);\n            blo = -bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            bctlen = sum(4, u, 4, v, bct);\n            s1 = bdxtail * cdytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdxtail * bdytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            bctt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            bctt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            bctt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            bctt[3] = u3;\n            bcttlen = 4;\n        } else {\n            bct[0] = 0;\n            bctlen = 1;\n            bctt[0] = 0;\n            bcttlen = 1;\n        }\n        if (adxtail !== 0) {\n            const len = scale(bctlen, bct, adxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(axtbclen, axtbc, adxtail, _16), _16,\n                scale(len, _16c, 2 * adx, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * adx, _16), _16,\n                scale(len2, _8, adxtail, _16b), _16b,\n                scale(len, _16c, adxtail, _32), _32, _32b, _64), _64);\n\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, adxtail, _8), _8, bdytail, _16), _16);\n            }\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, -adxtail, _8), _8, cdytail, _16), _16);\n            }\n        }\n        if (adytail !== 0) {\n            const len = scale(bctlen, bct, adytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(aytbclen, aytbc, adytail, _16), _16,\n                scale(len, _16c, 2 * ady, _32), _32, _48), _48);\n\n            const len2 = scale(bcttlen, bctt, adytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * ady, _16), _16,\n                scale(len2, _8, adytail, _16b), _16b,\n                scale(len, _16c, adytail, _32), _32, _32b, _64), _64);\n        }\n    }\n    if (bdxtail !== 0 || bdytail !== 0) {\n        if (cdxtail !== 0 || cdytail !== 0 || adxtail !== 0 || adytail !== 0) {\n            s1 = cdxtail * ady;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * ady;\n            bhi = c - (c - ady);\n            blo = ady - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = cdx * adytail;\n            c = splitter * cdx;\n            ahi = c - (c - cdx);\n            alo = cdx - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -cdy;\n            n0 = -cdytail;\n            s1 = adxtail * n1;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * n0;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            catlen = sum(4, u, 4, v, cat);\n            s1 = cdxtail * adytail;\n            c = splitter * cdxtail;\n            ahi = c - (c - cdxtail);\n            alo = cdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adxtail * cdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * cdytail;\n            bhi = c - (c - cdytail);\n            blo = cdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            catt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            catt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            catt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            catt[3] = u3;\n            cattlen = 4;\n        } else {\n            cat[0] = 0;\n            catlen = 1;\n            catt[0] = 0;\n            cattlen = 1;\n        }\n        if (bdxtail !== 0) {\n            const len = scale(catlen, cat, bdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bxtcalen, bxtca, bdxtail, _16), _16,\n                scale(len, _16c, 2 * bdx, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdx, _16), _16,\n                scale(len2, _8, bdxtail, _16b), _16b,\n                scale(len, _16c, bdxtail, _32), _32, _32b, _64), _64);\n\n            if (cdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, bdxtail, _8), _8, cdytail, _16), _16);\n            }\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, cc, -bdxtail, _8), _8, adytail, _16), _16);\n            }\n        }\n        if (bdytail !== 0) {\n            const len = scale(catlen, cat, bdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(bytcalen, bytca, bdytail, _16), _16,\n                scale(len, _16c, 2 * bdy, _32), _32, _48), _48);\n\n            const len2 = scale(cattlen, catt, bdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * bdy, _16), _16,\n                scale(len2, _8, bdytail, _16b), _16b,\n                scale(len, _16c, bdytail, _32), _32,  _32b, _64), _64);\n        }\n    }\n    if (cdxtail !== 0 || cdytail !== 0) {\n        if (adxtail !== 0 || adytail !== 0 || bdxtail !== 0 || bdytail !== 0) {\n            s1 = adxtail * bdy;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdy;\n            bhi = c - (c - bdy);\n            blo = bdy - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = adx * bdytail;\n            c = splitter * adx;\n            ahi = c - (c - adx);\n            alo = adx - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            u[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            u[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            u[3] = u3;\n            n1 = -ady;\n            n0 = -adytail;\n            s1 = bdxtail * n1;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * n1;\n            bhi = c - (c - n1);\n            blo = n1 - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdx * n0;\n            c = splitter * bdx;\n            ahi = c - (c - bdx);\n            alo = bdx - ahi;\n            c = splitter * n0;\n            bhi = c - (c - n0);\n            blo = n0 - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 + t0;\n            bvirt = _i - s0;\n            v[0] = s0 - (_i - bvirt) + (t0 - bvirt);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 + t1;\n            bvirt = _i - _0;\n            v[1] = _0 - (_i - bvirt) + (t1 - bvirt);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            v[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            v[3] = u3;\n            abtlen = sum(4, u, 4, v, abt);\n            s1 = adxtail * bdytail;\n            c = splitter * adxtail;\n            ahi = c - (c - adxtail);\n            alo = adxtail - ahi;\n            c = splitter * bdytail;\n            bhi = c - (c - bdytail);\n            blo = bdytail - bhi;\n            s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n            t1 = bdxtail * adytail;\n            c = splitter * bdxtail;\n            ahi = c - (c - bdxtail);\n            alo = bdxtail - ahi;\n            c = splitter * adytail;\n            bhi = c - (c - adytail);\n            blo = adytail - bhi;\n            t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n            _i = s0 - t0;\n            bvirt = s0 - _i;\n            abtt[0] = s0 - (_i + bvirt) + (bvirt - t0);\n            _j = s1 + _i;\n            bvirt = _j - s1;\n            _0 = s1 - (_j - bvirt) + (_i - bvirt);\n            _i = _0 - t1;\n            bvirt = _0 - _i;\n            abtt[1] = _0 - (_i + bvirt) + (bvirt - t1);\n            u3 = _j + _i;\n            bvirt = u3 - _j;\n            abtt[2] = _j - (u3 - bvirt) + (_i - bvirt);\n            abtt[3] = u3;\n            abttlen = 4;\n        } else {\n            abt[0] = 0;\n            abtlen = 1;\n            abtt[0] = 0;\n            abttlen = 1;\n        }\n        if (cdxtail !== 0) {\n            const len = scale(abtlen, abt, cdxtail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cxtablen, cxtab, cdxtail, _16), _16,\n                scale(len, _16c, 2 * cdx, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdxtail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdx, _16), _16,\n                scale(len2, _8, cdxtail, _16b), _16b,\n                scale(len, _16c, cdxtail, _32), _32, _32b, _64), _64);\n\n            if (adytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, bb, cdxtail, _8), _8, adytail, _16), _16);\n            }\n            if (bdytail !== 0) {\n                finlen = finadd(finlen, scale(scale(4, aa, -cdxtail, _8), _8, bdytail, _16), _16);\n            }\n        }\n        if (cdytail !== 0) {\n            const len = scale(abtlen, abt, cdytail, _16c);\n            finlen = finadd(finlen, sum(\n                scale(cytablen, cytab, cdytail, _16), _16,\n                scale(len, _16c, 2 * cdy, _32), _32, _48), _48);\n\n            const len2 = scale(abttlen, abtt, cdytail, _8);\n            finlen = finadd(finlen, sum_three(\n                scale(len2, _8, 2 * cdy, _16), _16,\n                scale(len2, _8, cdytail, _16b), _16b,\n                scale(len, _16c, cdytail, _32), _32, _32b, _64), _64);\n        }\n    }\n\n    return fin[finlen - 1];\n}\n\nexport function incircle(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const bdx = bx - dx;\n    const cdx = cx - dx;\n    const ady = ay - dy;\n    const bdy = by - dy;\n    const cdy = cy - dy;\n\n    const bdxcdy = bdx * cdy;\n    const cdxbdy = cdx * bdy;\n    const alift = adx * adx + ady * ady;\n\n    const cdxady = cdx * ady;\n    const adxcdy = adx * cdy;\n    const blift = bdx * bdx + bdy * bdy;\n\n    const adxbdy = adx * bdy;\n    const bdxady = bdx * ady;\n    const clift = cdx * cdx + cdy * cdy;\n\n    const det =\n        alift * (bdxcdy - cdxbdy) +\n        blift * (cdxady - adxcdy) +\n        clift * (adxbdy - bdxady);\n\n    const permanent =\n        (Math.abs(bdxcdy) + Math.abs(cdxbdy)) * alift +\n        (Math.abs(cdxady) + Math.abs(adxcdy)) * blift +\n        (Math.abs(adxbdy) + Math.abs(bdxady)) * clift;\n\n    const errbound = iccerrboundA * permanent;\n\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return incircleadapt(ax, ay, bx, by, cx, cy, dx, dy, permanent);\n}\n\nexport function incirclefast(ax, ay, bx, by, cx, cy, dx, dy) {\n    const adx = ax - dx;\n    const ady = ay - dy;\n    const bdx = bx - dx;\n    const bdy = by - dy;\n    const cdx = cx - dx;\n    const cdy = cy - dy;\n\n    const abdet = adx * bdy - bdx * ady;\n    const bcdet = bdx * cdy - cdx * bdy;\n    const cadet = cdx * ady - adx * cdy;\n    const alift = adx * adx + ady * ady;\n    const blift = bdx * bdx + bdy * bdy;\n    const clift = cdx * cdx + cdy * cdy;\n\n    return alift * bcdet + blift * cadet + clift * abdet;\n}\n", "import {epsilon, splitter, resulterrbound, estimate, vec, sum, sum_three, scale, negate} from './util.js';\n\nconst isperrboundA = (16 + 224 * epsilon) * epsilon;\nconst isperrboundB = (5 + 72 * epsilon) * epsilon;\nconst isperrboundC = (71 + 1408 * epsilon) * epsilon * epsilon;\n\nconst ab = vec(4);\nconst bc = vec(4);\nconst cd = vec(4);\nconst de = vec(4);\nconst ea = vec(4);\nconst ac = vec(4);\nconst bd = vec(4);\nconst ce = vec(4);\nconst da = vec(4);\nconst eb = vec(4);\n\nconst abc = vec(24);\nconst bcd = vec(24);\nconst cde = vec(24);\nconst dea = vec(24);\nconst eab = vec(24);\nconst abd = vec(24);\nconst bce = vec(24);\nconst cda = vec(24);\nconst deb = vec(24);\nconst eac = vec(24);\n\nconst adet = vec(1152);\nconst bdet = vec(1152);\nconst cdet = vec(1152);\nconst ddet = vec(1152);\nconst edet = vec(1152);\nconst abdet = vec(2304);\nconst cddet = vec(2304);\nconst cdedet = vec(3456);\nconst deter = vec(5760);\n\nconst _8 = vec(8);\nconst _8b = vec(8);\nconst _8c = vec(8);\nconst _16 = vec(16);\nconst _24 = vec(24);\nconst _48 = vec(48);\nconst _48b = vec(48);\nconst _96 = vec(96);\nconst _192 = vec(192);\nconst _384x = vec(384);\nconst _384y = vec(384);\nconst _384z = vec(384);\nconst _768 = vec(768);\n\nfunction sum_three_scale(a, b, c, az, bz, cz, out) {\n    return sum_three(\n        scale(4, a, az, _8), _8,\n        scale(4, b, bz, _8b), _8b,\n        scale(4, c, cz, _8c), _8c, _16, out);\n}\n\nfunction liftexact(alen, a, blen, b, clen, c, dlen, d, x, y, z, out) {\n    const len = sum(\n        sum(alen, a, blen, b, _48), _48,\n        negate(sum(clen, c, dlen, d, _48b), _48b), _48b, _96);\n\n    return sum_three(\n        scale(scale(len, _96, x, _192), _192, x, _384x), _384x,\n        scale(scale(len, _96, y, _192), _192, y, _384y), _384y,\n        scale(scale(len, _96, z, _192), _192, z, _384z), _384z, _768, out);\n}\n\nfunction insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n    s1 = ax * by;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ay;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ab[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ab[3] = u3;\n    s1 = bx * cy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * by;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bc[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bc[3] = u3;\n    s1 = cx * dy;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * cy;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    cd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    cd[3] = u3;\n    s1 = dx * ey;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * dy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    de[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    de[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    de[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    de[3] = u3;\n    s1 = ex * ay;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * ey;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ea[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ea[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ea[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ea[3] = u3;\n    s1 = ax * cy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cx * ay;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ac[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ac[3] = u3;\n    s1 = bx * dy;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dx * by;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    bd[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    bd[3] = u3;\n    s1 = cx * ey;\n    c = splitter * cx;\n    ahi = c - (c - cx);\n    alo = cx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ex * cy;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * cy;\n    bhi = c - (c - cy);\n    blo = cy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ce[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ce[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    ce[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    ce[3] = u3;\n    s1 = dx * ay;\n    c = splitter * dx;\n    ahi = c - (c - dx);\n    alo = dx - ahi;\n    c = splitter * ay;\n    bhi = c - (c - ay);\n    blo = ay - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = ax * dy;\n    c = splitter * ax;\n    ahi = c - (c - ax);\n    alo = ax - ahi;\n    c = splitter * dy;\n    bhi = c - (c - dy);\n    blo = dy - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    da[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    da[3] = u3;\n    s1 = ex * by;\n    c = splitter * ex;\n    ahi = c - (c - ex);\n    alo = ex - ahi;\n    c = splitter * by;\n    bhi = c - (c - by);\n    blo = by - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bx * ey;\n    c = splitter * bx;\n    ahi = c - (c - bx);\n    alo = bx - ahi;\n    c = splitter * ey;\n    bhi = c - (c - ey);\n    blo = ey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    eb[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    eb[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    u3 = _j + _i;\n    bvirt = u3 - _j;\n    eb[2] = _j - (u3 - bvirt) + (_i - bvirt);\n    eb[3] = u3;\n\n    const abclen = sum_three_scale(ab, bc, ac, cz, az, -bz, abc);\n    const bcdlen = sum_three_scale(bc, cd, bd, dz, bz, -cz, bcd);\n    const cdelen = sum_three_scale(cd, de, ce, ez, cz, -dz, cde);\n    const dealen = sum_three_scale(de, ea, da, az, dz, -ez, dea);\n    const eablen = sum_three_scale(ea, ab, eb, bz, ez, -az, eab);\n    const abdlen = sum_three_scale(ab, bd, da, dz, az, bz, abd);\n    const bcelen = sum_three_scale(bc, ce, eb, ez, bz, cz, bce);\n    const cdalen = sum_three_scale(cd, da, ac, az, cz, dz, cda);\n    const deblen = sum_three_scale(de, eb, bd, bz, dz, ez, deb);\n    const eaclen = sum_three_scale(ea, ac, ce, cz, ez, az, eac);\n\n    const deterlen = sum_three(\n        liftexact(cdelen, cde, bcelen, bce, deblen, deb, bcdlen, bcd, ax, ay, az, adet), adet,\n        liftexact(dealen, dea, cdalen, cda, eaclen, eac, cdelen, cde, bx, by, bz, bdet), bdet,\n        sum_three(\n            liftexact(eablen, eab, deblen, deb, abdlen, abd, dealen, dea, cx, cy, cz, cdet), cdet,\n            liftexact(abclen, abc, eaclen, eac, bcelen, bce, eablen, eab, dx, dy, dz, ddet), ddet,\n            liftexact(bcdlen, bcd, abdlen, abd, cdalen, cda, abclen, abc, ex, ey, ez, edet), edet, cddet, cdedet), cdedet, abdet, deter);\n\n    return deter[deterlen - 1];\n}\n\nconst xdet = vec(96);\nconst ydet = vec(96);\nconst zdet = vec(96);\nconst fin = vec(1152);\n\nfunction liftadapt(a, b, c, az, bz, cz, x, y, z, out) {\n    const len = sum_three_scale(a, b, c, az, bz, cz, _24);\n    return sum_three(\n        scale(scale(len, _24, x, _48), _48, x, xdet), xdet,\n        scale(scale(len, _24, y, _48), _48, y, ydet), ydet,\n        scale(scale(len, _24, z, _48), _48, z, zdet), zdet, _192, out);\n}\n\nfunction insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent) {\n    let ab3, bc3, cd3, da3, ac3, bd3;\n\n    let aextail, bextail, cextail, dextail;\n    let aeytail, beytail, ceytail, deytail;\n    let aeztail, beztail, ceztail, deztail;\n\n    let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0;\n\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    s1 = aex * bey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = bex * aey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ab[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ab[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ab3 = _j + _i;\n    bvirt = ab3 - _j;\n    ab[2] = _j - (ab3 - bvirt) + (_i - bvirt);\n    ab[3] = ab3;\n    s1 = bex * cey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * bey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bc[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bc[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bc3 = _j + _i;\n    bvirt = bc3 - _j;\n    bc[2] = _j - (bc3 - bvirt) + (_i - bvirt);\n    bc[3] = bc3;\n    s1 = cex * dey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * cey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    cd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    cd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    cd3 = _j + _i;\n    bvirt = cd3 - _j;\n    cd[2] = _j - (cd3 - bvirt) + (_i - bvirt);\n    cd[3] = cd3;\n    s1 = dex * aey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = aex * dey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    da[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    da[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    da3 = _j + _i;\n    bvirt = da3 - _j;\n    da[2] = _j - (da3 - bvirt) + (_i - bvirt);\n    da[3] = da3;\n    s1 = aex * cey;\n    c = splitter * aex;\n    ahi = c - (c - aex);\n    alo = aex - ahi;\n    c = splitter * cey;\n    bhi = c - (c - cey);\n    blo = cey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = cex * aey;\n    c = splitter * cex;\n    ahi = c - (c - cex);\n    alo = cex - ahi;\n    c = splitter * aey;\n    bhi = c - (c - aey);\n    blo = aey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    ac[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    ac[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    ac3 = _j + _i;\n    bvirt = ac3 - _j;\n    ac[2] = _j - (ac3 - bvirt) + (_i - bvirt);\n    ac[3] = ac3;\n    s1 = bex * dey;\n    c = splitter * bex;\n    ahi = c - (c - bex);\n    alo = bex - ahi;\n    c = splitter * dey;\n    bhi = c - (c - dey);\n    blo = dey - bhi;\n    s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n    t1 = dex * bey;\n    c = splitter * dex;\n    ahi = c - (c - dex);\n    alo = dex - ahi;\n    c = splitter * bey;\n    bhi = c - (c - bey);\n    blo = bey - bhi;\n    t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n    _i = s0 - t0;\n    bvirt = s0 - _i;\n    bd[0] = s0 - (_i + bvirt) + (bvirt - t0);\n    _j = s1 + _i;\n    bvirt = _j - s1;\n    _0 = s1 - (_j - bvirt) + (_i - bvirt);\n    _i = _0 - t1;\n    bvirt = _0 - _i;\n    bd[1] = _0 - (_i + bvirt) + (bvirt - t1);\n    bd3 = _j + _i;\n    bvirt = bd3 - _j;\n    bd[2] = _j - (bd3 - bvirt) + (_i - bvirt);\n    bd[3] = bd3;\n\n    const finlen = sum(\n        sum(\n            negate(liftadapt(bc, cd, bd, dez, bez, -cez, aex, aey, aez, adet), adet), adet,\n            liftadapt(cd, da, ac, aez, cez, dez, bex, bey, bez, bdet), bdet, abdet), abdet,\n        sum(\n            negate(liftadapt(da, ab, bd, bez, dez, aez, cex, cey, cez, cdet), cdet), cdet,\n            liftadapt(ab, bc, ac, cez, aez, -bez, dex, dey, dez, ddet), ddet, cddet), cddet, fin);\n\n    let det = estimate(finlen, fin);\n    let errbound = isperrboundB * permanent;\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    bvirt = ax - aex;\n    aextail = ax - (aex + bvirt) + (bvirt - ex);\n    bvirt = ay - aey;\n    aeytail = ay - (aey + bvirt) + (bvirt - ey);\n    bvirt = az - aez;\n    aeztail = az - (aez + bvirt) + (bvirt - ez);\n    bvirt = bx - bex;\n    bextail = bx - (bex + bvirt) + (bvirt - ex);\n    bvirt = by - bey;\n    beytail = by - (bey + bvirt) + (bvirt - ey);\n    bvirt = bz - bez;\n    beztail = bz - (bez + bvirt) + (bvirt - ez);\n    bvirt = cx - cex;\n    cextail = cx - (cex + bvirt) + (bvirt - ex);\n    bvirt = cy - cey;\n    ceytail = cy - (cey + bvirt) + (bvirt - ey);\n    bvirt = cz - cez;\n    ceztail = cz - (cez + bvirt) + (bvirt - ez);\n    bvirt = dx - dex;\n    dextail = dx - (dex + bvirt) + (bvirt - ex);\n    bvirt = dy - dey;\n    deytail = dy - (dey + bvirt) + (bvirt - ey);\n    bvirt = dz - dez;\n    deztail = dz - (dez + bvirt) + (bvirt - ez);\n    if (aextail === 0 && aeytail === 0 && aeztail === 0 &&\n        bextail === 0 && beytail === 0 && beztail === 0 &&\n        cextail === 0 && ceytail === 0 && ceztail === 0 &&\n        dextail === 0 && deytail === 0 && deztail === 0) {\n        return det;\n    }\n\n    errbound = isperrboundC * permanent + resulterrbound * Math.abs(det);\n\n    const abeps = (aex * beytail + bey * aextail) - (aey * bextail + bex * aeytail);\n    const bceps = (bex * ceytail + cey * bextail) - (bey * cextail + cex * beytail);\n    const cdeps = (cex * deytail + dey * cextail) - (cey * dextail + dex * ceytail);\n    const daeps = (dex * aeytail + aey * dextail) - (dey * aextail + aex * deytail);\n    const aceps = (aex * ceytail + cey * aextail) - (aey * cextail + cex * aeytail);\n    const bdeps = (bex * deytail + dey * bextail) - (bey * dextail + dex * beytail);\n    det +=\n        (((bex * bex + bey * bey + bez * bez) * ((cez * daeps + dez * aceps + aez * cdeps) +\n        (ceztail * da3 + deztail * ac3 + aeztail * cd3)) + (dex * dex + dey * dey + dez * dez) *\n        ((aez * bceps - bez * aceps + cez * abeps) + (aeztail * bc3 - beztail * ac3 + ceztail * ab3))) -\n        ((aex * aex + aey * aey + aez * aez) * ((bez * cdeps - cez * bdeps + dez * bceps) +\n        (beztail * cd3 - ceztail * bd3 + deztail * bc3)) + (cex * cex + cey * cey + cez * cez) *\n        ((dez * abeps + aez * bdeps + bez * daeps) + (deztail * ab3 + aeztail * bd3 + beztail * da3)))) +\n        2 * (((bex * bextail + bey * beytail + bez * beztail) * (cez * da3 + dez * ac3 + aez * cd3) +\n        (dex * dextail + dey * deytail + dez * deztail) * (aez * bc3 - bez * ac3 + cez * ab3)) -\n        ((aex * aextail + aey * aeytail + aez * aeztail) * (bez * cd3 - cez * bd3 + dez * bc3) +\n        (cex * cextail + cey * ceytail + cez * ceztail) * (dez * ab3 + aez * bd3 + bez * da3)));\n\n    if (det >= errbound || -det >= errbound) {\n        return det;\n    }\n\n    return insphereexact(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez);\n}\n\nexport function insphere(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const aexbey = aex * bey;\n    const bexaey = bex * aey;\n    const ab = aexbey - bexaey;\n    const bexcey = bex * cey;\n    const cexbey = cex * bey;\n    const bc = bexcey - cexbey;\n    const cexdey = cex * dey;\n    const dexcey = dex * cey;\n    const cd = cexdey - dexcey;\n    const dexaey = dex * aey;\n    const aexdey = aex * dey;\n    const da = dexaey - aexdey;\n    const aexcey = aex * cey;\n    const cexaey = cex * aey;\n    const ac = aexcey - cexaey;\n    const bexdey = bex * dey;\n    const dexbey = dex * bey;\n    const bd = bexdey - dexbey;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    const det =\n        (clift * (dez * ab + aez * bd + bez * da) - dlift * (aez * bc - bez * ac + cez * ab)) +\n        (alift * (bez * cd - cez * bd + dez * bc) - blift * (cez * da + dez * ac + aez * cd));\n\n    const aezplus = Math.abs(aez);\n    const bezplus = Math.abs(bez);\n    const cezplus = Math.abs(cez);\n    const dezplus = Math.abs(dez);\n    const aexbeyplus = Math.abs(aexbey) + Math.abs(bexaey);\n    const bexceyplus = Math.abs(bexcey) + Math.abs(cexbey);\n    const cexdeyplus = Math.abs(cexdey) + Math.abs(dexcey);\n    const dexaeyplus = Math.abs(dexaey) + Math.abs(aexdey);\n    const aexceyplus = Math.abs(aexcey) + Math.abs(cexaey);\n    const bexdeyplus = Math.abs(bexdey) + Math.abs(dexbey);\n    const permanent =\n        (cexdeyplus * bezplus + bexdeyplus * cezplus + bexceyplus * dezplus) * alift +\n        (dexaeyplus * cezplus + aexceyplus * dezplus + cexdeyplus * aezplus) * blift +\n        (aexbeyplus * dezplus + bexdeyplus * aezplus + dexaeyplus * bezplus) * clift +\n        (bexceyplus * aezplus + aexceyplus * bezplus + aexbeyplus * cezplus) * dlift;\n\n    const errbound = isperrboundA * permanent;\n    if (det > errbound || -det > errbound) {\n        return det;\n    }\n    return -insphereadapt(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez, permanent);\n}\n\nexport function inspherefast(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, ex, ey, ez) {\n    const aex = ax - ex;\n    const bex = bx - ex;\n    const cex = cx - ex;\n    const dex = dx - ex;\n    const aey = ay - ey;\n    const bey = by - ey;\n    const cey = cy - ey;\n    const dey = dy - ey;\n    const aez = az - ez;\n    const bez = bz - ez;\n    const cez = cz - ez;\n    const dez = dz - ez;\n\n    const ab = aex * bey - bex * aey;\n    const bc = bex * cey - cex * bey;\n    const cd = cex * dey - dex * cey;\n    const da = dex * aey - aex * dey;\n    const ac = aex * cey - cex * aey;\n    const bd = bex * dey - dex * bey;\n\n    const abc = aez * bc - bez * ac + cez * ab;\n    const bcd = bez * cd - cez * bd + dez * bc;\n    const cda = cez * da + dez * ac + aez * cd;\n    const dab = dez * ab + aez * bd + bez * da;\n\n    const alift = aex * aex + aey * aey + aez * aez;\n    const blift = bex * bex + bey * bey + bez * bez;\n    const clift = cex * cex + cey * cey + cez * cez;\n    const dlift = dex * dex + dey * dey + dez * dez;\n\n    return (clift * dab - dlift * abc) + (alift * bcd - blift * cda);\n}\n", "\nexport {orient2d, orient2dfast} from './esm/orient2d.js';\nexport {orient3d, orient3dfast} from './esm/orient3d.js';\nexport {incircle, incirclefast} from './esm/incircle.js';\nexport {insphere, inspherefast} from './esm/insphere.js';\n", "\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nimport {orient2d} from 'robust-predicates';\n\n/** @template {ArrayLike<number>} T */\nexport default class Delaunator {\n\n    /**\n     * Constructs a delaunay triangulation object given an array of points (`[x, y]` by default).\n     * `getX` and `getY` are optional functions of the form `(point) => value` for custom point formats.\n     *\n     * @template P\n     * @param {P[]} points\n     * @param {(p: P) => number} [getX]\n     * @param {(p: P) => number} [getY]\n     */\n    // @ts-expect-error TS2322\n    static from(points, getX = defaultGetX, getY = defaultGetY) {\n        const n = points.length;\n        const coords = new Float64Array(n * 2);\n\n        for (let i = 0; i < n; i++) {\n            const p = points[i];\n            coords[2 * i] = getX(p);\n            coords[2 * i + 1] = getY(p);\n        }\n\n        return new Delaunator(coords);\n    }\n\n    /**\n     * Constructs a delaunay triangulation object given an array of point coordinates of the form:\n     * `[x0, y0, x1, y1, ...]` (use a typed array for best performance). Duplicate points are skipped.\n     *\n     * @param {T} coords\n     */\n    constructor(coords) {\n        const n = coords.length >> 1;\n        if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n        this.coords = coords;\n\n        // arrays that will store the triangulation graph\n        const maxTriangles = Math.max(2 * n - 5, 0);\n        /** @private */ this._triangles = new Uint32Array(maxTriangles * 3);\n        /** @private */ this._halfedges = new Int32Array(maxTriangles * 3);\n\n        // temporary arrays for tracking the edges of the advancing convex hull\n        /** @private */ this._hashSize = Math.ceil(Math.sqrt(n));\n        /** @private */ this._hullPrev = new Uint32Array(n); // edge to prev edge\n        /** @private */ this._hullNext = new Uint32Array(n); // edge to next edge\n        /** @private */ this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n        /** @private */ this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n        // temporary arrays for sorting points\n        /** @private */ this._ids = new Uint32Array(n);\n        /** @private */ this._dists = new Float64Array(n);\n\n        /** @private */ this.trianglesLen = 0;\n        /** @private */ this._cx = 0;\n        /** @private */ this._cy = 0;\n        /** @private */ this._hullStart = 0;\n\n\n        /** A `Uint32Array` array of indices that reference points on the convex hull of the input data, counter-clockwise. */\n        this.hull = this._triangles;\n        /** A `Uint32Array` array of triangle vertex indices (each group of three numbers forms a triangle). All triangles are directed counterclockwise. */\n        this.triangles = this._triangles;\n        /**\n         * A `Int32Array` array of triangle half-edge indices that allows you to traverse the triangulation.\n         * `i`-th half-edge in the array corresponds to vertex `triangles[i]` the half-edge is coming from.\n         * `halfedges[i]` is the index of a twin half-edge in an adjacent triangle (or `-1` for outer half-edges on the convex hull).\n         */\n        this.halfedges = this._halfedges;\n\n        this.update();\n    }\n\n    /**\n     * Updates the triangulation if you modified `delaunay.coords` values in place, avoiding expensive memory allocations.\n     * Useful for iterative relaxation algorithms such as Lloyd's.\n     */\n    update() {\n        const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} =  this;\n        const n = coords.length >> 1;\n\n        // populate an array of point indices; calculate input data bbox\n        let minX = Infinity;\n        let minY = Infinity;\n        let maxX = -Infinity;\n        let maxY = -Infinity;\n\n        for (let i = 0; i < n; i++) {\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n            this._ids[i] = i;\n        }\n        const cx = (minX + maxX) / 2;\n        const cy = (minY + maxY) / 2;\n\n        let i0 = 0, i1 = 0, i2 = 0;\n\n        // pick a seed point close to the center\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist) {\n                i0 = i;\n                minDist = d;\n            }\n        }\n        const i0x = coords[2 * i0];\n        const i0y = coords[2 * i0 + 1];\n\n        // find the point closest to the seed\n        for (let i = 0, minDist = Infinity; i < n; i++) {\n            if (i === i0) continue;\n            const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n            if (d < minDist && d > 0) {\n                i1 = i;\n                minDist = d;\n            }\n        }\n        let i1x = coords[2 * i1];\n        let i1y = coords[2 * i1 + 1];\n\n        let minRadius = Infinity;\n\n        // find the third point which forms the smallest circumcircle with the first two\n        for (let i = 0; i < n; i++) {\n            if (i === i0 || i === i1) continue;\n            const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n            if (r < minRadius) {\n                i2 = i;\n                minRadius = r;\n            }\n        }\n        let i2x = coords[2 * i2];\n        let i2y = coords[2 * i2 + 1];\n\n        if (minRadius === Infinity) {\n            // order collinear points by dx (or dy if all x are identical)\n            // and return the list as a hull\n            for (let i = 0; i < n; i++) {\n                this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n            }\n            quicksort(this._ids, this._dists, 0, n - 1);\n            const hull = new Uint32Array(n);\n            let j = 0;\n            for (let i = 0, d0 = -Infinity; i < n; i++) {\n                const id = this._ids[i];\n                const d = this._dists[id];\n                if (d > d0) {\n                    hull[j++] = id;\n                    d0 = d;\n                }\n            }\n            this.hull = hull.subarray(0, j);\n            this.triangles = new Uint32Array(0);\n            this.halfedges = new Int32Array(0);\n            return;\n        }\n\n        // swap the order of the seed points for counter-clockwise orientation\n        if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n            const i = i1;\n            const x = i1x;\n            const y = i1y;\n            i1 = i2;\n            i1x = i2x;\n            i1y = i2y;\n            i2 = i;\n            i2x = x;\n            i2y = y;\n        }\n\n        const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n        this._cx = center.x;\n        this._cy = center.y;\n\n        for (let i = 0; i < n; i++) {\n            this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n        }\n\n        // sort the points by distance from the seed triangle circumcenter\n        quicksort(this._ids, this._dists, 0, n - 1);\n\n        // set up the seed triangle as the starting hull\n        this._hullStart = i0;\n        let hullSize = 3;\n\n        hullNext[i0] = hullPrev[i2] = i1;\n        hullNext[i1] = hullPrev[i0] = i2;\n        hullNext[i2] = hullPrev[i1] = i0;\n\n        hullTri[i0] = 0;\n        hullTri[i1] = 1;\n        hullTri[i2] = 2;\n\n        hullHash.fill(-1);\n        hullHash[this._hashKey(i0x, i0y)] = i0;\n        hullHash[this._hashKey(i1x, i1y)] = i1;\n        hullHash[this._hashKey(i2x, i2y)] = i2;\n\n        this.trianglesLen = 0;\n        this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n        for (let k = 0, xp = 0, yp = 0; k < this._ids.length; k++) {\n            const i = this._ids[k];\n            const x = coords[2 * i];\n            const y = coords[2 * i + 1];\n\n            // skip near-duplicate points\n            if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n            xp = x;\n            yp = y;\n\n            // skip seed triangle points\n            if (i === i0 || i === i1 || i === i2) continue;\n\n            // find a visible edge on the convex hull using edge hash\n            let start = 0;\n            for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n                start = hullHash[(key + j) % this._hashSize];\n                if (start !== -1 && start !== hullNext[start]) break;\n            }\n\n            start = hullPrev[start];\n            let e = start, q;\n            while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n                e = q;\n                if (e === start) {\n                    e = -1;\n                    break;\n                }\n            }\n            if (e === -1) continue; // likely a near-duplicate point; skip it\n\n            // add the first triangle from the point\n            let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n            // recursively flip triangles from the point until they satisfy the Delaunay condition\n            hullTri[i] = this._legalize(t + 2);\n            hullTri[e] = t; // keep track of boundary triangles on the hull\n            hullSize++;\n\n            // walk forward through the hull, adding more triangles and flipping recursively\n            let n = hullNext[e];\n            while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n                t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n                hullTri[i] = this._legalize(t + 2);\n                hullNext[n] = n; // mark as removed\n                hullSize--;\n                n = q;\n            }\n\n            // walk backward from the other side, adding more triangles and flipping\n            if (e === start) {\n                while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n                    t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n                    this._legalize(t + 2);\n                    hullTri[q] = t;\n                    hullNext[e] = e; // mark as removed\n                    hullSize--;\n                    e = q;\n                }\n            }\n\n            // update the hull indices\n            this._hullStart = hullPrev[i] = e;\n            hullNext[e] = hullPrev[n] = i;\n            hullNext[i] = n;\n\n            // save the two new edges in the hash table\n            hullHash[this._hashKey(x, y)] = i;\n            hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n        }\n\n        this.hull = new Uint32Array(hullSize);\n        for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n            this.hull[i] = e;\n            e = hullNext[e];\n        }\n\n        // trim typed triangle mesh arrays\n        this.triangles = this._triangles.subarray(0, this.trianglesLen);\n        this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n    }\n\n    /**\n     * Calculate an angle-based key for the edge hash used for advancing convex hull.\n     *\n     * @param {number} x\n     * @param {number} y\n     * @private\n     */\n    _hashKey(x, y) {\n        return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n    }\n\n    /**\n     * Flip an edge in a pair of triangles if it doesn't satisfy the Delaunay condition.\n     *\n     * @param {number} a\n     * @private\n     */\n    _legalize(a) {\n        const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n        let i = 0;\n        let ar = 0;\n\n        // recursion eliminated with a fixed-size stack\n        while (true) {\n            const b = halfedges[a];\n\n            /* if the pair of triangles doesn't satisfy the Delaunay condition\n             * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n             * then do the same check/flip recursively for the new pair of triangles\n             *\n             *           pl                    pl\n             *          /||\\                  /  \\\n             *       al/ || \\bl            al/    \\a\n             *        /  ||  \\              /      \\\n             *       /  a||b  \\    flip    /___ar___\\\n             *     p0\\   ||   /p1   =>   p0\\---bl---/p1\n             *        \\  ||  /              \\      /\n             *       ar\\ || /br             b\\    /br\n             *          \\||/                  \\  /\n             *           pr                    pr\n             */\n            const a0 = a - a % 3;\n            ar = a0 + (a + 2) % 3;\n\n            if (b === -1) { // convex hull edge\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n                continue;\n            }\n\n            const b0 = b - b % 3;\n            const al = a0 + (a + 1) % 3;\n            const bl = b0 + (b + 2) % 3;\n\n            const p0 = triangles[ar];\n            const pr = triangles[a];\n            const pl = triangles[al];\n            const p1 = triangles[bl];\n\n            const illegal = inCircle(\n                coords[2 * p0], coords[2 * p0 + 1],\n                coords[2 * pr], coords[2 * pr + 1],\n                coords[2 * pl], coords[2 * pl + 1],\n                coords[2 * p1], coords[2 * p1 + 1]);\n\n            if (illegal) {\n                triangles[a] = p1;\n                triangles[b] = p0;\n\n                const hbl = halfedges[bl];\n\n                // edge swapped on the other side of the hull (rare); fix the half-edge reference\n                if (hbl === -1) {\n                    let e = this._hullStart;\n                    do {\n                        if (this._hullTri[e] === bl) {\n                            this._hullTri[e] = a;\n                            break;\n                        }\n                        e = this._hullPrev[e];\n                    } while (e !== this._hullStart);\n                }\n                this._link(a, hbl);\n                this._link(b, halfedges[ar]);\n                this._link(ar, bl);\n\n                const br = b0 + (b + 1) % 3;\n\n                // don't worry about hitting the cap: it can only happen on extremely degenerate input\n                if (i < EDGE_STACK.length) {\n                    EDGE_STACK[i++] = br;\n                }\n            } else {\n                if (i === 0) break;\n                a = EDGE_STACK[--i];\n            }\n        }\n\n        return ar;\n    }\n\n    /**\n     * Link two half-edges to each other.\n     * @param {number} a\n     * @param {number} b\n     * @private\n     */\n    _link(a, b) {\n        this._halfedges[a] = b;\n        if (b !== -1) this._halfedges[b] = a;\n    }\n\n    /**\n     * Add a new triangle given vertex indices and adjacent half-edge ids.\n     *\n     * @param {number} i0\n     * @param {number} i1\n     * @param {number} i2\n     * @param {number} a\n     * @param {number} b\n     * @param {number} c\n     * @private\n     */\n    _addTriangle(i0, i1, i2, a, b, c) {\n        const t = this.trianglesLen;\n\n        this._triangles[t] = i0;\n        this._triangles[t + 1] = i1;\n        this._triangles[t + 2] = i2;\n\n        this._link(t, a);\n        this._link(t + 1, b);\n        this._link(t + 2, c);\n\n        this.trianglesLen += 3;\n\n        return t;\n    }\n}\n\n/**\n * Monotonically increases with real angle, but doesn't need expensive trigonometry.\n *\n * @param {number} dx\n * @param {number} dy\n */\nfunction pseudoAngle(dx, dy) {\n    const p = dx / (Math.abs(dx) + Math.abs(dy));\n    return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\n/**\n * Squared distance between two points.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n */\nfunction dist(ax, ay, bx, by) {\n    const dx = ax - bx;\n    const dy = ay - by;\n    return dx * dx + dy * dy;\n}\n\n/**\n * Check whether point P is inside a circle formed by points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n * @param {number} px\n * @param {number} py\n */\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n    const dx = ax - px;\n    const dy = ay - py;\n    const ex = bx - px;\n    const ey = by - py;\n    const fx = cx - px;\n    const fy = cy - py;\n\n    const ap = dx * dx + dy * dy;\n    const bp = ex * ex + ey * ey;\n    const cp = fx * fx + fy * fy;\n\n    return dx * (ey * cp - bp * fy) -\n           dy * (ex * cp - bp * fx) +\n           ap * (ex * fy - ey * fx) < 0;\n}\n\n/**\n * Squared radius of the circle formed by points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n */\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = (ey * bl - dy * cl) * d;\n    const y = (dx * cl - ex * bl) * d;\n\n    return x * x + y * y;\n}\n\n/**\n * Get coordinates of a circumcenter for points A, B, C.\n *\n * @param {number} ax\n * @param {number} ay\n * @param {number} bx\n * @param {number} by\n * @param {number} cx\n * @param {number} cy\n */\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const ex = cx - ax;\n    const ey = cy - ay;\n\n    const bl = dx * dx + dy * dy;\n    const cl = ex * ex + ey * ey;\n    const d = 0.5 / (dx * ey - dy * ex);\n\n    const x = ax + (ey * bl - dy * cl) * d;\n    const y = ay + (dx * cl - ex * bl) * d;\n\n    return {x, y};\n}\n\n/**\n * Sort points by distance via an array of point indices and an array of calculated distances.\n *\n * @param {Uint32Array} ids\n * @param {Float64Array} dists\n * @param {number} left\n * @param {number} right\n */\nfunction quicksort(ids, dists, left, right) {\n    if (right - left <= 20) {\n        for (let i = left + 1; i <= right; i++) {\n            const temp = ids[i];\n            const tempDist = dists[temp];\n            let j = i - 1;\n            while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n            ids[j + 1] = temp;\n        }\n    } else {\n        const median = (left + right) >> 1;\n        let i = left + 1;\n        let j = right;\n        swap(ids, median, i);\n        if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n        if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n        if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n        const temp = ids[i];\n        const tempDist = dists[temp];\n        while (true) {\n            do i++; while (dists[ids[i]] < tempDist);\n            do j--; while (dists[ids[j]] > tempDist);\n            if (j < i) break;\n            swap(ids, i, j);\n        }\n        ids[left + 1] = ids[j];\n        ids[j] = temp;\n\n        if (right - i + 1 >= j - left) {\n            quicksort(ids, dists, i, right);\n            quicksort(ids, dists, left, j - 1);\n        } else {\n            quicksort(ids, dists, left, j - 1);\n            quicksort(ids, dists, i, right);\n        }\n    }\n}\n\n/**\n * @param {Uint32Array} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/** @param {[number, number]} p */\nfunction defaultGetX(p) {\n    return p[0];\n}\n/** @param {[number, number]} p */\nfunction defaultGetY(p) {\n    return p[1];\n}\n", "const epsilon = 1e-6;\n\nexport default class Path {\n  constructor() {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n  }\n  moveTo(x, y) {\n    this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  }\n  lineTo(x, y) {\n    this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arc(x, y, r) {\n    x = +x, y = +y, r = +r;\n    const x0 = x + r;\n    const y0 = y;\n    if (r < 0) throw new Error(\"negative radius\");\n    if (this._x1 === null) this._ += `M${x0},${y0}`;\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n    if (!r) return;\n    this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n  }\n  rect(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  value() {\n    return this._ || null;\n  }\n}\n", "export default class Polygon {\n  constructor() {\n    this._ = [];\n  }\n  moveTo(x, y) {\n    this._.push([x, y]);\n  }\n  closePath() {\n    this._.push(this._[0].slice());\n  }\n  lineTo(x, y) {\n    this._.push([x, y]);\n  }\n  value() {\n    return this._.length ? this._ : null;\n  }\n}\n", "import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n  constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n    if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n    this.delaunay = delaunay;\n    this._circumcenters = new Float64Array(delaunay.points.length * 2);\n    this.vectors = new Float64Array(delaunay.points.length * 2);\n    this.xmax = xmax, this.xmin = xmin;\n    this.ymax = ymax, this.ymin = ymin;\n    this._init();\n  }\n  update() {\n    this.delaunay.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const {delaunay: {points, hull, triangles}, vectors} = this;\n    let bx, by; // lazily computed barycenter of the hull\n\n    // Compute circumcenters.\n    const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n    for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n      const t1 = triangles[i] * 2;\n      const t2 = triangles[i + 1] * 2;\n      const t3 = triangles[i + 2] * 2;\n      const x1 = points[t1];\n      const y1 = points[t1 + 1];\n      const x2 = points[t2];\n      const y2 = points[t2 + 1];\n      const x3 = points[t3];\n      const y3 = points[t3 + 1];\n\n      const dx = x2 - x1;\n      const dy = y2 - y1;\n      const ex = x3 - x1;\n      const ey = y3 - y1;\n      const ab = (dx * ey - dy * ex) * 2;\n\n      if (Math.abs(ab) < 1e-9) {\n        // For a degenerate triangle, the circumcenter is at the infinity, in a\n        // direction orthogonal to the halfedge and away from the \u201Ccenter\u201D of\n        // the diagram <bx, by>, defined as the hull\u2019s barycenter.\n        if (bx === undefined) {\n          bx = by = 0;\n          for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n          bx /= hull.length, by /= hull.length;\n        }\n        const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n        x = (x1 + x3) / 2 - a * ey;\n        y = (y1 + y3) / 2 + a * ex;\n      } else {\n        const d = 1 / ab;\n        const bl = dx * dx + dy * dy;\n        const cl = ex * ex + ey * ey;\n        x = x1 + (ey * bl - dy * cl) * d;\n        y = y1 + (dx * cl - ex * bl) * d;\n      }\n      circumcenters[j] = x;\n      circumcenters[j + 1] = y;\n    }\n\n    // Compute exterior cell rays.\n    let h = hull[hull.length - 1];\n    let p0, p1 = h * 4;\n    let x0, x1 = points[2 * h];\n    let y0, y1 = points[2 * h + 1];\n    vectors.fill(0);\n    for (let i = 0; i < hull.length; ++i) {\n      h = hull[i];\n      p0 = p1, x0 = x1, y0 = y1;\n      p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n      vectors[p0 + 2] = vectors[p1] = y0 - y1;\n      vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n    }\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n    if (hull.length <= 1) return null;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = Math.floor(i / 3) * 2;\n      const tj = Math.floor(j / 3) * 2;\n      const xi = circumcenters[ti];\n      const yi = circumcenters[ti + 1];\n      const xj = circumcenters[tj];\n      const yj = circumcenters[tj + 1];\n      this._renderSegment(xi, yi, xj, yj, context);\n    }\n    let h0, h1 = hull[hull.length - 1];\n    for (let i = 0; i < hull.length; ++i) {\n      h0 = h1, h1 = hull[i];\n      const t = Math.floor(inedges[h1] / 3) * 2;\n      const x = circumcenters[t];\n      const y = circumcenters[t + 1];\n      const v = h0 * 4;\n      const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n      if (p) this._renderSegment(x, y, p[0], p[1], context);\n    }\n    return buffer && buffer.value();\n  }\n  renderBounds(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n    return buffer && buffer.value();\n  }\n  renderCell(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const points = this._clip(i);\n    if (points === null || !points.length) return;\n    context.moveTo(points[0], points[1]);\n    let n = points.length;\n    while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n    for (let i = 2; i < n; i += 2) {\n      if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n        context.lineTo(points[i], points[i + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *cellPolygons() {\n    const {delaunay: {points}} = this;\n    for (let i = 0, n = points.length / 2; i < n; ++i) {\n      const cell = this.cellPolygon(i);\n      if (cell) cell.index = i, yield cell;\n    }\n  }\n  cellPolygon(i) {\n    const polygon = new Polygon;\n    this.renderCell(i, polygon);\n    return polygon.value();\n  }\n  _renderSegment(x0, y0, x1, y1, context) {\n    let S;\n    const c0 = this._regioncode(x0, y0);\n    const c1 = this._regioncode(x1, y1);\n    if (c0 === 0 && c1 === 0) {\n      context.moveTo(x0, y0);\n      context.lineTo(x1, y1);\n    } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n      context.moveTo(S[0], S[1]);\n      context.lineTo(S[2], S[3]);\n    }\n  }\n  contains(i, x, y) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n    return this.delaunay._step(i, x, y) === i;\n  }\n  *neighbors(i) {\n    const ci = this._clip(i);\n    if (ci) for (const j of this.delaunay.neighbors(i)) {\n      const cj = this._clip(j);\n      // find the common edge\n      if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n        for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n          if (ci[ai] === cj[aj]\n              && ci[ai + 1] === cj[aj + 1]\n              && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n              && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n            yield j;\n            break loop;\n          }\n        }\n      }\n    }\n  }\n  _cell(i) {\n    const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n    const e0 = inedges[i];\n    if (e0 === -1) return null; // coincident point\n    const points = [];\n    let e = e0;\n    do {\n      const t = Math.floor(e / 3);\n      points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n    } while (e !== e0 && e !== -1);\n    return points;\n  }\n  _clip(i) {\n    // degenerate case (1 valid point: return the box)\n    if (i === 0 && this.delaunay.hull.length === 1) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    const points = this._cell(i);\n    if (points === null) return null;\n    const {vectors: V} = this;\n    const v = i * 4;\n    return this._simplify(V[v] || V[v + 1]\n        ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n        : this._clipFinite(i, points));\n  }\n  _clipFinite(i, points) {\n    const n = points.length;\n    let P = null;\n    let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n    let c0, c1 = this._regioncode(x1, y1);\n    let e0, e1 = 0;\n    for (let j = 0; j < n; j += 2) {\n      x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n      c0 = c1, c1 = this._regioncode(x1, y1);\n      if (c0 === 0 && c1 === 0) {\n        e0 = e1, e1 = 0;\n        if (P) P.push(x1, y1);\n        else P = [x1, y1];\n      } else {\n        let S, sx0, sy0, sx1, sy1;\n        if (c0 === 0) {\n          if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n          [sx0, sy0, sx1, sy1] = S;\n        } else {\n          if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n          [sx1, sy1, sx0, sy0] = S;\n          e0 = e1, e1 = this._edgecode(sx0, sy0);\n          if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n          if (P) P.push(sx0, sy0);\n          else P = [sx0, sy0];\n        }\n        e0 = e1, e1 = this._edgecode(sx1, sy1);\n        if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n        if (P) P.push(sx1, sy1);\n        else P = [sx1, sy1];\n      }\n    }\n    if (P) {\n      e0 = e1, e1 = this._edgecode(P[0], P[1]);\n      if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n    }\n    return P;\n  }\n  _clipSegment(x0, y0, x1, y1, c0, c1) {\n    // for more robustness, always consider the segment in the same order\n    const flip = c0 < c1;\n    if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n    while (true) {\n      if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n      if (c0 & c1) return null;\n      let x, y, c = c0 || c1;\n      if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n      else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n      else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n      else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n      if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n      else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n    }\n  }\n  _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n    let P = Array.from(points), p;\n    if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n    if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n    if (P = this._clipFinite(i, P)) {\n      for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n        c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n        if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n      }\n    } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n      P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n    }\n    return P;\n  }\n  _edge(i, e0, e1, P, j) {\n    while (e0 !== e1) {\n      let x, y;\n      switch (e0) {\n        case 0b0101: e0 = 0b0100; continue; // top-left\n        case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n        case 0b0110: e0 = 0b0010; continue; // top-right\n        case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n        case 0b1010: e0 = 0b1000; continue; // bottom-right\n        case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n        case 0b1001: e0 = 0b0001; continue; // bottom-left\n        case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n      }\n      // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n      // undefined, the conditional statement will be executed.\n      if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n        P.splice(j, 0, x, y), j += 2;\n      }\n    }\n    return j;\n  }\n  _project(x0, y0, vx, vy) {\n    let t = Infinity, c, x, y;\n    if (vy < 0) { // top\n      if (y0 <= this.ymin) return null;\n      if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n    } else if (vy > 0) { // bottom\n      if (y0 >= this.ymax) return null;\n      if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n    }\n    if (vx > 0) { // right\n      if (x0 >= this.xmax) return null;\n      if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n    } else if (vx < 0) { // left\n      if (x0 <= this.xmin) return null;\n      if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n    }\n    return [x, y];\n  }\n  _edgecode(x, y) {\n    return (x === this.xmin ? 0b0001\n        : x === this.xmax ? 0b0010 : 0b0000)\n        | (y === this.ymin ? 0b0100\n        : y === this.ymax ? 0b1000 : 0b0000);\n  }\n  _regioncode(x, y) {\n    return (x < this.xmin ? 0b0001\n        : x > this.xmax ? 0b0010 : 0b0000)\n        | (y < this.ymin ? 0b0100\n        : y > this.ymax ? 0b1000 : 0b0000);\n  }\n  _simplify(P) {\n    if (P && P.length > 4) {\n      for (let i = 0; i < P.length; i+= 2) {\n        const j = (i + 2) % P.length, k = (i + 4) % P.length;\n        if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n          P.splice(j, 2), i -= 2;\n        }\n      }\n      if (!P.length) P = null;\n    }\n    return P;\n  }\n}\n", "import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n  return p[0];\n}\n\nfunction pointY(p) {\n  return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n  const {triangles, coords} = d;\n  for (let i = 0; i < triangles.length; i += 3) {\n    const a = 2 * triangles[i],\n          b = 2 * triangles[i + 1],\n          c = 2 * triangles[i + 2],\n          cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n                - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n    if (cross > 1e-10) return false;\n  }\n  return true;\n}\n\nfunction jitter(x, y, r) {\n  return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n  static from(points, fx = pointX, fy = pointY, that) {\n    return new Delaunay(\"length\" in points\n        ? flatArray(points, fx, fy, that)\n        : Float64Array.from(flatIterable(points, fx, fy, that)));\n  }\n  constructor(points) {\n    this._delaunator = new Delaunator(points);\n    this.inedges = new Int32Array(points.length / 2);\n    this._hullIndex = new Int32Array(points.length / 2);\n    this.points = this._delaunator.coords;\n    this._init();\n  }\n  update() {\n    this._delaunator.update();\n    this._init();\n    return this;\n  }\n  _init() {\n    const d = this._delaunator, points = this.points;\n\n    // check for collinear\n    if (d.hull && d.hull.length > 2 && collinear(d)) {\n      this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n        .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n      const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n        bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n        r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n      for (let i = 0, n = points.length / 2; i < n; ++i) {\n        const p = jitter(points[2 * i], points[2 * i + 1], r);\n        points[2 * i] = p[0];\n        points[2 * i + 1] = p[1];\n      }\n      this._delaunator = new Delaunator(points);\n    } else {\n      delete this.collinear;\n    }\n\n    const halfedges = this.halfedges = this._delaunator.halfedges;\n    const hull = this.hull = this._delaunator.hull;\n    const triangles = this.triangles = this._delaunator.triangles;\n    const inedges = this.inedges.fill(-1);\n    const hullIndex = this._hullIndex.fill(-1);\n\n    // Compute an index from each point to an (arbitrary) incoming halfedge\n    // Used to give the first neighbor of each point; for this reason,\n    // on the hull we give priority to exterior halfedges\n    for (let e = 0, n = halfedges.length; e < n; ++e) {\n      const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n      if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n    }\n    for (let i = 0, n = hull.length; i < n; ++i) {\n      hullIndex[hull[i]] = i;\n    }\n\n    // degenerate case: 1 or 2 (distinct) points\n    if (hull.length <= 2 && hull.length > 0) {\n      this.triangles = new Int32Array(3).fill(-1);\n      this.halfedges = new Int32Array(3).fill(-1);\n      this.triangles[0] = hull[0];\n      inedges[hull[0]] = 1;\n      if (hull.length === 2) {\n        inedges[hull[1]] = 0;\n        this.triangles[1] = hull[1];\n        this.triangles[2] = hull[1];\n      }\n    }\n  }\n  voronoi(bounds) {\n    return new Voronoi(this, bounds);\n  }\n  *neighbors(i) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n    // degenerate case with several collinear points\n    if (collinear) {\n      const l = collinear.indexOf(i);\n      if (l > 0) yield collinear[l - 1];\n      if (l < collinear.length - 1) yield collinear[l + 1];\n      return;\n    }\n\n    const e0 = inedges[i];\n    if (e0 === -1) return; // coincident point\n    let e = e0, p0 = -1;\n    do {\n      yield p0 = triangles[e];\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) return; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        const p = hull[(_hullIndex[i] + 1) % hull.length];\n        if (p !== p0) yield p;\n        return;\n      }\n    } while (e !== e0);\n  }\n  find(x, y, i = 0) {\n    if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n    const i0 = i;\n    let c;\n    while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n    return c;\n  }\n  _step(i, x, y) {\n    const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n    if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n    let c = i;\n    let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n    const e0 = inedges[i];\n    let e = e0;\n    do {\n      let t = triangles[e];\n      const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n      if (dt < dc) dc = dt, c = t;\n      e = e % 3 === 2 ? e - 2 : e + 1;\n      if (triangles[e] !== i) break; // bad triangulation\n      e = halfedges[e];\n      if (e === -1) {\n        e = hull[(_hullIndex[i] + 1) % hull.length];\n        if (e !== t) {\n          if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n        }\n        break;\n      }\n    } while (e !== e0);\n    return c;\n  }\n  render(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, halfedges, triangles} = this;\n    for (let i = 0, n = halfedges.length; i < n; ++i) {\n      const j = halfedges[i];\n      if (j < i) continue;\n      const ti = triangles[i] * 2;\n      const tj = triangles[j] * 2;\n      context.moveTo(points[ti], points[ti + 1]);\n      context.lineTo(points[tj], points[tj + 1]);\n    }\n    this.renderHull(context);\n    return buffer && buffer.value();\n  }\n  renderPoints(context, r) {\n    if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n    r = r == undefined ? 2 : +r;\n    const buffer = context == null ? context = new Path : undefined;\n    const {points} = this;\n    for (let i = 0, n = points.length; i < n; i += 2) {\n      const x = points[i], y = points[i + 1];\n      context.moveTo(x + r, y);\n      context.arc(x, y, r, 0, tau);\n    }\n    return buffer && buffer.value();\n  }\n  renderHull(context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {hull, points} = this;\n    const h = hull[0] * 2, n = hull.length;\n    context.moveTo(points[h], points[h + 1]);\n    for (let i = 1; i < n; ++i) {\n      const h = 2 * hull[i];\n      context.lineTo(points[h], points[h + 1]);\n    }\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  hullPolygon() {\n    const polygon = new Polygon;\n    this.renderHull(polygon);\n    return polygon.value();\n  }\n  renderTriangle(i, context) {\n    const buffer = context == null ? context = new Path : undefined;\n    const {points, triangles} = this;\n    const t0 = triangles[i *= 3] * 2;\n    const t1 = triangles[i + 1] * 2;\n    const t2 = triangles[i + 2] * 2;\n    context.moveTo(points[t0], points[t0 + 1]);\n    context.lineTo(points[t1], points[t1 + 1]);\n    context.lineTo(points[t2], points[t2 + 1]);\n    context.closePath();\n    return buffer && buffer.value();\n  }\n  *trianglePolygons() {\n    const {triangles} = this;\n    for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n      yield this.trianglePolygon(i);\n    }\n  }\n  trianglePolygon(i) {\n    const polygon = new Polygon;\n    this.renderTriangle(i, polygon);\n    return polygon.value();\n  }\n}\n\nfunction flatArray(points, fx, fy, that) {\n  const n = points.length;\n  const array = new Float64Array(n * 2);\n  for (let i = 0; i < n; ++i) {\n    const p = points[i];\n    array[i * 2] = fx.call(that, p, i, points);\n    array[i * 2 + 1] = fy.call(that, p, i, points);\n  }\n  return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n  let i = 0;\n  for (const p of points) {\n    yield fx.call(that, p, i, points);\n    yield fy.call(that, p, i, points);\n    ++i;\n  }\n}\n", "export {default as Delaunay} from \"./delaunay.js\";\nexport {default as Voronoi} from \"./voronoi.js\";\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    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n", "import dsv from \"./dsv.js\";\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;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n", "import dsv from \"./dsv.js\";\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;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n", "export default function autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number, m;\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 (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n      value = new Date(value);\n    }\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();", "export {default as dsvFormat} from \"./dsv.js\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, csvFormatRow, csvFormatValue} from \"./csv.js\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, tsvFormatRow, tsvFormatValue} from \"./tsv.js\";\nexport {default as autoType} from \"./autoType.js\";\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.js\";\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  if (response.status === 204 || response.status === 205) return;\n  return response.json();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n", "import text from \"./text.js\";\n\nfunction parser(type) {\n  return (input, init) => text(input, init)\n    .then(text => (new DOMParser).parseFromString(text, type));\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 as blob} from \"./blob.js\";\nexport {default as buffer} from \"./buffer.js\";\nexport {default as dsv, csv, tsv} from \"./dsv.js\";\nexport {default as image} from \"./image.js\";\nexport {default as json} from \"./json.js\";\nexport {default as text} from \"./text.js\";\nexport {default as xml, html, svg} from \"./xml.js\";\n", "export default function(x, y) {\n  var nodes, strength = 1;\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) * strength, sy = (sy / n - y) * strength, 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  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  return force;\n}\n", "export default function(d) {\n  const 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\u2019t 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 || 1,\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() {\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", "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", "import Quad from \"./quad.js\";\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\u2019t 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\u2019t 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.js\";\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.js\";\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", "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.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\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", "export {default as quadtree} from \"./quadtree.js\";\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function(random) {\n  return (random() - 0.5) * 1e-6;\n}\n", "import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\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      random,\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(random), l += x * x;\n            if (y === 0) y = jiggle(random), 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(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\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", "import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\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(\"node not found: \" + 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      random,\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(random);\n        y = target.y + target.vy - source.y - source.vy || jiggle(random);\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 = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\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(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\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", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\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 = new Map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\"),\n      random = lcg();\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.forEach(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(0.5 + 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, random);\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.forEach(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    randomSource: function(_) {\n      return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.delete(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 {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n  var nodes,\n      node,\n      random,\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(random), l += x * x;\n        if (y === 0) y = jiggle(random), 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(random), l += x * x;\n      if (y === 0) y = jiggle(random), 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(_nodes, _random) {\n    nodes = _nodes;\n    random = _random;\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.js\";\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.js\";\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.js\";\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", "export {default as forceCenter} from \"./center.js\";\nexport {default as forceCollide} from \"./collide.js\";\nexport {default as forceLink} from \"./link.js\";\nexport {default as forceManyBody} from \"./manyBody.js\";\nexport {default as forceRadial} from \"./radial.js\";\nexport {default as forceSimulation} from \"./simulation.js\";\nexport {default as forceX} from \"./x.js\";\nexport {default as forceY} from \"./y.js\";\n", "export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\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, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if (!isFinite(x) || x === 0) return null; // NaN, \u00B1Infinity, \u00B10\n  var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), 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 {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\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", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\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 === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + 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 (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return prefixExponent = undefined, x.toPrecision(p);\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\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(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 formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n  return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier, options) {\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 === undefined && (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 = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n        suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\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 === undefined ? 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        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : 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 after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n        // grouped, and fractional or exponential \u201Csuffix\u201D 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 e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n    return function(value) {\n      return f(k * value);\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\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 exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\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.js\";\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.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\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 hypot = Math.hypot;\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 \"d3-array\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = new Adder();\n\n// hello?\n\nvar areaSum = new 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 = new Adder();\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\u2019s\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 = new Adder();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\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 \"d3-array\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum,\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 = new Adder();\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  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\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\u00B0) % 360\u00B0, except that we want\n// the distance between \u00B1180\u00B0 to be 360\u00B0.\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 {Adder} from \"d3-array\";\nimport {asin, atan2, cos, degrees, epsilon, epsilon2, hypot, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\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 = hypot(cx, cy, cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2.add(v * cx);\n  Y2.add(v * cy);\n  Z2.add(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 = 0;\n  X2 = new Adder();\n  Y2 = new Adder();\n  Z2 = new Adder();\n  stream(object, centroidStream);\n\n  var x = +X2,\n      y = +Y2,\n      z = +Z2,\n      m = hypot(x, y, 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 = hypot(x, y, 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 / 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.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [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    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [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.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0\u00B0, 0\u00B0], 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(2),\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.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\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.js\";\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.js\";\nimport {epsilon} from \"../math.js\";\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 (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\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      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\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 \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\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 = longitude(point0),\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 = longitude(point1),\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\u2019s 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 < -epsilon2) ^ (winding & 1);\n}\n", "import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\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.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\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.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 2 * 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        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\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], 2);\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], 3);\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 \u2A2F 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.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon\u2019s 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.js\";\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 \"d3-array\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum,\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 = new Adder();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n", "import length from \"./length.js\";\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.js\";\nimport {default as distance} from \"./distance.js\";\nimport {epsilon2, radians} from \"./math.js\";\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 ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\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.js\";\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.js\";\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", "export default x => x;\n", "import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new 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 = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\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", "import noop from \"../noop.js\";\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.js\";\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.js\";\nimport noop from \"../noop.js\";\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 \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new 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 = new Adder();\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", "// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n", "import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      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    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : 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  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).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.js\";\nimport boundsStream from \"../path/bounds.js\";\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.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\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.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\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, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\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    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (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 angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\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.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\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, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, 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.js\";\nimport {projectionMutator} from \"./index.js\";\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 {asin, cos, sin} from \"../math.js\";\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 {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\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        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, 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 conicEqualArea from \"./conicEqualArea.js\";\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.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\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\u00D7500. The projection also works quite well at 960\u00D7600 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.js\";\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        if (k === Infinity) return [2, 0];\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.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\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.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\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.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\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, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\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      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 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.js\";\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, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\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        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, 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.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\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.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\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  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\n}\n", "import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\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.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\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.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\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.js\";\nimport {mercatorProjection} from \"./mercator.js\";\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", "export {default as geoArea} from \"./area.js\";\nexport {default as geoBounds} from \"./bounds.js\";\nexport {default as geoCentroid} from \"./centroid.js\";\nexport {default as geoCircle} from \"./circle.js\";\nexport {default as geoClipAntimeridian} from \"./clip/antimeridian.js\";\nexport {default as geoClipCircle} from \"./clip/circle.js\";\nexport {default as geoClipExtent} from \"./clip/extent.js\"; // DEPRECATED! Use d3.geoIdentity().clipExtent(\u2026).\nexport {default as geoClipRectangle} from \"./clip/rectangle.js\";\nexport {default as geoContains} from \"./contains.js\";\nexport {default as geoDistance} from \"./distance.js\";\nexport {default as geoGraticule, graticule10 as geoGraticule10} from \"./graticule.js\";\nexport {default as geoInterpolate} from \"./interpolate.js\";\nexport {default as geoLength} from \"./length.js\";\nexport {default as geoPath} from \"./path/index.js\";\nexport {default as geoAlbers} from \"./projection/albers.js\";\nexport {default as geoAlbersUsa} from \"./projection/albersUsa.js\";\nexport {default as geoAzimuthalEqualArea, azimuthalEqualAreaRaw as geoAzimuthalEqualAreaRaw} from \"./projection/azimuthalEqualArea.js\";\nexport {default as geoAzimuthalEquidistant, azimuthalEquidistantRaw as geoAzimuthalEquidistantRaw} from \"./projection/azimuthalEquidistant.js\";\nexport {default as geoConicConformal, conicConformalRaw as geoConicConformalRaw} from \"./projection/conicConformal.js\";\nexport {default as geoConicEqualArea, conicEqualAreaRaw as geoConicEqualAreaRaw} from \"./projection/conicEqualArea.js\";\nexport {default as geoConicEquidistant, conicEquidistantRaw as geoConicEquidistantRaw} from \"./projection/conicEquidistant.js\";\nexport {default as geoEqualEarth, equalEarthRaw as geoEqualEarthRaw} from \"./projection/equalEarth.js\";\nexport {default as geoEquirectangular, equirectangularRaw as geoEquirectangularRaw} from \"./projection/equirectangular.js\";\nexport {default as geoGnomonic, gnomonicRaw as geoGnomonicRaw} from \"./projection/gnomonic.js\";\nexport {default as geoIdentity} from \"./projection/identity.js\";\nexport {default as geoProjection, projectionMutator as geoProjectionMutator} from \"./projection/index.js\";\nexport {default as geoMercator, mercatorRaw as geoMercatorRaw} from \"./projection/mercator.js\";\nexport {default as geoNaturalEarth1, naturalEarth1Raw as geoNaturalEarth1Raw} from \"./projection/naturalEarth1.js\";\nexport {default as geoOrthographic, orthographicRaw as geoOrthographicRaw} from \"./projection/orthographic.js\";\nexport {default as geoStereographic, stereographicRaw as geoStereographicRaw} from \"./projection/stereographic.js\";\nexport {default as geoTransverseMercator, transverseMercatorRaw as geoTransverseMercatorRaw} from \"./projection/transverseMercator.js\";\nexport {default as geoRotation} from \"./rotation.js\";\nexport {default as geoStream} from \"./stream.js\";\nexport {default as geoTransform} from \"./transform.js\";\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", "export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\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  return Array.from(this);\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\u2019t include the root\u2019s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n", "export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\n}\n", "import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[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 objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\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  find: node_find,\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  [Symbol.iterator]: node_iterator\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", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n", "export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n  let m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = 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} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n  return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n  var i = 0, n = (circles = shuffle(Array.from(circles), random)).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 + Math.max(a.r, b.r, 1) * 1e-9, 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 = -(Math.abs(A) > 1e-6 ? (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 array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\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 packSiblingsRandom(circles, random) {\n  if (!(n = (circles = array(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\u2026\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    // \u201CCloseness\u201D is determined by linear distance along the front-chain.\n    // \u201CAhead\u201D or \u201Cbehind\u201D 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 = packEncloseRandom(a, random);\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  packSiblingsRandom(circles, lcg());\n  return circles;\n}\n", "import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\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    const random = lcg();\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildrenRandom(padding, 0.5, random))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildrenRandom(constantZero, 1, random))\n          .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\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 packChildrenRandom(padding, k, random) {\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 = packSiblingsRandom(children, random);\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.js\";\nimport treemapDice from \"./treemap/dice.js\";\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 {optional} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n    ambiguous = {},\n    imputed = {};\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      path;\n\n  function stratify(data) {\n    var nodes = Array.from(data),\n        currentId = id,\n        currentParentId = parentId,\n        n,\n        d,\n        i,\n        root,\n        parent,\n        node,\n        nodeId,\n        nodeKey,\n        nodeByKey = new Map;\n\n    if (path != null) {\n      const I = nodes.map((d, i) => normalize(path(d, i, data)));\n      const P = I.map(parentof);\n      const S = new Set(I).add(\"\");\n      for (const i of P) {\n        if (!S.has(i)) {\n          S.add(i);\n          I.push(i);\n          P.push(parentof(i));\n          nodes.push(imputed);\n        }\n      }\n      currentId = (_, i) => I[i];\n      currentParentId = (_, i) => P[i];\n    }\n\n    for (i = 0, n = nodes.length; i < n; ++i) {\n      d = nodes[i], node = nodes[i] = new Node(d);\n      if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = node.id = nodeId;\n        nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n      }\n      if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n        node.parent = nodeId;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i];\n      if (nodeId = node.parent) {\n        parent = nodeByKey.get(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      } else {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n\n    // When imputing internal nodes, only introduce roots if needed.\n    // Then replace the imputed marker data with null.\n    if (path != null) {\n      while (root.data === imputed && root.children.length === 1) {\n        root = root.children[0], --n;\n      }\n      for (let i = nodes.length - 1; i >= 0; --i) {\n        node = nodes[i];\n        if (node.data !== imputed) break;\n        node.data = null;\n      }\n    }\n\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 = optional(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = optional(x), stratify) : parentId;\n  };\n\n  stratify.path = function(x) {\n    return arguments.length ? (path = optional(x), stratify) : path;\n  };\n\n  return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize(path) {\n  path = `${path}`;\n  let i = path.length;\n  if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n  return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" \u21E5 \"/foo\", \"/foo\" \u21E5 \"/\", \"/\" \u21A6 \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n  let i = path.length;\n  if (i < 2) return \"\";\n  while (--i > 1) if (slash(path, i)) break;\n  return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n  if (path[i] === \"/\") {\n    let k = 0;\n    while (i > 0 && path[--i] === \"\\\\\") ++k;\n    if ((k & 1) === 0) return true;\n  }\n  return false;\n}\n", "import {Node} from \"./hierarchy/index.js\";\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-\u2019s ancestor is a sibling of v, returns vi-\u2019s 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.\u2019s 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.js\";\nimport treemapSlice from \"./slice.js\";\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.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\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 = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\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.js\";\nimport slice from \"./slice.js\";\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.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\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, value ? y0 += (y1 - y0) * row.value / value : y1);\n        else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, 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 as cluster} from \"./cluster.js\";\nexport {default as hierarchy, Node} from \"./hierarchy/index.js\";\nexport {default as pack} from \"./pack/index.js\";\nexport {default as packSiblings} from \"./pack/siblings.js\";\nexport {default as packEnclose} from \"./pack/enclose.js\";\nexport {default as partition} from \"./partition.js\";\nexport {default as stratify} from \"./stratify.js\";\nexport {default as tree} from \"./tree.js\";\nexport {default as treemap} from \"./treemap/index.js\";\nexport {default as treemapBinary} from \"./treemap/binary.js\";\nexport {default as treemapDice} from \"./treemap/dice.js\";\nexport {default as treemapSlice} from \"./treemap/slice.js\";\nexport {default as treemapSliceDice} from \"./treemap/sliceDice.js\";\nexport {default as treemapSquarify} from \"./treemap/squarify.js\";\nexport {default as treemapResquarify} from \"./treemap/resquarify.js\";\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.js\";\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  const n = points.length,\n      indexes = [0, 1];\n  let size = 2, i;\n\n  for (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.hypot(xa, ya);\n  }\n\n  return perimeter;\n}\n", "export {default as polygonArea} from \"./area.js\";\nexport {default as polygonCentroid} from \"./centroid.js\";\nexport {default as polygonHull} from \"./hull.js\";\nexport {default as polygonContains} from \"./contains.js\";\nexport {default as polygonLength} from \"./length.js\";\n", "export default Math.random;\n", "import defaultSource from \"./defaultSource.js\";\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.js\";\n\nexport default (function sourceRandomInt(source) {\n  function randomInt(min, max) {\n    if (arguments.length < 2) max = min, min = 0;\n    min = Math.floor(min);\n    max = Math.floor(max) - min;\n    return function() {\n      return Math.floor(source() * max + min);\n    };\n  }\n\n  randomInt.source = sourceRandomInt;\n\n  return randomInt;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\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.js\";\nimport normal from \"./normal.js\";\n\nexport default (function sourceRandomLogNormal(source) {\n  var N = normal.source(source);\n\n  function randomLogNormal() {\n    var randomNormal = N.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.js\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    if ((n = +n) <= 0) return () => 0;\n    return function() {\n      for (var sum = 0, i = n; i > 1; --i) sum += source();\n      return sum + i * source();\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\nimport irwinHall from \"./irwinHall.js\";\n\nexport default (function sourceRandomBates(source) {\n  var I = irwinHall.source(source);\n\n  function randomBates(n) {\n    // use limiting distribution at n === 0\n    if ((n = +n) === 0) return source;\n    var randomIrwinHall = I(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.js\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log1p(-source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomPareto(source) {\n  function randomPareto(alpha) {\n    if ((alpha = +alpha) < 0) throw new RangeError(\"invalid alpha\");\n    alpha = 1 / -alpha;\n    return function() {\n      return Math.pow(1 - source(), alpha);\n    };\n  }\n\n  randomPareto.source = sourceRandomPareto;\n\n  return randomPareto;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomBernoulli(source) {\n  function randomBernoulli(p) {\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n    return function() {\n      return Math.floor(source() + p);\n    };\n  }\n\n  randomBernoulli.source = sourceRandomBernoulli;\n\n  return randomBernoulli;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomGeometric(source) {\n  function randomGeometric(p) {\n    if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n    if (p === 0) return () => Infinity;\n    if (p === 1) return () => 1;\n    p = Math.log1p(-p);\n    return function() {\n      return 1 + Math.floor(Math.log1p(-source()) / p);\n    };\n  }\n\n  randomGeometric.source = sourceRandomGeometric;\n\n  return randomGeometric;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\nimport normal from \"./normal.js\";\n\nexport default (function sourceRandomGamma(source) {\n  var randomNormal = normal.source(source)();\n\n  function randomGamma(k, theta) {\n    if ((k = +k) < 0) throw new RangeError(\"invalid k\");\n    // degenerate distribution if k === 0\n    if (k === 0) return () => 0;\n    theta = theta == null ? 1 : +theta;\n    // exponential distribution if k === 1\n    if (k === 1) return () => -Math.log1p(-source()) * theta;\n\n    var d = (k < 1 ? k + 1 : k) - 1 / 3,\n        c = 1 / (3 * Math.sqrt(d)),\n        multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1;\n    return function() {\n      do {\n        do {\n          var x = randomNormal(),\n              v = 1 + c * x;\n        } while (v <= 0);\n        v *= v * v;\n        var u = 1 - source();\n      } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v)));\n      return d * v * multiplier() * theta;\n    };\n  }\n\n  randomGamma.source = sourceRandomGamma;\n\n  return randomGamma;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\nimport gamma from \"./gamma.js\";\n\nexport default (function sourceRandomBeta(source) {\n  var G = gamma.source(source);\n\n  function randomBeta(alpha, beta) {\n    var X = G(alpha),\n        Y = G(beta);\n    return function() {\n      var x = X();\n      return x === 0 ? 0 : x / (x + Y());\n    };\n  }\n\n  randomBeta.source = sourceRandomBeta;\n\n  return randomBeta;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\nimport beta from \"./beta.js\";\nimport geometric from \"./geometric.js\";\n\nexport default (function sourceRandomBinomial(source) {\n  var G = geometric.source(source),\n      B = beta.source(source);\n\n  function randomBinomial(n, p) {\n    n = +n;\n    if ((p = +p) >= 1) return () => n;\n    if (p <= 0) return () => 0;\n    return function() {\n      var acc = 0, nn = n, pp = p;\n      while (nn * pp > 16 && nn * (1 - pp) > 16) {\n        var i = Math.floor((nn + 1) * pp),\n            y = B(i, nn - i + 1)();\n        if (y <= pp) {\n          acc += i;\n          nn -= i;\n          pp = (pp - y) / (1 - y);\n        } else {\n          nn = i - 1;\n          pp /= y;\n        }\n      }\n      var sign = pp < 0.5,\n          pFinal = sign ? pp : 1 - pp,\n          g = G(pFinal);\n      for (var s = g(), k = 0; s <= nn; ++k) s += g();\n      return acc + (sign ? k : nn - k);\n    };\n  }\n\n  randomBinomial.source = sourceRandomBinomial;\n\n  return randomBinomial;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomWeibull(source) {\n  function randomWeibull(k, a, b) {\n    var outerFunc;\n    if ((k = +k) === 0) {\n      outerFunc = x => -Math.log(x);\n    } else {\n      k = 1 / k;\n      outerFunc = x => Math.pow(x, k);\n    }\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      return a + b * outerFunc(-Math.log1p(-source()));\n    };\n  }\n\n  randomWeibull.source = sourceRandomWeibull;\n\n  return randomWeibull;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomCauchy(source) {\n  function randomCauchy(a, b) {\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      return a + b * Math.tan(Math.PI * source());\n    };\n  }\n\n  randomCauchy.source = sourceRandomCauchy;\n\n  return randomCauchy;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\n\nexport default (function sourceRandomLogistic(source) {\n  function randomLogistic(a, b) {\n    a = a == null ? 0 : +a;\n    b = b == null ? 1 : +b;\n    return function() {\n      var u = source();\n      return a + b * Math.log(u / (1 - u));\n    };\n  }\n\n  randomLogistic.source = sourceRandomLogistic;\n\n  return randomLogistic;\n})(defaultSource);\n", "import defaultSource from \"./defaultSource.js\";\nimport binomial from \"./binomial.js\";\nimport gamma from \"./gamma.js\";\n\nexport default (function sourceRandomPoisson(source) {\n  var G = gamma.source(source),\n      B = binomial.source(source);\n\n  function randomPoisson(lambda) {\n    return function() {\n      var acc = 0, l = lambda;\n      while (l > 16) {\n        var n = Math.floor(0.875 * l),\n            t = G(n)();\n        if (t > l) return acc + B(n - 1, l / t)();\n        acc += n;\n        l -= t;\n      }\n      for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source());\n      return acc + k;\n    };\n  }\n\n  randomPoisson.source = sourceRandomPoisson;\n\n  return randomPoisson;\n})(defaultSource);\n", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nexport default function lcg(seed = Math.random()) {\n  let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n  return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n", "export {default as randomUniform} from \"./uniform.js\";\nexport {default as randomInt} from \"./int.js\";\nexport {default as randomNormal} from \"./normal.js\";\nexport {default as randomLogNormal} from \"./logNormal.js\";\nexport {default as randomBates} from \"./bates.js\";\nexport {default as randomIrwinHall} from \"./irwinHall.js\";\nexport {default as randomExponential} from \"./exponential.js\";\nexport {default as randomPareto} from \"./pareto.js\";\nexport {default as randomBernoulli} from \"./bernoulli.js\";\nexport {default as randomGeometric} from \"./geometric.js\";\nexport {default as randomBinomial} from \"./binomial.js\";\nexport {default as randomGamma} from \"./gamma.js\";\nexport {default as randomBeta} from \"./beta.js\";\nexport {default as randomWeibull} from \"./weibull.js\";\nexport {default as randomCauchy} from \"./cauchy.js\";\nexport {default as randomLogistic} from \"./logistic.js\";\nexport {default as randomPoisson} from \"./poisson.js\";\nexport {default as randomLcg} from \"./lcg.js\";\n", "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: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), 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.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 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 = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\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 ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, 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(), [r0, r1])\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 constants(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function number(x) {\n  return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\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(a, b) {\n  var 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    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || 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 = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : 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() {\n  return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(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} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\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    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\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 {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, 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 ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n", "export default function nice(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, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\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      : x => 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), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let 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 = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\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; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let 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 = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\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.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\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 continuous from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nfunction square(x) {\n  return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n  return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nexport default function radial() {\n  var squared = continuous(),\n      range = [0, 1],\n      round = false,\n      unknown;\n\n  function scale(x) {\n    var y = unsquare(squared(x));\n    return isNaN(y) ? unknown : round ? Math.round(y) : y;\n  }\n\n  scale.invert = function(y) {\n    return squared.invert(square(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (squared.domain(_), scale) : squared.domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (squared.range((range = Array.from(_, number)).map(square)), scale) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return scale.range(_).round(true);\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, scale) : round;\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return radial(squared.domain(), range)\n        .round(round)\n        .clamp(squared.clamp())\n        .unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n", "import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\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 x == null || 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 (let d of _) if (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 = Array.from(_), 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 {linearish} from \"./linear.js\";\nimport {initRange} from \"./init.js\";\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 != null && 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, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = Array.from(_)).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 {initRange} from \"./init.js\";\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 != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), 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", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\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    let previous;\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 = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (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 = (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 = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n", "export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const 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 ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "export {\n  timeInterval\n} from \"./interval.js\";\n\nexport {\n  millisecond as utcMillisecond,\n  milliseconds as utcMilliseconds,\n  millisecond as timeMillisecond,\n  milliseconds as timeMilliseconds\n} from \"./millisecond.js\";\n\nexport {\n  second as utcSecond,\n  seconds as utcSeconds,\n  second as timeSecond,\n  seconds as timeSeconds\n} from \"./second.js\";\n\nexport {\n  timeMinute,\n  timeMinutes,\n  utcMinute,\n  utcMinutes\n} from \"./minute.js\";\n\nexport {\n  timeHour,\n  timeHours,\n  utcHour,\n  utcHours\n} from \"./hour.js\";\n\nexport {\n  timeDay,\n  timeDays,\n  utcDay,\n  utcDays,\n  unixDay,\n  unixDays\n} from \"./day.js\";\n\nexport {\n  timeSunday as timeWeek,\n  timeSundays as timeWeeks,\n  timeSunday,\n  timeSundays,\n  timeMonday,\n  timeMondays,\n  timeTuesday,\n  timeTuesdays,\n  timeWednesday,\n  timeWednesdays,\n  timeThursday,\n  timeThursdays,\n  timeFriday,\n  timeFridays,\n  timeSaturday,\n  timeSaturdays,\n  utcSunday as utcWeek,\n  utcSundays as utcWeeks,\n  utcSunday,\n  utcSundays,\n  utcMonday,\n  utcMondays,\n  utcTuesday,\n  utcTuesdays,\n  utcWednesday,\n  utcWednesdays,\n  utcThursday,\n  utcThursdays,\n  utcFriday,\n  utcFridays,\n  utcSaturday,\n  utcSaturdays\n} from \"./week.js\";\n\nexport {\n  timeMonth,\n  timeMonths,\n  utcMonth,\n  utcMonths\n} from \"./month.js\";\n\nexport {\n  timeYear,\n  timeYears,\n  utcYear,\n  utcYears\n} from \"./year.js\";\n\nexport {\n  utcTicks,\n  utcTickInterval,\n  timeTicks,\n  timeTickInterval\n} from \"./ticks.js\";\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 newDate(y, m, d) {\n  return {y: y, m: m, d: d, 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    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\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    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\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    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\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, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\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      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\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      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\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(newDate(d.y, 0, 1)), 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 = localDate(newDate(d.y, 0, 1)), 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(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).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 localDate(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.get(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.get(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.get(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.get(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.get(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 formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\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  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\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 += \"\", false);\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 += \"\", true);\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  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\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 parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, 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.s = +n[0], 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) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(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) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\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 formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\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) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(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) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\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 formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\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.js\";\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.js\";\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.js\";\nimport {utcParse} from \"./defaultLocale.js\";\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.js\";\nexport {default as timeFormatLocale} from \"./locale.js\";\nexport {default as isoFormat} from \"./isoFormat.js\";\nexport {default as isoParse} from \"./isoParse.js\";\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\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(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\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  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  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\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 x == null || 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 ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), 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  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\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, quantile} from \"d3-array\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (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.range = function() {\n    return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n  };\n\n  scale.quantiles = function(n) {\n    return Array.from({length: n + 1}, (_, i) => quantile(domain, i / n));\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n", "import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 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) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, 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  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\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), s = t1 < t0 ? -1 : 1;\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.js\";\n\nexport {\n  default as scaleIdentity\n} from \"./identity.js\";\n\nexport {\n  default as scaleLinear\n} from \"./linear.js\";\n\nexport {\n  default as scaleLog\n} from \"./log.js\";\n\nexport {\n  default as scaleSymlog\n} from \"./symlog.js\";\n\nexport {\n  default as scaleOrdinal,\n  implicit as scaleImplicit\n} from \"./ordinal.js\";\n\nexport {\n  default as scalePow,\n  sqrt as scaleSqrt\n} from \"./pow.js\";\n\nexport {\n  default as scaleRadial\n} from \"./radial.js\";\n\nexport {\n  default as scaleQuantile\n} from \"./quantile.js\";\n\nexport {\n  default as scaleQuantize\n} from \"./quantize.js\";\n\nexport {\n  default as scaleThreshold\n} from \"./threshold.js\";\n\nexport {\n  default as scaleTime\n} from \"./time.js\";\n\nexport {\n  default as scaleUtc\n} from \"./utcTime.js\";\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.js\";\n\nexport {\n  default as scaleSequentialQuantile\n} from \"./sequentialQuantile.js\";\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.js\";\n\nexport {\n  default as tickFormat\n} from \"./tickFormat.js\";\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.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n", "import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n      + \")\";\n}\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", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n", "import colors from \"../colors.js\";\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 as schemeCategory10} from \"./categorical/category10.js\";\nexport {default as schemeAccent} from \"./categorical/Accent.js\";\nexport {default as schemeDark2} from \"./categorical/Dark2.js\";\nexport {default as schemeObservable10} from \"./categorical/observable10.js\";\nexport {default as schemePaired} from \"./categorical/Paired.js\";\nexport {default as schemePastel1} from \"./categorical/Pastel1.js\";\nexport {default as schemePastel2} from \"./categorical/Pastel2.js\";\nexport {default as schemeSet1} from \"./categorical/Set1.js\";\nexport {default as schemeSet2} from \"./categorical/Set2.js\";\nexport {default as schemeSet3} from \"./categorical/Set3.js\";\nexport {default as schemeTableau10} from \"./categorical/Tableau10.js\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG.js\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn.js\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG.js\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr.js\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu.js\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy.js\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu.js\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn.js\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral.js\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn.js\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu.js\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu.js\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd.js\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn.js\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu.js\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd.js\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu.js\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu.js\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn.js\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr.js\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd.js\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues.js\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens.js\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys.js\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples.js\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds.js\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges.js\";\nexport {default as interpolateCividis} from \"./sequential-multi/cividis.js\";\nexport {default as interpolateCubehelixDefault} from \"./sequential-multi/cubehelix.js\";\nexport {default as interpolateRainbow, warm as interpolateWarm, cool as interpolateCool} from \"./sequential-multi/rainbow.js\";\nexport {default as interpolateSinebow} from \"./sequential-multi/sinebow.js\";\nexport {default as interpolateTurbo} from \"./sequential-multi/turbo.js\";\nexport {default as interpolateViridis, magma as interpolateMagma, inferno as interpolateInferno, plasma as interpolatePlasma} from \"./sequential-multi/viridis.js\";\n", "export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const 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\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n", "import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\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      path = withPath(arc);\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 \u2265 r0, da1 \u2265 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. If this\n        // intersection fails, it\u2019s probably because the arc is too small, so\n        // disable the corner radius entirely.\n        if (da < pi) {\n          if (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          } else {\n            rc0 = rc1 = 0;\n          }\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector\u2019s 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\u2019s a circular sector?\n      // Or perhaps it\u2019s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector\u2019s 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", "export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\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; // falls through\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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(area);\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\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 = array(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.js\";\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.js\";\nimport line from \"./line.js\";\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.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\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", "import pointRadial from \"../pointRadial.js\";\n\nclass Bump {\n  constructor(context, x) {\n    this._context = context;\n    this._x = x;\n  }\n  areaStart() {\n    this._line = 0;\n  }\n  areaEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  }\n  point(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: {\n        this._point = 1;\n        if (this._line) this._context.lineTo(x, y);\n        else this._context.moveTo(x, y);\n        break;\n      }\n      case 1: this._point = 2; // falls through\n      default: {\n        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n        break;\n      }\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nclass BumpRadial {\n  constructor(context) {\n    this._context = context;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {}\n  point(x, y) {\n    x = +x, y = +y;\n    if (this._point === 0) {\n      this._point = 1;\n    } else {\n      const p0 = pointRadial(this._x0, this._y0);\n      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n      const p2 = pointRadial(x, this._y0);\n      const p3 = pointRadial(x, y);\n      this._context.moveTo(...p0);\n      this._context.bezierCurveTo(...p1, ...p2, ...p3);\n    }\n    this._x0 = x, this._y0 = y;\n  }\n}\n\nexport function bumpX(context) {\n  return new Bump(context, true);\n}\n\nexport function bumpY(context) {\n  return new Bump(context, false);\n}\n\nexport function bumpRadial(context) {\n  return new BumpRadial(context);\n}\n", "import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {bumpX, bumpY, bumpRadial} from \"./curve/bump.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nexport function link(curve) {\n  let source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null,\n      output = null,\n      path = withPath(link);\n\n  function link() {\n    let buffer;\n    const argv = slice.call(arguments);\n    const s = source.apply(this, argv);\n    const t = target.apply(this, argv);\n    if (context == null) output = curve(buffer = path());\n    output.lineStart();\n    argv[0] = s, output.point(+x.apply(this, argv), +y.apply(this, argv));\n    argv[0] = t, output.point(+x.apply(this, argv), +y.apply(this, argv));\n    output.lineEnd();\n    if (buffer) return output = 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 ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n  };\n\n  return link;\n}\n\nexport function linkHorizontal() {\n  return link(bumpX);\n}\n\nexport function linkVertical() {\n  return link(bumpY);\n}\n\nexport function linkRadial() {\n  const l = link(bumpRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n", "import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n    const t = r / 2;\n    const u = t * sqrt3;\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n    context.moveTo(-u, -t);\n    context.lineTo(u, t);\n    context.moveTo(-u, t);\n    context.lineTo(u, -t);\n  }\n};\n", "import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = 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", "import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const 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 {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.62625;\n    context.moveTo(0, -r);\n    context.lineTo(r, 0);\n    context.lineTo(0, r);\n    context.lineTo(-r, 0);\n    context.closePath();\n  }\n};\n", "import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n    context.moveTo(-r, 0);\n    context.lineTo(r, 0);\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.4431;\n    context.moveTo(r, r);\n    context.lineTo(r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, r);\n    context.closePath();\n  }\n};\n", "import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = 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", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -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", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const s = sqrt(size) * 0.6824;\n    const t = s  / 2;\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n    context.moveTo(0, -s);\n    context.lineTo(u, t);\n    context.lineTo(-u, t);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, 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 {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n    context.moveTo(-r, -r);\n    context.lineTo(r, r);\n    context.moveTo(-r, r);\n    context.lineTo(r, -r);\n  }\n};\n", "import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let 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); // falls through\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); // falls through\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.js\";\nimport {point} from \"./basis.js\";\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.js\";\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; // falls through\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.js\";\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; // falls through\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.js\";\nimport {point} from \"./cardinal.js\";\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.js\";\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; // falls through\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.js\";\nimport {Cardinal} from \"./cardinal.js\";\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; // falls through\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.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\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.js\";\nimport {point} from \"./catmullRom.js\";\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; // falls through\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.js\";\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\u00E9zier 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; // falls through\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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nfunction stackSeries(key) {\n  const series = [];\n  series.key = key;\n  return series;\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 sz = Array.from(keys.apply(this, arguments), stackSeries),\n        i, n = sz.length, j = -1,\n        oz;\n\n    for (const d of data) {\n      for (i = 0, ++j; i < n; ++i) {\n        (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n      }\n    }\n\n    for (i = 0, oz = array(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(Array.from(_)), 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(Array.from(_)), 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.js\";\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] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n", "import none from \"./none.js\";\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.js\";\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.js\";\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.js\";\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.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n", "import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\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.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n", "export {default as arc} from \"./arc.js\";\nexport {default as area} from \"./area.js\";\nexport {default as line} from \"./line.js\";\nexport {default as pie} from \"./pie.js\";\nexport {default as areaRadial, default as radialArea} from \"./areaRadial.js\"; // Note: radialArea is deprecated!\nexport {default as lineRadial, default as radialLine} from \"./lineRadial.js\"; // Note: radialLine is deprecated!\nexport {default as pointRadial} from \"./pointRadial.js\";\nexport {link, linkHorizontal, linkVertical, linkRadial} from \"./link.js\";\n\nexport {default as symbol, symbolsStroke, symbolsFill, symbolsFill as symbols} from \"./symbol.js\";\nexport {default as symbolAsterisk} from \"./symbol/asterisk.js\";\nexport {default as symbolCircle} from \"./symbol/circle.js\";\nexport {default as symbolCross} from \"./symbol/cross.js\";\nexport {default as symbolDiamond} from \"./symbol/diamond.js\";\nexport {default as symbolDiamond2} from \"./symbol/diamond2.js\";\nexport {default as symbolPlus} from \"./symbol/plus.js\";\nexport {default as symbolSquare} from \"./symbol/square.js\";\nexport {default as symbolSquare2} from \"./symbol/square2.js\";\nexport {default as symbolStar} from \"./symbol/star.js\";\nexport {default as symbolTriangle} from \"./symbol/triangle.js\";\nexport {default as symbolTriangle2} from \"./symbol/triangle2.js\";\nexport {default as symbolWye} from \"./symbol/wye.js\";\nexport {default as symbolTimes, default as symbolX} from \"./symbol/times.js\";\n\nexport {default as curveBasisClosed} from \"./curve/basisClosed.js\";\nexport {default as curveBasisOpen} from \"./curve/basisOpen.js\";\nexport {default as curveBasis} from \"./curve/basis.js\";\nexport {bumpX as curveBumpX, bumpY as curveBumpY} from \"./curve/bump.js\";\nexport {default as curveBundle} from \"./curve/bundle.js\";\nexport {default as curveCardinalClosed} from \"./curve/cardinalClosed.js\";\nexport {default as curveCardinalOpen} from \"./curve/cardinalOpen.js\";\nexport {default as curveCardinal} from \"./curve/cardinal.js\";\nexport {default as curveCatmullRomClosed} from \"./curve/catmullRomClosed.js\";\nexport {default as curveCatmullRomOpen} from \"./curve/catmullRomOpen.js\";\nexport {default as curveCatmullRom} from \"./curve/catmullRom.js\";\nexport {default as curveLinearClosed} from \"./curve/linearClosed.js\";\nexport {default as curveLinear} from \"./curve/linear.js\";\nexport {monotoneX as curveMonotoneX, monotoneY as curveMonotoneY} from \"./curve/monotone.js\";\nexport {default as curveNatural} from \"./curve/natural.js\";\nexport {default as curveStep, stepAfter as curveStepAfter, stepBefore as curveStepBefore} from \"./curve/step.js\";\n\nexport {default as stack} from \"./stack.js\";\nexport {default as stackOffsetExpand} from \"./offset/expand.js\";\nexport {default as stackOffsetDiverging} from \"./offset/diverging.js\";\nexport {default as stackOffsetNone} from \"./offset/none.js\";\nexport {default as stackOffsetSilhouette} from \"./offset/silhouette.js\";\nexport {default as stackOffsetWiggle} from \"./offset/wiggle.js\";\nexport {default as stackOrderAppearance} from \"./order/appearance.js\";\nexport {default as stackOrderAscending} from \"./order/ascending.js\";\nexport {default as stackOrderDescending} from \"./order/descending.js\";\nexport {default as stackOrderInsideOut} from \"./order/insideOut.js\";\nexport {default as stackOrderNone} from \"./order/none.js\";\nexport {default as stackOrderReverse} from \"./order/reverse.js\";\n", "export default x => () => x;\n", "export default function ZoomEvent(type, {\n  sourceEvent,\n  target,\n  transform,\n  dispatch\n}) {\n  Object.defineProperties(this, {\n    type: {value: type, enumerable: true, configurable: true},\n    sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n    target: {value: target, enumerable: true, configurable: true},\n    transform: {value: transform, enumerable: true, configurable: true},\n    _: {value: dispatch}\n  });\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  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "export function nopropagation(event) {\n  event.stopImmediatePropagation();\n}\n\nexport default function(event) {\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 {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n  return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n  var e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"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      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchfirst,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0,\n      tapDistance = 10;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled, {passive: false})\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(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point, event) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point, event);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n          .event(event)\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, p, event) {\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    }, p, event);\n  };\n\n  zoom.scaleTo = function(selection, k, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\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    }, p, event);\n  };\n\n  zoom.translateBy = function(selection, x, y, event) {\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    }, null, event);\n  };\n\n  zoom.translateTo = function(selection, x, y, p, event) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[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    }, p, event);\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, point, event) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args).event(event),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\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, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.sourceEvent = null;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    event: function(event) {\n      if (event) this.sourceEvent = event;\n      return this;\n    },\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\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        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new ZoomEvent(type, {\n          sourceEvent: this.sourceEvent,\n          target: zoom,\n          type,\n          transform: this.that.__zoom,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function wheeled(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, args).event(event),\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 = pointer(event);\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\u2019t 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(event);\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(event, ...args) {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var currentTarget = event.currentTarget,\n        g = gesture(this, args, true).event(event),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = pointer(event, currentTarget),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation(event);\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved(event) {\n      noevent(event);\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.event(event)\n       .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped(event) {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent(event);\n      g.event(event).end();\n    }\n  }\n\n  function dblclicked(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, 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, args), translateExtent);\n\n    noevent(event);\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n    else select(this).call(zoom.transform, t1, p0, event);\n  }\n\n  function touchstarted(event, ...args) {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, args, event.changedTouches.length === n).event(event),\n        started, i, t, p;\n\n    nopropagation(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent(event);\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = pointer(t, this);\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\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended(event, ...args) {\n    if (!this.__zooming) return;\n    var g = gesture(this, args).event(event),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation(event);\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 {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        t = pointer(t, this);\n        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n          var p = select(this).on(\"dblclick.zoom\");\n          if (p) p.apply(this, arguments);\n        }\n      }\n    }\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  zoom.tapDistance = function(_) {\n    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n  };\n\n  return zoom;\n}\n", "export {default as zoom} from \"./zoom.js\";\nexport {default as zoomTransform, identity as zoomIdentity, Transform as ZoomTransform} from \"./transform.js\";\n", "export * from \"d3-array\";\nexport * from \"d3-axis\";\nexport * from \"d3-brush\";\nexport * from \"d3-chord\";\nexport * from \"d3-color\";\nexport * from \"d3-contour\";\nexport * from \"d3-delaunay\";\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-zoom\";\n", "// https://github.com/johnwalley/d3-simple-slider v2.0.0 Copyright 2023 John Walley\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-transition'), require('d3-axis'), require('d3-array'), require('d3-scale'), require('d3-selection'), require('d3-dispatch'), require('d3-drag'), require('d3-ease')) :\ntypeof define === 'function' && define.amd ? define(['exports', 'd3-transition', 'd3-axis', 'd3-array', 'd3-scale', 'd3-selection', 'd3-dispatch', 'd3-drag', 'd3-ease'], factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3, global.d3));\n}(this, (function (exports, d3Transition, d3Axis, d3Array, d3Scale, selection, d3Dispatch, d3Drag, d3Ease) { 'use strict';\n\nfunction _interopNamespace(e) {\nif (e && e.__esModule) return e;\nvar n = Object.create(null);\nif (e) {\nObject.keys(e).forEach(function (k) {\nif (k !== 'default') {\nvar d = Object.getOwnPropertyDescriptor(e, k);\nObject.defineProperty(n, k, d.get ? d : {\nenumerable: true,\nget: function () {\nreturn e[k];\n}\n});\n}\n});\n}\nn['default'] = e;\nreturn Object.freeze(n);\n}\n\nvar selection__namespace = /*#__PURE__*/_interopNamespace(selection);\n\nvar prop = 'event';\n\nfunction adaptListener(listener) {\n  var isv6 = !(prop in selection__namespace);\n\n  return function (a, b) {\n    if (isv6) {\n      // d3@v6\n      listener.call(this, a, b);\n    } else {\n      // d3@v5\n      listener.call(this, selection__namespace[prop], a);\n    }\n  };\n}\n\nvar UPDATE_DURATION = 200;\nvar SLIDER_END_PADDING = 8;\nvar KEYBOARD_NUMBER_STEPS = 100;\n\nvar top = 1;\nvar right = 2;\nvar bottom = 3;\nvar left = 4;\n\nfunction translateX(x) {\n  return 'translate(' + x + ',0)';\n}\n\nfunction translateY(y) {\n  return 'translate(0,' + y + ')';\n}\n\nfunction slider(orientation, scale) {\n  scale = typeof scale !== 'undefined' ? scale.copy() : null;\n\n  var value = [0];\n  var defaultValue = [0];\n  var domain = [0, 10];\n  var width = 100;\n  var height = 100;\n  var displayValue = true;\n  var handle = 'M-5.5,-5.5v10l6,5.5l6,-5.5v-10z';\n  var step = null;\n  var tickValues = null;\n  var tickPadding = 3;\n  var marks = null;\n  var tickFormat = null;\n  var ticks = null;\n  var displayFormat = null;\n  var fill = null;\n\n  var listeners = d3Dispatch.dispatch('onchange', 'start', 'end', 'drag');\n\n  var selection$1 = null;\n  var identityClamped = null;\n  var handleIndex = null;\n\n  var k = orientation === top || orientation === left ? -1 : 1;\n  var j = orientation === left || orientation === right ? -1 : 1;\n  var x = orientation === left || orientation === right ? 'y' : 'x';\n  var y = orientation === left || orientation === right ? 'x' : 'y';\n\n  var transformAlong =\n    orientation === top || orientation === bottom ? translateX : translateY;\n\n  var transformAcross =\n    orientation === top || orientation === bottom ? translateY : translateX;\n\n  var axisFunction = null;\n\n  switch (orientation) {\n    case top:\n      axisFunction = d3Axis.axisTop;\n      break;\n    case right:\n      axisFunction = d3Axis.axisRight;\n      break;\n    case bottom:\n      axisFunction = d3Axis.axisBottom;\n      break;\n    case left:\n      axisFunction = d3Axis.axisLeft;\n      break;\n  }\n\n  var handleSelection = null;\n  var fillSelection = null;\n  var textSelection = null;\n\n  if (scale) {\n    domain = [d3Array.min(scale.domain()), d3Array.max(scale.domain())];\n\n    if (orientation === top || orientation === bottom) {\n      width = d3Array.max(scale.range()) - d3Array.min(scale.range());\n    } else {\n      height = d3Array.max(scale.range()) - d3Array.min(scale.range());\n    }\n\n    scale = scale.clamp(true);\n  }\n\n  function slider(context) {\n    selection$1 = context.selection ? context.selection() : context;\n\n    if (!scale) {\n      scale = domain[0] instanceof Date ? d3Scale.scaleTime() : d3Scale.scaleLinear();\n\n      scale = scale\n        .domain(domain)\n        .range(\n          orientation === top || orientation === bottom\n            ? [0, width]\n            : [height, 0]\n        )\n        .clamp(true);\n    }\n\n    identityClamped = d3Scale.scaleLinear()\n      .range(scale.range())\n      .domain(scale.range())\n      .clamp(true);\n\n    // Ensure value is valid\n    value = value.map(function (d) {\n      return d3Scale.scaleLinear().range(domain).domain(domain).clamp(true)(d);\n    });\n\n    tickFormat = tickFormat || scale.tickFormat();\n    displayFormat = displayFormat || tickFormat || scale.tickFormat();\n\n    var axis = selection$1.selectAll('.axis').data([null]);\n\n    axis\n      .enter()\n      .append('g')\n      .attr('transform', transformAcross(k * 7))\n      .attr('class', 'axis');\n\n    var sliderSelection = selection$1.selectAll('.slider').data([null]);\n\n    var sliderEnter = sliderSelection\n      .enter()\n      .append('g')\n      .attr('class', 'slider')\n      .attr(\n        'cursor',\n        orientation === top || orientation === bottom\n          ? 'ew-resize'\n          : 'ns-resize'\n      )\n      .call(\n        d3Drag.drag()\n          .on('start', adaptListener(dragstarted))\n          .on('drag', adaptListener(dragged))\n          .on('end', adaptListener(dragended))\n      );\n\n    sliderEnter\n      .append('line')\n      .attr('class', 'track')\n      .attr(x + '1', scale.range()[0] - j * SLIDER_END_PADDING)\n      .attr('stroke', '#bbb')\n      .attr('stroke-width', 6)\n      .attr('stroke-linecap', 'round');\n\n    sliderEnter\n      .append('line')\n      .attr('class', 'track-inset')\n      .attr(x + '1', scale.range()[0] - j * SLIDER_END_PADDING)\n      .attr('stroke', '#eee')\n      .attr('stroke-width', 4)\n      .attr('stroke-linecap', 'round');\n\n    if (fill) {\n      sliderEnter\n        .append('line')\n        .attr('class', 'track-fill')\n        .attr(\n          x + '1',\n          value.length === 1\n            ? scale.range()[0] - j * SLIDER_END_PADDING\n            : scale(value[0])\n        )\n        .attr('stroke', fill)\n        .attr('stroke-width', 4)\n        .attr('stroke-linecap', 'round');\n    }\n\n    sliderEnter\n      .append('line')\n      .attr('class', 'track-overlay')\n      .attr(x + '1', scale.range()[0] - j * SLIDER_END_PADDING)\n      .attr('stroke', 'transparent')\n      .attr('stroke-width', 40)\n      .attr('stroke-linecap', 'round')\n      .merge(sliderSelection.select('.track-overlay'));\n\n    handleSelection = sliderEnter.selectAll('.parameter-value').data(\n      value.map(function (d, i) {\n        return { value: d, index: i };\n      })\n    );\n\n    var handleEnter = handleSelection\n      .enter()\n      .append('g')\n      .attr('class', 'parameter-value')\n      .attr('transform', function (d) {\n        return transformAlong(scale(d.value));\n      })\n      .attr('font-family', 'sans-serif')\n      .attr(\n        'text-anchor',\n        orientation === right\n          ? 'start'\n          : orientation === left\n          ? 'end'\n          : 'middle'\n      );\n\n    handleEnter\n      .append('path')\n      .attr('transform', 'rotate(' + (orientation + 1) * 90 + ')')\n      .attr('d', handle)\n      .attr('class', 'handle')\n      .attr('aria-label', 'handle')\n      .attr('aria-valuemax', domain[1])\n      .attr('aria-valuemin', domain[0])\n      .attr('aria-valuenow', function (d) {\n        return d.value;\n      })\n      .attr(\n        'aria-orientation',\n        orientation === left || orientation === right\n          ? 'vertical'\n          : 'horizontal'\n      )\n      .attr('focusable', 'true')\n      .attr('tabindex', 0)\n      .attr('fill', 'white')\n      .attr('stroke', '#777')\n      .on(\n        'keydown',\n        adaptListener(function (event, datum) {\n          var change = step || (domain[1] - domain[0]) / KEYBOARD_NUMBER_STEPS;\n\n          var index = marks\n            ? d3Array.scan(\n                marks.map(function (d) {\n                  return Math.abs(value[datum.index] - d);\n                })\n              )\n            : null;\n\n          // TODO: Don't need to loop over value because we know which element needs to change\n          function newValue(adjustedValue) {\n            return value.map(function (d, j) {\n              if (value.length === 2) {\n                return j === datum.index\n                  ? datum.index === 0\n                    ? Math.min(adjustedValue, alignedValue(value[1]))\n                    : Math.max(adjustedValue, alignedValue(value[0]))\n                  : d;\n              } else {\n                return j === datum.index ? adjustedValue : d;\n              }\n            });\n          }\n\n          switch (event.key) {\n            case 'ArrowLeft':\n            case 'ArrowDown':\n              if (marks) {\n                slider.value(newValue(marks[Math.max(0, index - 1)]));\n              } else {\n                slider.value(newValue(+value[datum.index] - change));\n              }\n\n              event.preventDefault();\n              break;\n            case 'PageDown':\n              if (marks) {\n                slider.value(newValue(marks[Math.max(0, index - 2)]));\n              } else {\n                slider.value(newValue(+value[datum.index] - 2 * change));\n              }\n\n              event.preventDefault();\n              break;\n            case 'ArrowRight':\n            case 'ArrowUp':\n              if (marks) {\n                slider.value(\n                  newValue(marks[Math.min(marks.length - 1, index + 1)])\n                );\n              } else {\n                slider.value(newValue(+value[datum.index] + change));\n              }\n\n              event.preventDefault();\n              break;\n            case 'PageUp':\n              if (marks) {\n                slider.value(\n                  newValue(marks[Math.min(marks.length - 1, index + 2)])\n                );\n              } else {\n                slider.value(newValue(+value[datum.index] + 2 * change));\n              }\n\n              event.preventDefault();\n              break;\n            case 'Home':\n              slider.value(newValue(domain[0]));\n              event.preventDefault();\n              break;\n            case 'End':\n              slider.value(newValue(domain[1]));\n              event.preventDefault();\n              break;\n          }\n        })\n      );\n\n    if (displayValue) {\n      handleEnter\n        .append('text')\n        .attr('font-size', 10) // TODO: Remove coupling to font-size in d3-axis\n        .attr(y, k * (24 + tickPadding))\n        .attr(\n          'dy',\n          orientation === top\n            ? '0em'\n            : orientation === bottom\n            ? '.71em'\n            : '.32em'\n        )\n        .attr('transform', value.length > 1 ? 'translate(0,0)' : null)\n        .text(function (d, idx) {\n          return displayFormat(value[idx]);\n        });\n    }\n\n    context\n      .select('.track')\n      .attr(x + '2', scale.range()[1] + j * SLIDER_END_PADDING);\n\n    context\n      .select('.track-inset')\n      .attr(x + '2', scale.range()[1] + j * SLIDER_END_PADDING);\n\n    if (fill) {\n      context\n        .select('.track-fill')\n        .attr(x + '2', value.length === 1 ? scale(value[0]) : scale(value[1]));\n    }\n\n    context\n      .select('.track-overlay')\n      .attr(x + '2', scale.range()[1] + j * SLIDER_END_PADDING);\n\n    context\n      .select('.axis')\n      .call(\n        axisFunction(scale)\n          .tickFormat(tickFormat)\n          .ticks(ticks)\n          .tickValues(tickValues)\n          .tickPadding(tickPadding)\n      );\n\n    // https://bl.ocks.org/mbostock/4323929\n    selection$1.select('.axis').select('.domain').remove();\n\n    context.select('.axis').attr('transform', transformAcross(k * 7));\n\n    context\n      .selectAll('.axis text')\n      .attr('fill', '#aaa')\n      .attr(y, k * (17 + tickPadding))\n      .attr(\n        'dy',\n        orientation === top ? '0em' : orientation === bottom ? '.71em' : '.32em'\n      )\n      .attr(\n        'text-anchor',\n        orientation === right\n          ? 'start'\n          : orientation === left\n          ? 'end'\n          : 'middle'\n      );\n\n    context.selectAll('.axis line').attr('stroke', '#aaa');\n\n    context.selectAll('.parameter-value').attr('transform', function (d) {\n      return transformAlong(scale(d.value));\n    });\n\n    fadeTickText();\n\n    function computeDragNewValue(pos) {\n      var adjustedValue = alignedValue(scale.invert(pos));\n      return value.map(function (d, i) {\n        if (value.length === 2) {\n          return i === handleIndex\n            ? handleIndex === 0\n              ? Math.min(adjustedValue, alignedValue(value[1]))\n              : Math.max(adjustedValue, alignedValue(value[0]))\n            : d;\n        } else {\n          return i === handleIndex ? adjustedValue : d;\n        }\n      });\n    }\n\n    function dragstarted(event) {\n      selection.select(this).classed('active', true);\n\n      var pos = identityClamped(\n        orientation === bottom || orientation === top ? event.x : event.y\n      );\n\n      // Handle cases where both handles are at the same end of the slider\n      if (value[0] === domain[0] && value[1] === domain[0]) {\n        handleIndex = 1;\n      } else if (value[0] === domain[1] && value[1] === domain[1]) {\n        handleIndex = 0;\n      } else {\n        handleIndex = d3Array.scan(\n          value.map(function (d) {\n            return Math.abs(d - alignedValue(scale.invert(pos)));\n          })\n        );\n      }\n\n      var newValue = value.map(function (d, i) {\n        return i === handleIndex ? alignedValue(scale.invert(pos)) : d;\n      });\n\n      updateHandle(newValue);\n      listeners.call(\n        'start',\n        sliderSelection,\n        newValue.length === 1 ? newValue[0] : newValue\n      );\n      updateValue(newValue, true);\n    }\n\n    function dragged(event) {\n      var pos = identityClamped(\n        orientation === bottom || orientation === top ? event.x : event.y\n      );\n      var newValue = computeDragNewValue(pos);\n\n      updateHandle(newValue);\n      listeners.call(\n        'drag',\n        sliderSelection,\n        newValue.length === 1 ? newValue[0] : newValue\n      );\n      updateValue(newValue, true);\n    }\n\n    function dragended(event) {\n      selection.select(this).classed('active', false);\n\n      var pos = identityClamped(\n        orientation === bottom || orientation === top ? event.x : event.y\n      );\n      var newValue = computeDragNewValue(pos);\n\n      updateHandle(newValue);\n      listeners.call(\n        'end',\n        sliderSelection,\n        newValue.length === 1 ? newValue[0] : newValue\n      );\n      updateValue(newValue, true);\n\n      handleIndex = null;\n    }\n\n    textSelection = selection$1.selectAll('.parameter-value text');\n    fillSelection = selection$1.select('.track-fill');\n  }\n\n  function fadeTickText() {\n    if (selection$1) {\n      if (displayValue) {\n        var indices = [];\n        value.forEach(function (val) {\n          var distances = [];\n\n          selection$1.selectAll('.axis .tick').each(function (d) {\n            distances.push(Math.abs(d - val));\n          });\n\n          indices.push(d3Array.scan(distances));\n        });\n\n        selection$1\n          .selectAll('.axis .tick text')\n          .attr('opacity', function (d, i) {\n            return ~indices.indexOf(i) ? 0 : 1;\n          });\n\n        if (textSelection && value.length > 1) {\n          var rect;\n          var shift;\n          var pos = [];\n          var size = [];\n\n          textSelection.nodes().forEach(function (d, i) {\n            rect = d.getBoundingClientRect();\n\n            shift = d.getAttribute('transform').split(/[()]/)[1].split(',')[\n              x === 'x' ? 0 : 1\n            ];\n\n            pos[i] = rect[x] - parseFloat(shift);\n            size[i] = rect[x === 'x' ? 'width' : 'height'];\n          });\n\n          if (x === 'x') {\n            shift = Math.max(0, (pos[0] + size[0] - pos[1]) / 2);\n\n            textSelection.attr('transform', function (d, i) {\n              return 'translate(' + (i === 1 ? shift : -shift) + ',0)';\n            });\n          } else {\n            shift = Math.max(0, (pos[1] + size[1] - pos[0]) / 2);\n\n            textSelection.attr('transform', function (d, i) {\n              return 'translate(0,' + (i === 1 ? -shift : shift) + ')';\n            });\n          }\n        }\n      }\n    }\n  }\n\n  function alignedValue(newValue) {\n    if (marks) {\n      var index = d3Array.scan(\n        marks.map(function (d) {\n          return Math.abs(newValue - d);\n        })\n      );\n\n      return marks[index];\n    }\n\n    if (step) {\n      var valueModStep = (newValue - domain[0]) % step;\n      var alignValue = newValue - valueModStep;\n\n      if (valueModStep * 2 > step) {\n        alignValue += step;\n      }\n\n      return newValue instanceof Date ? new Date(alignValue) : alignValue;\n    }\n\n    return newValue;\n  }\n\n  function updateValue(newValue, notifyListener) {\n    if (\n      value[0] !== newValue[0] ||\n      (value.length > 1 && value[1] !== newValue[1])\n    ) {\n      value = newValue;\n\n      if (notifyListener) {\n        listeners.call(\n          'onchange',\n          slider,\n          newValue.length === 1 ? newValue[0] : newValue\n        );\n      }\n\n      fadeTickText();\n    }\n  }\n\n  function updateHandle(newValue, animate) {\n    if (selection$1) {\n      animate = typeof animate !== 'undefined' ? animate : false;\n\n      if (animate) {\n        selection$1\n          .selectAll('.parameter-value')\n          .data(\n            newValue.map(function (d, i) {\n              return { value: d, index: i };\n            })\n          )\n          .transition()\n          .ease(d3Ease.easeQuadOut)\n          .duration(UPDATE_DURATION)\n          .attr('transform', function (d) {\n            return transformAlong(scale(d.value));\n          })\n          .select('.handle')\n          .attr('aria-valuenow', function (d) {\n            return d.value;\n          });\n\n        if (fill) {\n          fillSelection\n            .transition()\n            .ease(d3Ease.easeQuadOut)\n            .duration(UPDATE_DURATION)\n            .attr(\n              x + '1',\n              value.length === 1\n                ? scale.range()[0] - k * SLIDER_END_PADDING\n                : scale(newValue[0])\n            )\n            .attr(\n              x + '2',\n              value.length === 1 ? scale(newValue[0]) : scale(newValue[1])\n            );\n        }\n      } else {\n        selection$1\n          .selectAll('.parameter-value')\n          .data(\n            newValue.map(function (d, i) {\n              return { value: d, index: i };\n            })\n          )\n          .attr('transform', function (d) {\n            return transformAlong(scale(d.value));\n          })\n          .select('.handle')\n          .attr('aria-valuenow', function (d) {\n            return d.value;\n          });\n\n        if (fill) {\n          fillSelection\n            .attr(\n              x + '1',\n              value.length === 1\n                ? scale.range()[0] - k * SLIDER_END_PADDING\n                : scale(newValue[0])\n            )\n            .attr(\n              x + '2',\n              value.length === 1 ? scale(newValue[0]) : scale(newValue[1])\n            );\n        }\n      }\n\n      if (displayValue) {\n        textSelection.text(function (d, idx) {\n          return displayFormat(newValue[idx]);\n        });\n      }\n    }\n  }\n\n  slider.min = function (_) {\n    if (!arguments.length) return domain[0];\n    domain[0] = _;\n\n    if (scale) {\n      scale.domain(domain);\n    }\n\n    return slider;\n  };\n\n  slider.max = function (_) {\n    if (!arguments.length) return domain[1];\n    domain[1] = _;\n\n    if (scale) {\n      scale.domain(domain);\n    }\n\n    return slider;\n  };\n\n  slider.domain = function (_) {\n    if (!arguments.length) return domain;\n    domain = _;\n\n    if (scale) {\n      scale.domain(domain);\n    }\n\n    return slider;\n  };\n\n  slider.width = function (_) {\n    if (!arguments.length) return width;\n    width = _;\n\n    if (scale) {\n      scale.range([scale.range()[0], scale.range()[0] + width]);\n    }\n\n    return slider;\n  };\n\n  slider.height = function (_) {\n    if (!arguments.length) return height;\n    height = _;\n\n    if (scale) {\n      scale.range([scale.range()[0], scale.range()[0] + height]);\n    }\n\n    return slider;\n  };\n\n  slider.tickFormat = function (_) {\n    if (!arguments.length) return tickFormat;\n    tickFormat = _;\n    return slider;\n  };\n\n  slider.displayFormat = function (_) {\n    if (!arguments.length) return displayFormat;\n    displayFormat = _;\n    return slider;\n  };\n\n  slider.ticks = function (_) {\n    if (!arguments.length) return ticks;\n    ticks = _;\n    return slider;\n  };\n\n  slider.value = function (_) {\n    if (!arguments.length) {\n      if (value.length === 1) {\n        return value[0];\n      }\n\n      return value;\n    }\n\n    var toArray = Array.isArray(_) ? _ : [_];\n    toArray.sort(function (a, b) {\n      return a - b;\n    });\n\n    if (scale) {\n      var pos = toArray.map(scale).map(identityClamped);\n      var newValue = pos.map(scale.invert).map(alignedValue);\n\n      updateHandle(newValue, true);\n      updateValue(newValue, true);\n    } else {\n      value = toArray;\n    }\n\n    return slider;\n  };\n\n  slider.silentValue = function (_) {\n    if (!arguments.length) {\n      if (value.length === 1) {\n        return value[0];\n      }\n\n      return value;\n    }\n\n    var toArray = Array.isArray(_) ? _ : [_];\n    toArray.sort(function (a, b) {\n      return a - b;\n    });\n\n    if (scale) {\n      var pos = toArray.map(scale).map(identityClamped);\n      var newValue = pos.map(scale.invert).map(alignedValue);\n\n      updateHandle(newValue, false);\n      updateValue(newValue, false);\n    } else {\n      value = toArray;\n    }\n\n    return slider;\n  };\n\n  slider.default = function (_) {\n    if (!arguments.length) {\n      if (defaultValue.length === 1) {\n        return defaultValue[0];\n      }\n\n      return defaultValue;\n    }\n\n    var toArray = Array.isArray(_) ? _ : [_];\n\n    toArray.sort(function (a, b) {\n      return a - b;\n    });\n\n    defaultValue = toArray;\n    value = toArray;\n    return slider;\n  };\n\n  slider.step = function (_) {\n    if (!arguments.length) return step;\n    step = _;\n    return slider;\n  };\n\n  slider.tickValues = function (_) {\n    if (!arguments.length) return tickValues;\n    tickValues = _;\n    return slider;\n  };\n\n  slider.tickPadding = function (_) {\n    if (!arguments.length) return tickPadding;\n    tickPadding = _;\n    return slider;\n  };\n\n  slider.marks = function (_) {\n    if (!arguments.length) return marks;\n    marks = _;\n    return slider;\n  };\n\n  slider.handle = function (_) {\n    if (!arguments.length) return handle;\n    handle = _;\n    return slider;\n  };\n\n  slider.displayValue = function (_) {\n    if (!arguments.length) return displayValue;\n    displayValue = _;\n    return slider;\n  };\n\n  slider.fill = function (_) {\n    if (!arguments.length) return fill;\n    fill = _;\n    return slider;\n  };\n\n  slider.on = function () {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? slider : value;\n  };\n\n  return slider;\n}\n\nfunction sliderHorizontal(scale) {\n  return slider(bottom, scale);\n}\n\nfunction sliderVertical(scale) {\n  return slider(left, scale);\n}\n\nfunction sliderTop(scale) {\n  return slider(top, scale);\n}\n\nfunction sliderRight(scale) {\n  return slider(right, scale);\n}\n\nfunction sliderBottom(scale) {\n  return slider(bottom, scale);\n}\n\nfunction sliderLeft(scale) {\n  return slider(left, scale);\n}\n\nexports.sliderBottom = sliderBottom;\nexports.sliderHorizontal = sliderHorizontal;\nexports.sliderLeft = sliderLeft;\nexports.sliderRight = sliderRight;\nexports.sliderTop = sliderTop;\nexports.sliderVertical = sliderVertical;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "module.exports = {\n\n  d3_identity: function (d) {\n    return d;\n  },\n\n  d3_mergeLabels: function (gen, labels) {\n\n      if(labels.length === 0) return gen;\n\n      gen = (gen) ? gen : [];\n\n      var i = labels.length;\n      for (; i < gen.length; i++) {\n        labels.push(gen[i]);\n      }\n      return labels;\n    },\n\n  d3_linearLegend: function (scale, cells, labelFormat) {\n    var data = [];\n\n    if (cells.length > 1){\n      data = cells;\n\n    } else {\n      var domain = scale.domain(),\n      increment = (domain[domain.length - 1] - domain[0])/(cells - 1),\n      i = 0;\n\n      for (; i < cells; i++){\n        data.push(domain[0] + i*increment);\n      }\n    }\n\n    var labels = data.map(labelFormat);\n\n    return {data: data,\n            labels: labels,\n            feature: function(d){ return scale(d); }};\n  },\n\n  d3_quantLegend: function (scale, labelFormat, labelDelimiter) {\n    var labels = scale.range().map(function(d){\n      var invert = scale.invertExtent(d),\n      a = labelFormat(invert[0]),\n      b = labelFormat(invert[1]);\n\n      // if (( (a) && (a.isNan()) && b){\n      //   console.log(\"in initial statement\")\n        return labelFormat(invert[0]) + \" \" + labelDelimiter + \" \" + labelFormat(invert[1]);\n      // } else if (a || b) {\n      //   console.log('in else statement')\n      //   return (a) ? a : b;\n      // }\n\n    });\n\n    return {data: scale.range(),\n            labels: labels,\n            feature: this.d3_identity\n          };\n  },\n\n  d3_ordinalLegend: function (scale) {\n    return {data: scale.domain(),\n            labels: scale.domain(),\n            feature: function(d){ return scale(d); }};\n  },\n\n  d3_drawShapes: function (shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) {\n    if (shape === \"rect\"){\n        shapes.attr(\"height\", shapeHeight).attr(\"width\", shapeWidth);\n\n    } else if (shape === \"circle\") {\n        shapes.attr(\"r\", shapeRadius)//.attr(\"cx\", shapeRadius).attr(\"cy\", shapeRadius);\n\n    } else if (shape === \"line\") {\n        shapes.attr(\"x1\", 0).attr(\"x2\", shapeWidth).attr(\"y1\", 0).attr(\"y2\", 0);\n\n    } else if (shape === \"path\") {\n      shapes.attr(\"d\", path);\n    }\n  },\n\n  d3_addText: function (svg, enter, labels, classPrefix){\n    enter.append(\"text\").attr(\"class\", classPrefix + \"label\");\n    svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\")\n      .data(labels).text(this.d3_identity);\n  },\n\n  d3_calcType: function (scale, ascending, cells, labels, labelFormat, labelDelimiter){\n    var type = scale.ticks ?\n            this.d3_linearLegend(scale, cells, labelFormat) : scale.invertExtent ?\n            this.d3_quantLegend(scale, labelFormat, labelDelimiter) : this.d3_ordinalLegend(scale);\n\n    type.labels = this.d3_mergeLabels(type.labels, labels);\n\n    if (ascending) {\n      type.labels = this.d3_reverse(type.labels);\n      type.data = this.d3_reverse(type.data);\n    }\n\n    return type;\n  },\n\n  d3_reverse: function(arr) {\n    var mirror = [];\n    for (var i = 0, l = arr.length; i < l; i++) {\n      mirror[i] = arr[l-i-1];\n    }\n    return mirror;\n  },\n\n  d3_placement: function (orient, cell, cellTrans, text, textTrans, labelAlign) {\n    cell.attr(\"transform\", cellTrans);\n    text.attr(\"transform\", textTrans);\n    if (orient === \"horizontal\"){\n      text.style(\"text-anchor\", labelAlign);\n    }\n  },\n\n  d3_addEvents: function(cells, dispatcher){\n    var _ = this;\n\n      cells.on(\"mouseover.legend\", function (d) { _.d3_cellOver(dispatcher, d, this); })\n          .on(\"mouseout.legend\", function (d) { _.d3_cellOut(dispatcher, d, this); })\n          .on(\"click.legend\", function (d) { _.d3_cellClick(dispatcher, d, this); });\n  },\n\n  d3_cellOver: function(cellDispatcher, d, obj){\n    cellDispatcher.cellover.call(obj, d);\n  },\n\n  d3_cellOut: function(cellDispatcher, d, obj){\n    cellDispatcher.cellout.call(obj, d);\n  },\n\n  d3_cellClick: function(cellDispatcher, d, obj){\n    cellDispatcher.cellclick.call(obj, d);\n  },\n\n  d3_title: function(svg, cellsSvg, title, classPrefix){\n    if (title !== \"\"){\n\n      var titleText = svg.selectAll('text.' + classPrefix + 'legendTitle');\n\n      titleText.data([title])\n        .enter()\n        .append('text')\n        .attr('class', classPrefix + 'legendTitle');\n\n        svg.selectAll('text.' + classPrefix + 'legendTitle')\n            .text(title)\n\n      var yOffset = svg.select('.' + classPrefix + 'legendTitle')\n          .map(function(d) { return d[0].getBBox().height})[0],\n      xOffset = -cellsSvg.map(function(d) { return d[0].getBBox().x})[0];\n\n      cellsSvg.attr('transform', 'translate(' + xOffset + ',' + (yOffset + 10) + ')');\n\n    }\n  }\n}\n", "var helper = require('./legend');\n\nmodule.exports = function(){\n\n  var scale = d3.scale.linear(),\n    shape = \"rect\",\n    shapeWidth = 15,\n    shapeHeight = 15,\n    shapeRadius = 10,\n    shapePadding = 2,\n    cells = [5],\n    labels = [],\n    classPrefix = \"\",\n    useClass = false,\n    title = \"\",\n    labelFormat = d3.format(\".01f\"),\n    labelOffset = 10,\n    labelAlign = \"middle\",\n    labelDelimiter = \"to\",\n    orient = \"vertical\",\n    ascending = false,\n    path,\n    legendDispatcher = d3.dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n    function legend(svg){\n\n      var type = helper.d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter),\n        legendG = svg.selectAll('g').data([scale]);\n\n      legendG.enter().append('g').attr('class', classPrefix + 'legendCells');\n\n\n      var cell = legendG.selectAll(\".\" + classPrefix + \"cell\").data(type.data),\n        cellEnter = cell.enter().append(\"g\", \".cell\").attr(\"class\", classPrefix + \"cell\").style(\"opacity\", 1e-6),\n        shapeEnter = cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\"),\n        shapes = cell.select(\"g.\" + classPrefix + \"cell \" + shape);\n\n      //add event handlers\n      helper.d3_addEvents(cellEnter, legendDispatcher);\n\n      cell.exit().transition().style(\"opacity\", 0).remove();\n\n      helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path);\n\n      helper.d3_addText(legendG, cellEnter, type.labels, classPrefix)\n\n      // sets placement\n      var text = cell.select(\"text\"),\n        shapeSize = shapes[0].map( function(d){ return d.getBBox(); });\n\n      //sets scale\n      //everything is fill except for line which is stroke,\n      if (!useClass){\n        if (shape == \"line\"){\n          shapes.style(\"stroke\", type.feature);\n        } else {\n          shapes.style(\"fill\", type.feature);\n        }\n      } else {\n        shapes.attr(\"class\", function(d){ return classPrefix + \"swatch \" + type.feature(d); });\n      }\n\n      var cellTrans,\n      textTrans,\n      textAlign = (labelAlign == \"start\") ? 0 : (labelAlign == \"middle\") ? 0.5 : 1;\n\n      //positions cells and text\n      if (orient === \"vertical\"){\n        cellTrans = function(d,i) { return \"translate(0, \" + (i * (shapeSize[i].height + shapePadding)) + \")\"; };\n        textTrans = function(d,i) { return \"translate(\" + (shapeSize[i].width + shapeSize[i].x +\n          labelOffset) + \",\" + (shapeSize[i].y + shapeSize[i].height/2 + 5) + \")\"; };\n\n      } else if (orient === \"horizontal\"){\n        cellTrans = function(d,i) { return \"translate(\" + (i * (shapeSize[i].width + shapePadding)) + \",0)\"; }\n        textTrans = function(d,i) { return \"translate(\" + (shapeSize[i].width*textAlign  + shapeSize[i].x) +\n          \",\" + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + \")\"; };\n      }\n\n      helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n      helper.d3_title(svg, legendG, title, classPrefix);\n\n      cell.transition().style(\"opacity\", 1);\n\n    }\n\n\n\n  legend.scale = function(_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function(_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2 ){\n      cells = _;\n    }\n    return legend;\n  };\n\n  legend.shape = function(_, d) {\n    if (!arguments.length) return shape;\n    if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" || (_ == \"path\" && (typeof d === 'string')) ){\n      shape = _;\n      path = d;\n    }\n    return legend;\n  };\n\n  legend.shapeWidth = function(_) {\n    if (!arguments.length) return shapeWidth;\n    shapeWidth = +_;\n    return legend;\n  };\n\n  legend.shapeHeight = function(_) {\n    if (!arguments.length) return shapeHeight;\n    shapeHeight = +_;\n    return legend;\n  };\n\n  legend.shapeRadius = function(_) {\n    if (!arguments.length) return shapeRadius;\n    shapeRadius = +_;\n    return legend;\n  };\n\n  legend.shapePadding = function(_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function(_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function(_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.labelFormat = function(_) {\n    if (!arguments.length) return labelFormat;\n    labelFormat = _;\n    return legend;\n  };\n\n  legend.labelOffset = function(_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function(_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.useClass = function(_) {\n    if (!arguments.length) return useClass;\n    if (_ === true || _ === false){\n      useClass = _;\n    }\n    return legend;\n  };\n\n  legend.orient = function(_){\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function(_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function(_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function(_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  d3.rebind(legend, legendDispatcher, \"on\");\n\n  return legend;\n\n};\n", "var helper = require('./legend');\n\nmodule.exports =  function(){\n\n  var scale = d3.scale.linear(),\n    shape = \"rect\",\n    shapeWidth = 15,\n    shapePadding = 2,\n    cells = [5],\n    labels = [],\n    useStroke = false,\n    classPrefix = \"\",\n    title = \"\",\n    labelFormat = d3.format(\".01f\"),\n    labelOffset = 10,\n    labelAlign = \"middle\",\n    labelDelimiter = \"to\",\n    orient = \"vertical\",\n    ascending = false,\n    path,\n    legendDispatcher = d3.dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n    function legend(svg){\n\n      var type = helper.d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter),\n        legendG = svg.selectAll('g').data([scale]);\n\n      legendG.enter().append('g').attr('class', classPrefix + 'legendCells');\n\n\n      var cell = legendG.selectAll(\".\" + classPrefix + \"cell\").data(type.data),\n        cellEnter = cell.enter().append(\"g\", \".cell\").attr(\"class\", classPrefix + \"cell\").style(\"opacity\", 1e-6),\n        shapeEnter = cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\"),\n        shapes = cell.select(\"g.\" + classPrefix + \"cell \" + shape);\n\n      //add event handlers\n      helper.d3_addEvents(cellEnter, legendDispatcher);\n\n      cell.exit().transition().style(\"opacity\", 0).remove();\n\n      //creates shape\n      if (shape === \"line\"){\n        helper.d3_drawShapes(shape, shapes, 0, shapeWidth);\n        shapes.attr(\"stroke-width\", type.feature);\n      } else {\n        helper.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path);\n      }\n\n      helper.d3_addText(legendG, cellEnter, type.labels, classPrefix)\n\n      //sets placement\n      var text = cell.select(\"text\"),\n        shapeSize = shapes[0].map(\n          function(d, i){\n            var bbox = d.getBBox()\n            var stroke = scale(type.data[i]);\n\n            if (shape === \"line\" && orient === \"horizontal\") {\n              bbox.height = bbox.height + stroke;\n            } else if (shape === \"line\" && orient === \"vertical\"){\n              bbox.width = bbox.width;\n            }\n\n            return bbox;\n        });\n\n      var maxH = d3.max(shapeSize, function(d){ return d.height + d.y; }),\n      maxW = d3.max(shapeSize, function(d){ return d.width + d.x; });\n\n      var cellTrans,\n      textTrans,\n      textAlign = (labelAlign == \"start\") ? 0 : (labelAlign == \"middle\") ? 0.5 : 1;\n\n      //positions cells and text\n      if (orient === \"vertical\"){\n\n        cellTrans = function(d,i) {\n            var height = d3.sum(shapeSize.slice(0, i + 1 ), function(d){ return d.height; });\n            return \"translate(0, \" + (height + i*shapePadding) + \")\"; };\n\n        textTrans = function(d,i) { return \"translate(\" + (maxW + labelOffset) + \",\" +\n          (shapeSize[i].y + shapeSize[i].height/2 + 5) + \")\"; };\n\n      } else if (orient === \"horizontal\"){\n        cellTrans = function(d,i) {\n            var width = d3.sum(shapeSize.slice(0, i + 1 ), function(d){ return d.width; });\n            return \"translate(\" + (width + i*shapePadding) + \",0)\"; };\n\n        textTrans = function(d,i) { return \"translate(\" + (shapeSize[i].width*textAlign  + shapeSize[i].x) + \",\" +\n              (maxH + labelOffset ) + \")\"; };\n      }\n\n      helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n      helper.d3_title(svg, legendG, title, classPrefix);\n\n      cell.transition().style(\"opacity\", 1);\n\n    }\n\n  legend.scale = function(_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function(_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2 ){\n      cells = _;\n    }\n    return legend;\n  };\n\n\n  legend.shape = function(_, d) {\n    if (!arguments.length) return shape;\n    if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" ){\n      shape = _;\n      path = d;\n    }\n    return legend;\n  };\n\n  legend.shapeWidth = function(_) {\n    if (!arguments.length) return shapeWidth;\n    shapeWidth = +_;\n    return legend;\n  };\n\n  legend.shapePadding = function(_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function(_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function(_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.labelFormat = function(_) {\n    if (!arguments.length) return labelFormat;\n    labelFormat = _;\n    return legend;\n  };\n\n  legend.labelOffset = function(_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function(_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.orient = function(_){\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function(_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function(_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function(_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  d3.rebind(legend, legendDispatcher, \"on\");\n\n  return legend;\n\n};\n", "var helper = require('./legend');\n\nmodule.exports = function(){\n\n  var scale = d3.scale.linear(),\n    shape = \"path\",\n    shapeWidth = 15,\n    shapeHeight = 15,\n    shapeRadius = 10,\n    shapePadding = 5,\n    cells = [5],\n    labels = [],\n    classPrefix = \"\",\n    useClass = false,\n    title = \"\",\n    labelFormat = d3.format(\".01f\"),\n    labelAlign = \"middle\",\n    labelOffset = 10,\n    labelDelimiter = \"to\",\n    orient = \"vertical\",\n    ascending = false,\n    legendDispatcher = d3.dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n    function legend(svg){\n\n      var type = helper.d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter),\n        legendG = svg.selectAll('g').data([scale]);\n\n      legendG.enter().append('g').attr('class', classPrefix + 'legendCells');\n\n      var cell = legendG.selectAll(\".\" + classPrefix + \"cell\").data(type.data),\n        cellEnter = cell.enter().append(\"g\", \".cell\").attr(\"class\", classPrefix + \"cell\").style(\"opacity\", 1e-6),\n        shapeEnter = cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\"),\n        shapes = cell.select(\"g.\" + classPrefix + \"cell \" + shape);\n\n      //add event handlers\n      helper.d3_addEvents(cellEnter, legendDispatcher);\n\n      //remove old shapes\n      cell.exit().transition().style(\"opacity\", 0).remove();\n\n      helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature);\n      helper.d3_addText(legendG, cellEnter, type.labels, classPrefix)\n\n      // sets placement\n      var text = cell.select(\"text\"),\n        shapeSize = shapes[0].map( function(d){ return d.getBBox(); });\n\n      var maxH = d3.max(shapeSize, function(d){ return d.height; }),\n      maxW = d3.max(shapeSize, function(d){ return d.width; });\n\n      var cellTrans,\n      textTrans,\n      textAlign = (labelAlign == \"start\") ? 0 : (labelAlign == \"middle\") ? 0.5 : 1;\n\n      //positions cells and text\n      if (orient === \"vertical\"){\n        cellTrans = function(d,i) { return \"translate(0, \" + (i * (maxH + shapePadding)) + \")\"; };\n        textTrans = function(d,i) { return \"translate(\" + (maxW + labelOffset) + \",\" +\n              (shapeSize[i].y + shapeSize[i].height/2 + 5) + \")\"; };\n\n      } else if (orient === \"horizontal\"){\n        cellTrans = function(d,i) { return \"translate(\" + (i * (maxW + shapePadding)) + \",0)\"; };\n        textTrans = function(d,i) { return \"translate(\" + (shapeSize[i].width*textAlign  + shapeSize[i].x) + \",\" +\n              (maxH + labelOffset ) + \")\"; };\n      }\n\n      helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n      helper.d3_title(svg, legendG, title, classPrefix);\n      cell.transition().style(\"opacity\", 1);\n\n    }\n\n\n  legend.scale = function(_) {\n    if (!arguments.length) return scale;\n    scale = _;\n    return legend;\n  };\n\n  legend.cells = function(_) {\n    if (!arguments.length) return cells;\n    if (_.length > 1 || _ >= 2 ){\n      cells = _;\n    }\n    return legend;\n  };\n\n  legend.shapePadding = function(_) {\n    if (!arguments.length) return shapePadding;\n    shapePadding = +_;\n    return legend;\n  };\n\n  legend.labels = function(_) {\n    if (!arguments.length) return labels;\n    labels = _;\n    return legend;\n  };\n\n  legend.labelAlign = function(_) {\n    if (!arguments.length) return labelAlign;\n    if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n      labelAlign = _;\n    }\n    return legend;\n  };\n\n  legend.labelFormat = function(_) {\n    if (!arguments.length) return labelFormat;\n    labelFormat = _;\n    return legend;\n  };\n\n  legend.labelOffset = function(_) {\n    if (!arguments.length) return labelOffset;\n    labelOffset = +_;\n    return legend;\n  };\n\n  legend.labelDelimiter = function(_) {\n    if (!arguments.length) return labelDelimiter;\n    labelDelimiter = _;\n    return legend;\n  };\n\n  legend.orient = function(_){\n    if (!arguments.length) return orient;\n    _ = _.toLowerCase();\n    if (_ == \"horizontal\" || _ == \"vertical\") {\n      orient = _;\n    }\n    return legend;\n  };\n\n  legend.ascending = function(_) {\n    if (!arguments.length) return ascending;\n    ascending = !!_;\n    return legend;\n  };\n\n  legend.classPrefix = function(_) {\n    if (!arguments.length) return classPrefix;\n    classPrefix = _;\n    return legend;\n  };\n\n  legend.title = function(_) {\n    if (!arguments.length) return title;\n    title = _;\n    return legend;\n  };\n\n  d3.rebind(legend, legendDispatcher, \"on\");\n\n  return legend;\n\n};\n", "module.exports = {\n  color: require('./src/color'),\n  size: require('./src/size'),\n  symbol: require('./src/symbol')\n};\n", "var d3 = require('d3');\n\nd3.legend = require('./no-extend');\n\nmodule.exports = d3;\n", "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deserialize: () => (/* binding */ deserialize)\n/* harmony export */ });\n/* harmony import */ var _mapRelationships__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);\n/* harmony import */ var _transfromKeys__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"data\", \"included\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\nvar deserialize = function deserialize(resp) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _resp$data = resp.data,\n    data = _resp$data === void 0 ? {} : _resp$data,\n    included = resp.included,\n    rest = _objectWithoutProperties(resp, _excluded);\n  var deserialized;\n  if (Array.isArray(data)) {\n    deserialized = data.map(function (resource) {\n      return (0,_mapRelationships__WEBPACK_IMPORTED_MODULE_0__.mapRelationships)(resource, included);\n    });\n  } else if (data === null) {\n    deserialized = null;\n  } else {\n    deserialized = (0,_mapRelationships__WEBPACK_IMPORTED_MODULE_0__.mapRelationships)(data, included);\n  }\n  (0,_transfromKeys__WEBPACK_IMPORTED_MODULE_1__.transformKeys)(deserialized, options);\n  return _objectSpread({\n    data: deserialized\n  }, rest);\n};\n\n/***/ }),\n/* 2 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   mapRelationships: () => (/* binding */ mapRelationships)\n/* harmony export */ });\n/* harmony import */ var _flattenAttributes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"relationships\"],\n  _excluded2 = [\"relationships\"];\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nvar findResource = function findResource(rel, included) {\n  if (!Array.isArray(included)) return;\n  return included.find(function (res) {\n    return res.id === rel.id && res.type === rel.type;\n  });\n};\nvar deserializeIncluded = function deserializeIncluded(rel, included) {\n  var resource = findResource(rel, included);\n  if (!resource) return [undefined, included];\n  var filteredIncluded = included.map(function (res) {\n    if (res !== resource) return res;\n    var relationships = resource.relationships,\n      filter = _objectWithoutProperties(resource, _excluded);\n    return filter;\n  });\n  return [_objectSpread(_objectSpread({}, rel), (0,_flattenAttributes__WEBPACK_IMPORTED_MODULE_0__.flattenAttributes)(resource)), filteredIncluded];\n};\nvar mapRelationships = function mapRelationships(resource, included) {\n  var relationships = resource.relationships,\n    result = _objectWithoutProperties(resource, _excluded2);\n  if (resource.hasOwnProperty(\"attributes\")) {\n    result = (0,_flattenAttributes__WEBPACK_IMPORTED_MODULE_0__.flattenAttributes)(result);\n  }\n  var _loop = function _loop() {\n    if (result.hasOwnProperty(key)) return \"continue\";\n    var relData = relationships[key].data;\n    var deserializedRel;\n    if (relData && Array.isArray(relData)) {\n      var includedRels = [];\n      relData.forEach(function (rel) {\n        var dRel;\n        var _deserializeIncluded = deserializeIncluded(rel, included);\n        var _deserializeIncluded2 = _slicedToArray(_deserializeIncluded, 2);\n        dRel = _deserializeIncluded2[0];\n        included = _deserializeIncluded2[1];\n        if (dRel) includedRels.push(dRel);\n      });\n      includedRels = includedRels.map(function (rel) {\n        return mapRelationships(rel, included);\n      });\n      if (includedRels.length) deserializedRel = includedRels;\n    } else if (relData) {\n      var _deserializeIncluded3 = deserializeIncluded(relData, included),\n        _deserializeIncluded4 = _slicedToArray(_deserializeIncluded3, 2),\n        dRel = _deserializeIncluded4[0],\n        filteredIncluded = _deserializeIncluded4[1];\n      if (dRel) {\n        deserializedRel = mapRelationships(dRel, filteredIncluded);\n      }\n    }\n    if (deserializedRel) result[key] = deserializedRel;\n  };\n  for (var key in relationships) {\n    var _ret = _loop();\n    if (_ret === \"continue\") continue;\n  }\n  return result;\n};\n\n/***/ }),\n/* 3 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   flattenAttributes: () => (/* binding */ flattenAttributes)\n/* harmony export */ });\nvar _excluded = [\"attributes\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nvar asAttributes = function asAttributes(_ref) {\n  var attributes = _ref.attributes,\n    rest = _objectWithoutProperties(_ref, _excluded);\n  if (!attributes || attributes.constructor !== Object) return rest;\n  return _objectSpread(_objectSpread({}, rest), attributes);\n};\nvar flattenAttributes = function flattenAttributes(data) {\n  if (!data || _typeof(data) !== \"object\") return {};\n  if (Array.isArray(data)) return data.map(function (el) {\n    return asAttributes(el);\n  });\n  return asAttributes(data);\n};\n\n/***/ }),\n/* 4 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   transformKeys: () => (/* binding */ transformKeys)\n/* harmony export */ });\n/* harmony import */ var _toCamel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n\nvar transformKeys = function transformKeys(object, options) {\n  if (options.transformKeys === \"camelCase\") {\n    return (0,_toCamel__WEBPACK_IMPORTED_MODULE_0__.toCamel)(object);\n  }\n  return object;\n};\n\n/***/ }),\n/* 5 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   toCamel: () => (/* binding */ toCamel)\n/* harmony export */ });\n/* harmony import */ var lodash_isplainobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6);\n/* harmony import */ var lodash_isplainobject__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isplainobject__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash_camelcase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7);\n/* harmony import */ var lodash_camelcase__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_camelcase__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar needsCamelCase = function needsCamelCase(str) {\n  return str.indexOf(\"-\") > -1 || str.indexOf(\"_\") > -1;\n};\nvar toCamel = function toCamel(obj) {\n  Object.keys(obj).forEach(function (key) {\n    var camelCasedKey = needsCamelCase(key) ? lodash_camelcase__WEBPACK_IMPORTED_MODULE_1___default()(key) : key;\n    var value = obj[key];\n    delete obj[key];\n    obj[camelCasedKey] = value;\n    if (lodash_isplainobject__WEBPACK_IMPORTED_MODULE_0___default()(value)) {\n      obj[camelCasedKey] = toCamel(value);\n    }\n    if (Array.isArray(value)) {\n      obj[camelCasedKey] = value.map(function (item) {\n        if (lodash_isplainobject__WEBPACK_IMPORTED_MODULE_0___default()(item)) {\n          return toCamel(item);\n        } else {\n          return item;\n        }\n      });\n    }\n  });\n  return obj;\n};\n\n/***/ }),\n/* 6 */\n/***/ ((module) => {\n\n/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) ||\n      objectToString.call(value) != objectTag || isHostObject(value)) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return (typeof Ctor == 'function' &&\n    Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n\n\n/***/ }),\n/* 7 */\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n    rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n    rsDingbatRange = '\\\\u2700-\\\\u27bf',\n    rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n    rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n    rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n    rsPunctuationRange = '\\\\u2000-\\\\u206f',\n    rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n    rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n    rsVarRange = '\\\\ufe0e\\\\ufe0f',\n    rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n    rsAstral = '[' + rsAstralRange + ']',\n    rsBreak = '[' + rsBreakRange + ']',\n    rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n    rsDigits = '\\\\d+',\n    rsDingbat = '[' + rsDingbatRange + ']',\n    rsLower = '[' + rsLowerRange + ']',\n    rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n    rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n    rsNonAstral = '[^' + rsAstralRange + ']',\n    rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n    rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n    rsUpper = '[' + rsUpperRange + ']',\n    rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n    rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n    rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n    rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n    reOptMod = rsModifier + '?',\n    rsOptVar = '[' + rsVarRange + ']?',\n    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n    rsSeq = rsOptVar + reOptMod + rsOptJoin,\n    rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n  rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n  rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n  rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n  rsUpper + '+' + rsOptUpperContr,\n  rsDigits,\n  rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n *  the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  if (initAccum && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n  return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n  return reHasUnicodeWord.test(string);\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n  return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString(string);\n\n    var strSymbols = hasUnicode(string)\n      ? stringToArray(string)\n      : undefined;\n\n    var chr = strSymbols\n      ? strSymbols[0]\n      : string.charAt(0);\n\n    var trailing = strSymbols\n      ? castSlice(strSymbols, 1).join('')\n      : string.slice(1);\n\n    return chr[methodName]() + trailing;\n  };\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n  return function(string) {\n    return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n  };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n  word = word.toLowerCase();\n  return result + (index ? capitalize(word) : word);\n});\n\n/**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\nfunction capitalize(string) {\n  return upperFirst(toString(string).toLowerCase());\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('d\u00E9j\u00E0 vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\nvar upperFirst = createCaseFirst('toUpperCase');\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n  string = toString(string);\n  pattern = guard ? undefined : pattern;\n\n  if (pattern === undefined) {\n    return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n  }\n  return string.match(pattern) || [];\n}\n\nmodule.exports = camelCase;\n\n\n/***/ })\n/******/ \t]);\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n(() => {\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   deserialize: () => (/* reexport safe */ _deserialize__WEBPACK_IMPORTED_MODULE_0__.deserialize)\n/* harmony export */ });\n/* harmony import */ var _deserialize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);\n\n\n})();\n\nmodule.exports = __webpack_exports__;\n/******/ })()\n;", "/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, \u2026): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\tif (!('_leaflet_id' in obj)) {\r\n\t\tobj['_leaflet_id'] = ++lastId;\r\n\t}\r\n\treturn obj._leaflet_id;\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t    min = range[0],\r\n\t    d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, precision?: Number|false): Number\r\n// Returns the number `num` rounded with specified `precision`.\r\n// The default `precision` value is 6 decimal places.\r\n// `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\nexport function formatNum(num, precision) {\r\n\tif (precision === false) { return num; }\r\n\tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values \u2014 they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n", "import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\tUtil.setOptions(this);\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\tdelete proto.statics;\r\n\tdelete proto.includes;\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tproto.options = parentProto.options ? Util.create(parentProto.options) : {};\r\n\t\tUtil.extend(proto.options, props.options);\r\n\t}\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tvar parentOptions = this.prototype.options;\r\n\tUtil.extend(this.prototype, props);\r\n\tif (props.options) {\r\n\t\tthis.prototype.options = parentOptions;\r\n\t\tthis.mergeOptions(props.options);\r\n\t}\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\t/* global L: true */\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n", "import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!arguments.length) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tvar removeAll = arguments.length === 1;\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tif (removeAll) {\r\n\t\t\t\t\tthis._off(types[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context, _once) {\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if fn already there\r\n\t\tif (this._listens(type, fn, context) !== false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar newListener = {fn: fn, ctx: context};\r\n\t\tif (_once) {\r\n\t\t\tnewListener.once = true;\r\n\t\t}\r\n\r\n\t\tthis._events = this._events || {};\r\n\t\tthis._events[type] = this._events[type] || [];\r\n\t\tthis._events[type].push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t    i,\r\n\t\t    len;\r\n\r\n\t\tif (!this._events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlisteners = this._events[type];\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (arguments.length === 1) { // remove all\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// Set all removed listeners to noop\r\n\t\t\t\t// so they are not called if remove happens in fire\r\n\t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find fn and remove it\r\n\t\tvar index = this._listens(type, fn, context);\r\n\t\tif (index !== false) {\r\n\t\t\tvar listener = listeners[index];\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\tlistener.fn = Util.falseFn;\r\n\r\n\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t}\r\n\t\t\tlisteners.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide a data\r\n\t// object \u2014 the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n\t\t\t\t\tvar fn = l.fn;\r\n\t\t\t\t\tif (l.once) {\r\n\t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String, propagate?: Boolean): Boolean\r\n\t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n\tlistens: function (type, fn, context, propagate) {\r\n\t\tif (typeof type !== 'string') {\r\n\t\t\tconsole.warn('\"string\" type argument expected');\r\n\t\t}\r\n\r\n\t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n\t\tvar _fn = fn;\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tpropagate = !!fn;\r\n\t\t\t_fn = undefined;\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) {\r\n\t\t\tif (this._listens(type, _fn, context) !== false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// returns the index (number) or false\r\n\t_listens: function (type, fn, context) {\r\n\t\tif (!this._events) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events[type] || [];\r\n\t\tif (!fn) {\r\n\t\t\treturn !!listeners.length;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t// @method once(\u2026): this\r\n\t// Behaves as [`on(\u2026)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn, true);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(\u2026): this\r\n// Alias to [`on(\u2026)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(\u2026): this\r\n// Alias to [`off(\u2026)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(\u2026): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(\u2026): this\r\n// Alias to [`once(\u2026)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(\u2026): this\r\n// Alias to [`fire(\u2026)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(\u2026): Boolean\r\n// Alias to [`listens(\u2026)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n", "import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t    y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t       point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t        formatNum(this.x) + ', ' +\r\n\t\t        formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: Bounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar min2, max2;\r\n\t\tif (!obj) { return this; }\r\n\r\n\t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n\t\t\tmin2 = max2 = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t\tmin2 = obj.min;\r\n\t\t\tmax2 = obj.max;\r\n\r\n\t\t\tif (!min2 || !max2) { return this; }\r\n\t\t}\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = min2.clone();\r\n\t\t\tthis.max = max2.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn toPoint(\r\n\t\t        (this.min.x + this.max.x) / 2,\r\n\t\t        (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn toPoint(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn toPoint(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t       (max.x <= this.max.x) &&\r\n\t\t       (min.y >= this.min.y) &&\r\n\t\t       (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\r\n\t// @method pad(bufferRatio: Number): Bounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar min = this.min,\r\n\t\tmax = this.max,\r\n\t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n\t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n\t\treturn toBounds(\r\n\t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n\t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n\t},\r\n\r\n\r\n\t// @method equals(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n\tequals: function (bounds) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n\t\t\tthis.max.equals(bounds.getBottomRight());\r\n\t},\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n", "import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n", "import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t        Math.abs(this.lat - obj.lat),\r\n\t\t        Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t        Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t        Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n", "\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t    scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t    s = this.scale(zoom),\r\n\t\t    min = this.transformation.transform(b.min, s),\r\n\t\t    max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t    lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t    alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t    newCenter = this.wrapLatLng(center),\r\n\t\t    latShift = center.lat - newCenter.lat,\r\n\t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t    ne = bounds.getNorthEast(),\r\n\t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n", "import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see https://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t    lat1 = latlng1.lat * rad,\n\t\t    lat2 = latlng2.lat * rad,\n\t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection \u2014 the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    max = this.MAX_LATITUDE,\r\n\t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t    sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n", "import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t        (point.x / scale - this._b) / this._a,\r\n\t\t        (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n", "import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n", "import Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n", "import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n *   alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nvar ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nvar ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nvar edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nvar webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// **Deprecated.** `true` for any browser running on an Android platform.\r\nvar android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\nvar android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\nvar androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nvar opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nvar chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nvar gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nvar safari = !chrome && userAgentContains('safari');\r\n\r\nvar phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nvar opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nvar win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nvar ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nvar webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nvar gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nvar any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nvar mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nvar mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nvar mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nvar msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nvar pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touchNative: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// **This does not necessarily mean** that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nvar touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\nvar touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nvar mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nvar mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nvar retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nvar passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nvar canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nvar svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\nvar inlineSvg = !!svg && (function () {\r\n\tvar div = document.createElement('div');\r\n\tdiv.innerHTML = '<svg/>';\r\n\treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n})();\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nvar vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Mac platform\r\nvar mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Linux platform\r\nvar linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n\r\n\r\nexport default {\r\n\tie: ie,\r\n\tielt9: ielt9,\r\n\tedge: edge,\r\n\twebkit: webkit,\r\n\tandroid: android,\r\n\tandroid23: android23,\r\n\tandroidStock: androidStock,\r\n\topera: opera,\r\n\tchrome: chrome,\r\n\tgecko: gecko,\r\n\tsafari: safari,\r\n\tphantom: phantom,\r\n\topera12: opera12,\r\n\twin: win,\r\n\tie3d: ie3d,\r\n\twebkit3d: webkit3d,\r\n\tgecko3d: gecko3d,\r\n\tany3d: any3d,\r\n\tmobile: mobile,\r\n\tmobileWebkit: mobileWebkit,\r\n\tmobileWebkit3d: mobileWebkit3d,\r\n\tmsPointer: msPointer,\r\n\tpointer: pointer,\r\n\ttouch: touch,\r\n\ttouchNative: touchNative,\r\n\tmobileOpera: mobileOpera,\r\n\tmobileGecko: mobileGecko,\r\n\tretina: retina,\r\n\tpassiveEvents: passiveEvents,\r\n\tcanvas: canvas,\r\n\tsvg: svg,\r\n\tvml: vml,\r\n\tinlineSvg: inlineSvg,\r\n\tmac: mac,\r\n\tlinux: linux\r\n};\r\n", "import * as DomEvent from './DomEvent';\nimport Browser from '../core/Browser';\nimport {falseFn} from '../core/Util';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\nvar POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\nvar POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\nvar POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar pEvent = {\n\ttouchstart  : POINTER_DOWN,\n\ttouchmove   : POINTER_MOVE,\n\ttouchend    : POINTER_UP,\n\ttouchcancel : POINTER_CANCEL\n};\nvar handle = {\n\ttouchstart  : _onPointerStart,\n\ttouchmove   : _handlePointer,\n\ttouchend    : _handlePointer,\n\ttouchcancel : _handlePointer\n};\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler) {\n\tif (type === 'touchstart') {\n\t\t_addPointerDocListener();\n\t}\n\tif (!handle[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn falseFn;\n\t}\n\thandler = handle[type].bind(this, handler);\n\tobj.addEventListener(pEvent[type], handler, false);\n\treturn handler;\n}\n\nexport function removePointerListener(obj, type, handler) {\n\tif (!pEvent[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn;\n\t}\n\tobj.removeEventListener(pEvent[type], handler, false);\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _addPointerDocListener() {\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _handlePointer(handler, e) {\n\tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _onPointerStart(handler, e) {\n\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\tDomEvent.preventDefault(e);\n\t}\n\t_handlePointer(handler, e);\n}\n", "import * as DomEvent from './DomEvent';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\nfunction makeDblclick(event) {\r\n\t// in modern browsers `type` cannot be just overridden:\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n\tvar newEvent = {},\r\n\t    prop, i;\r\n\tfor (i in event) {\r\n\t\tprop = event[i];\r\n\t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n\t}\r\n\tevent = newEvent;\r\n\tnewEvent.type = 'dblclick';\r\n\tnewEvent.detail = 2;\r\n\tnewEvent.isTrusted = false;\r\n\tnewEvent._simulated = true; // for debug purposes\r\n\treturn newEvent;\r\n}\r\n\r\nvar delay = 200;\r\nexport function addDoubleTapListener(obj, handler) {\r\n\t// Most browsers handle double tap natively\r\n\tobj.addEventListener('dblclick', handler);\r\n\r\n\t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n\t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n\t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n\tvar last = 0,\r\n\t    detail;\r\n\tfunction simDblclick(e) {\r\n\t\tif (e.detail !== 1) {\r\n\t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (e.pointerType === 'mouse' ||\r\n\t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// When clicking on an <input>, the browser generates a click on its\r\n\t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n\t\t// This ignores clicks on elements which are a label with a 'for'\r\n\t\t// attribute (or children of such a label), but not children of\r\n\t\t// a <input>.\r\n\t\tvar path = DomEvent.getPropagationPath(e);\r\n\t\tif (path.some(function (el) {\r\n\t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n\t\t}) &&\r\n\t\t\t!path.some(function (el) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tel instanceof HTMLInputElement ||\r\n\t\t\t\t\tel instanceof HTMLSelectElement\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now();\r\n\t\tif (now - last <= delay) {\r\n\t\t\tdetail++;\r\n\t\t\tif (detail === 2) {\r\n\t\t\t\thandler(makeDblclick(e));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdetail = 1;\r\n\t\t}\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tobj.addEventListener('click', simDblclick);\r\n\r\n\treturn {\r\n\t\tdblclick: handler,\r\n\t\tsimDblclick: simDblclick\r\n\t};\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, handlers) {\r\n\tobj.removeEventListener('dblclick', handlers.dblclick);\r\n\tobj.removeEventListener('click', handlers.simDblclick);\r\n}\r\n", "import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outlineStyle;\r\n\telement.style.outlineStyle = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outlineStyle = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n", "import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, types: String): this\r\n// Removes all previously added listeners of given types.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement): this\r\n// Removes all previously added listeners from given HTMLElement\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (arguments.length === 1) {\r\n\t\tbatchRemove(obj);\r\n\t\tdelete obj[eventsKey];\r\n\r\n\t} else if (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tif (arguments.length === 2) {\r\n\t\t\tbatchRemove(obj, function (type) {\r\n\t\t\t\treturn Util.indexOf(types, type) !== -1;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction batchRemove(obj, filterFn) {\r\n\tfor (var id in obj[eventsKey]) {\r\n\t\tvar type = id.split(/\\d/)[0];\r\n\t\tif (!filterFn || filterFn(type)) {\r\n\t\t\tremoveOne(obj, type, null, null, id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\thandler = addPointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context, id) {\r\n\tid = id || type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\tremoveDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n\tel['_leaflet_disable_click'] = true;\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getPropagationPath(ev: DOMEvent): Array\r\n// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n// Returns an array containing the `HTMLElement`s that the given DOM event\r\n// should propagate to (if not stopped).\r\nexport function getPropagationPath(ev) {\r\n\tif (ev.composedPath) {\r\n\t\treturn ev.composedPath();\r\n\t}\r\n\r\n\tvar path = [];\r\n\tvar el = ev.target;\r\n\r\n\twhile (el) {\r\n\t\tpath.push(el);\r\n\t\tel = el.parentNode;\r\n\t}\r\n\treturn path;\r\n}\r\n\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n\r\n//  except , Safari and\r\n// We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n// except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\nvar wheelPxFactor =\r\n\t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n\tBrowser.mac ? window.devicePixelRatio * 3 :\r\n\twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t       0;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(\u2026): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(\u2026): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n", "import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n *\n * myPositionMarker.on(\"click\", function() {\n * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n * \tpos.y -= 25;\n * \tvar fx = new L.PosAnimation();\n *\n * \tfx.once('end',function() {\n * \t\tpos.y += 25;\n * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n * \t});\n *\n * \tfx.run(myPositionMarker._icon, pos, 0.3);\n * });\n *\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t    duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n", "import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API \u2014 it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t    to = this.project(targetCenter),\r\n\t\t    size = this.getSize(),\r\n\t\t    startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t    u1 = (to.distanceTo(from)) || 1,\r\n\t\t    rho = 1.42,\r\n\t\t    rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t    s2 = i ? w1 : w0,\r\n\t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t    b = t1 / b1,\r\n\t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t    // thus triggering an infinite loop in flyTo\r\n\t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t    S = (r(1) - r0) / rho,\r\n\t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t    s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: padding options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// padding options to fit the display to more restricted bounds.\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t    pixelCenter = this.project(this.getCenter()),\r\n\t\t    pixelPoint = this.project(latlng),\r\n\t\t    pixelBounds = this.getPixelBounds(),\r\n\t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n\t\t    paddedSize = paddedBounds.getSize();\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n\t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n\t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n\t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n\t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so \u2014\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so \u2014\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t    oldCenter = oldSize.divideBy(2).round(),\r\n\t\t    newCenter = newSize.divideBy(2).round(),\r\n\t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t    onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar c = error.code,\r\n\t\t    message = error.message ||\r\n\t\t            (c === 1 ? 'permission denied' :\r\n\t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t    lng = pos.coords.longitude,\r\n\t\t    latlng = new LatLng(lat, lng),\r\n\t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t    options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t    pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter.clone();\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t    min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    nw = bounds.getNorthWest(),\r\n\t\t    se = bounds.getSouthEast(),\r\n\t\t    size = this.getSize().subtract(padding),\r\n\t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t    scalex = size.x / boundsSize.x,\r\n\t\t    scaley = size.y / boundsSize.y,\r\n\t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom, noMoveStart) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, noMoveStart)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data, supressEvent) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\tif (!supressEvent) {\r\n\t\t\t// @event zoom: Event\r\n\t\t\t// Fired repeatedly during any change in zoom level,\r\n\t\t\t// including zoom and fly animations.\r\n\t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\t\tthis.fire('zoom', data);\r\n\t\t\t}\r\n\r\n\t\t\t// @event move: Event\r\n\t\t\t// Fired repeatedly during any movement of the map,\r\n\t\t\t// including pan and fly animations.\r\n\t\t\tthis.fire('move', data);\r\n\t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map zoom changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing\r\n\t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop  = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t    target,\r\n\t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t    src = e.target || e.srcElement,\r\n\t\t    dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_isClickDisabled: function (el) {\r\n\t\twhile (el && el !== this._container) {\r\n\t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n\t\t\tel = el.parentNode;\r\n\t\t}\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tvar el = (e.target || e.srcElement);\r\n\t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(el);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n\t\t}\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\tvar targets = this._findEventTargets(e, type);\r\n\r\n\t\tif (canvasTargets) {\r\n\t\t\tvar filtered = []; // pick only targets with listeners\r\n\t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n\t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n\t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttargets = filtered.concat(targets);\r\n\t\t}\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tif (type === 'contextmenu') {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar target = targets[0];\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t    ),\r\n\t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t    transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t    z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t    ._moveStart(true, options.noMoveStart || false)\r\n\t\t\t    ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\tif (!this._tempFireZoomEvent) {\r\n\t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n\t\t}\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\tif (this._tempFireZoomEvent) {\r\n\t\t\tthis.fire('zoom');\r\n\t\t}\r\n\t\tdelete this._tempFireZoomEvent;\r\n\r\n\t\tthis.fire('move');\r\n\r\n\t\tthis._moveEnd(true);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n", "\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control Options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t    pos = this.getPosition(),\r\n\t\t    corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t    l = 'leaflet-',\r\n\t\t    container = this._controlContainer =\r\n\t\t            DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n", "\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n *     \"<someName1>\": layer1,\r\n *     \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\t\tthis._preventClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t    container = this._container = DomUtil.create('div', className),\r\n\t\t    collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tDomEvent.on(container, {\r\n\t\t\t\tmouseenter: this._expandSafely,\r\n\t\t\t\tmouseleave: this.collapse\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\t\tlink.setAttribute('role', 'button');\r\n\r\n\t\tDomEvent.on(link, {\r\n\t\t\tkeydown: function (e) {\r\n\t\t\t\tif (e.keyCode === 13) {\r\n\t\t\t\t\tthis._expandSafely();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Certain screen readers intercept the key event and instead send a click event\r\n\t\t\tclick: function (e) {\r\n\t\t\t\tDomEvent.preventDefault(e);\r\n\t\t\t\tthis._expandSafely();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n\t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t    checked = this._map.hasLayer(obj.layer),\r\n\t\t    input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('span');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\t// expanding the control on mobile with a click can cause adding a layer - we don't want this\r\n\t\tif (this._preventClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t    removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input,\r\n\t\t    layer,\r\n\t\t    zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expandSafely: function () {\r\n\t\tvar section = this._section;\r\n\t\tthis._preventClick = true;\r\n\t\tDomEvent.on(section, 'click', DomEvent.preventDefault);\r\n\t\tthis.expand();\r\n\t\tvar that = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\tDomEvent.off(section, 'click', DomEvent.preventDefault);\r\n\t\t\tthat._preventClick = false;\r\n\t\t});\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">&#x2212;</span>'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '<span aria-hidden=\"true\">&#x2212;</span>',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t    container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t    options = this.options;\r\n\r\n\t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t        zoomName + '-in',  container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t    className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n", "\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t    container = DomUtil.create('div', className),\n\t\t    options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t    y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t    maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t    d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t    d >= 5 ? 5 :\n\t\t    d >= 3 ? 3 :\n\t\t    d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport Browser from '../core/Browser';\r\n\r\nvar ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String|false = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('layeradd', this._addAttribution, this);\r\n\t},\r\n\r\n\t_addAttribution: function (ev) {\r\n\t\tif (ev.layer.getAttribution) {\r\n\t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n\t\t\tev.layer.once('remove', function () {\r\n\t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String|false): this\r\n\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n", "import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n", "import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n", "import Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n", "import {Evented} from '../core/Events';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag(true);\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length !== 1) {\r\n\t\t\t// Finish dragging to avoid conflict with touchZoom\r\n\t\t\tif (Draggable._dragging === this) {\r\n\t\t\t\tthis.finishDrag();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t    sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\t\tthis._startPos = DomUtil.getPosition(this._element);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tvar mouseevent = e.type === 'mousedown';\r\n\t\tDomEvent.on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n\t\tDomEvent.on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._updatePosition();\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function () {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function (noInertia) {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tDomEvent.off(document, 'mousemove touchmove', this._onMove, this);\r\n\t\tDomEvent.off(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tvar fireDragend = this._moved && this._moving;\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\r\n\t\tif (fireDragend) {\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tnoInertia: noInertia,\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n});\r\n", "import * as LineUtil from './LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from './Point';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t    edges = [1, 4, 2, 8],\r\n\t    i, j, k,\r\n\t    a, b,\r\n\t    len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n\r\n/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n */\r\nexport function polygonCenter(latlngs, crs) {\r\n\tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!LineUtil.isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tarea = x = y = 0;\r\n\r\n\t// polygon centroid algorithm;\r\n\tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n\t\tp1 = points[i];\r\n\t\tp2 = points[j];\r\n\r\n\t\tf = p1.y * p2.x - p2.y * p1.x;\r\n\t\tx += (p1.x + p2.x) * f;\r\n\t\ty += (p1.y + p2.y) * f;\r\n\t\tarea += f * 3;\r\n\t}\r\n\r\n\tif (area === 0) {\r\n\t\t// Polygon is so small that all points are on same pixel.\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tcenter = [x / area, y / area];\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n\r\n/* @function centroid(latlngs: LatLng[]): LatLng\r\n * Returns the 'center of mass' of the passed LatLngs.\r\n */\r\nexport function centroid(coords) {\r\n\tvar latSum = 0;\r\n\tvar lngSum = 0;\r\n\tvar len = 0;\r\n\tfor (var i = 0; i < coords.length; i++) {\r\n\t\tvar latlng = toLatLng(coords[i]);\r\n\t\tlatSum += latlng.lat;\r\n\t\tlngSum += latlng.lng;\r\n\t\tlen++;\r\n\t}\r\n\treturn toLatLng([latSum / len, lngSum / len]);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {centroid} from './PolyUtil';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t    // stage 1: vertex reduction\r\n\t    points = _reducePoints(points, sqTolerance);\r\n\r\n\t    // stage 2: Douglas-Peucker simplification\r\n\t    points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t    markers = new ArrayConstructor(len);\r\n\r\n\t    markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t    newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t    codeB = _getBitCode(b, bounds),\r\n\r\n\t    codeOut, p, newCode;\r\n\r\n\t    // save 2nd code to avoid calculating it on the next segment\r\n\t    _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t    dy = b.y - a.y,\r\n\t    min = bounds.min,\r\n\t    max = bounds.max,\r\n\t    x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t    dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t    y = p1.y,\r\n\t    dx = p2.x - x,\r\n\t    dy = p2.y - y,\r\n\t    dot = dx * dx + dy * dy,\r\n\t    t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n\r\n/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n */\r\nexport function polylineCenter(latlngs, crs) {\r\n\tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n\t}\r\n\r\n\t// The line is so small in the current view that all points are on the same pixel.\r\n\tif (halfDist === 0) {\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n\t\t\tp1 = points[i];\r\n\t\t\tp2 = points[i + 1];\r\n\t\t\tsegDist = p1.distanceTo(p2);\r\n\t\t\tdist += segDist;\r\n\r\n\t\t\tif (dist > halfDist) {\r\n\t\t\t\tratio = (dist - halfDist) / segDist;\r\n\t\t\t\tcenter = [\r\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection \u2014 the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection \u2014 more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    r = this.R,\r\n\t\t    y = latlng.lat * d,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t    r = this.R,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    ts = Math.exp(-point.y / r),\r\n\t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n", "import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n", "import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n", "import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t    dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n", "import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"\u00A9 OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn Util.stamp(layer) in this._layers;\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t *     layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t    maxZoom = -Infinity,\n\t\t    oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n", "import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n", "\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Interactive layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, \u2026): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t    i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n", "import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n *  * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n", "import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport Browser from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n *     iconUrl: 'my-icon.png',\r\n *     iconRetinaUrl: 'my-icon@2x.png',\r\n *     iconSize: [38, 95],\r\n *     iconAnchor: [22, 94],\r\n *     popupAnchor: [-3, -76],\r\n *     shadowUrl: 'my-icon-shadow.png',\r\n *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n *     shadowSize: [68, 95],\r\n *     shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0],\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t    anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t            size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width  = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n", "import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl:       'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl:     'marker-shadow.png',\n\t\ticonSize:    [25, 41],\n\t\ticonAnchor:  [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize:  [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_stripUrl: function (path) {\t// separate function to use in tests\n\t\tvar strip = function (str, re, idx) {\n\t\t\tvar match = re.exec(str);\n\t\t\treturn match && match[idx];\n\t\t};\n\t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n\t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t           DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\t\tpath = this._stripUrl(path);\n\t\tif (path) { return path; }\n\t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n\t\tif (!link) { return ''; }\n\t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n\t}\n});\n", "import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t    map = marker._map,\n\t\t    speed = this._marker.options.autoPanSpeed,\n\t\t    padding = this._marker.options.autoPanPadding,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    bounds = map.getPixelBounds(),\n\t\t    origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t    shadow = marker._shadow,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t    .fire('moveend')\n\t\t    .fire('dragend', e);\n\t}\n});\n", "import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = 'Marker'\r\n\t\t// Text for the `alt` attribute of the icon image.\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\talt: 'Marker',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @option autoPanOnFocus: Boolean = true\r\n\t\t// When `true`, the map will pan whenever the marker is focused (via\r\n\t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n\t\t// visible within the map's bounds\r\n\t\tautoPanOnFocus: true,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t    addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t\ticon.setAttribute('role', 'button');\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.on(icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t    addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.off(this._icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_panOnFocus: function () {\r\n\t\tvar map = this._map;\r\n\t\tif (!map) { return; }\r\n\r\n\t\tvar iconOpts = this.options.icon.options;\r\n\t\tvar size = iconOpts.iconSize ? point(iconOpts.iconSize) : point(0, 0);\r\n\t\tvar anchor = iconOpts.iconAnchor ? point(iconOpts.iconAnchor) : point(0, 0);\r\n\r\n\t\tmap.panInside(this._latlng, {\r\n\t\t\tpaddingTopLeft: anchor,\r\n\t\t\tpaddingBottomRight: size.subtract(anchor)\r\n\t\t});\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n", "import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n\t\t  (this._renderer.options.tolerance || 0);\n\t}\n});\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t    r2 = this._radiusY || r,\n\t\t    w = this._clickTolerance(),\n\t\t    p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n", "import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t    lat = this._latlng.lat,\n\t\t    map = this._map,\n\t\t    crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t    latR = (this._mRadius / Earth.R) / d,\n\t\t\t    top = map.project([lat + latR, lng]),\n\t\t\t    bottom = map.project([lat - latR, lng]),\n\t\t\t    p = top.add(bottom).divideBy(2),\n\t\t\t    lat2 = map.unproject(p).lat,\n\t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t    minPoint = null,\n\t\t    closest = LineUtil._sqClosestPointOnSegment,\n\t\t    p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t    flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t    p = new Point(w, w);\n\n\t\tif (!this._rawPxBounds) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t    len = latlngs.length,\n\t\t    i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t    i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t    tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t    w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n", "import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one \u2014 it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n *   [ // first polygon\n *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n *   ],\n *   [ // second polygon\n *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n *   ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t    len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t    w = this.options.weight,\n\t\t    p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t    part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n", "import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t    i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t    coords = geometry ? geometry.coordinates : null,\r\n\t    layers = [],\r\n\t    pointToLayer = options && options.pointToLayer,\r\n\t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t    latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar geoLayer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (geoLayer) {\r\n\t\t\t\tlayers.push(geoLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'FeatureCollection':\r\n\t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n\t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n\t\t\tif (featureLayer) {\r\n\t\t\t\tlayers.push(featureLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngToCoords(latlng, precision) {\r\n\tlatlng = toLatLng(latlng);\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], LineUtil.isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed && coords.length > 0) {\r\n\t\tcoords.push(coords[0].slice());\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t    multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number|false): Object\r\n\t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n\t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t    jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n", "import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t    bounds = new Bounds(\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t    size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width  = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center of the ImageOverlay.\r\n\tgetCenter: function () {\r\n\t\treturn this._bounds.getCenter();\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n", "import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\t// On some browsers autoplay will only work with `muted: true`\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true,\r\n\r\n\t\t// @option keepAspectRatio: Boolean = true\r\n\t\t// Whether the video will save aspect ratio after the projection.\r\n\t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n\t\tkeepAspectRatio: true,\r\n\r\n\t\t// @option muted: Boolean = false\r\n\t\t// Whether the video starts on mute when loaded.\r\n\t\tmuted: false,\r\n\r\n\t\t// @option playsInline: Boolean = true\r\n\t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n\t\tplaysInline: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(vid, this.options.className); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n\t\t\tvid.style['objectFit'] = 'fill';\r\n\t\t}\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tvid.muted = !!this.options.muted;\r\n\t\tvid.playsInline = !!this.options.playsInline;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n", "import {ImageOverlay} from './ImageOverlay';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as Util from '../core/Util';\n\n/*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\nexport var SVGOverlay = ImageOverlay.extend({\n\t_initImage: function () {\n\t\tvar el = this._image = this._url;\n\n\t\tDomUtil.addClass(el, 'leaflet-image-layer');\n\t\tif (this._zoomAnimated) { DomUtil.addClass(el, 'leaflet-zoom-animated'); }\n\t\tif (this.options.className) { DomUtil.addClass(el, this.options.className); }\n\n\t\tel.onselectstart = Util.falseFn;\n\t\tel.onmousemove = Util.falseFn;\n\t}\n\n\t// @method getElement(): SVGElement\n\t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n\t// used by this overlay.\n});\n\n\n// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n// A viewBox attribute is required on the SVG element to zoom in and out properly.\n\nexport function svgOverlay(el, bounds, options) {\n\treturn new SVGOverlay(el, bounds, options);\n}\n", "import {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng, LatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Interactive layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If true, the popup/tooltip will listen to the mouse events.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option offset: Point = Point(0, 0)\r\n\t\t// The offset of the overlay position.\r\n\t\toffset: [0, 0],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the overlay.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = undefined\r\n\t\t// `Map pane` where the overlay will be added.\r\n\t\tpane: undefined,\r\n\r\n\t\t// @option content: String|HTMLElement|Function = ''\r\n\t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n\t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\t\tcontent: ''\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tif (options && (options instanceof LatLng || Util.isArray(options))) {\r\n\t\t\tthis._latlng = toLatLng(options);\r\n\t\t\tUtil.setOptions(this, source);\r\n\t\t} else {\r\n\t\t\tUtil.setOptions(this, options);\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\t\tif (this.options.content) {\r\n\t\t\tthis._content = this.options.content;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the overlay to the map.\r\n\t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\t\tif (!map.hasLayer(this)) {\r\n\t\t\tmap.addLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method close(): this\r\n\t// Closes the overlay.\r\n\t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n\t// and `layer.closePopup()`/`.closeTooltip()`.\r\n\tclose: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.removeLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method toggle(layer?: Layer): this\r\n\t// Opens or closes the overlay bound to layer depending on its current state.\r\n\t// Argument may be omitted only for overlay bound to layer.\r\n\t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n\ttoggle: function (layer) {\r\n\t\tif (this._map) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\tthis._source = layer;\r\n\t\t\t} else {\r\n\t\t\t\tlayer = this._source;\r\n\t\t\t}\r\n\t\t\tthis._prepareOpen();\r\n\r\n\t\t\t// open the overlay on the map\r\n\t\t\tthis.openOn(layer._map);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.removeInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace DivOverlay\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of the overlay.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the overlay will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the overlay.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n\t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Returns the HTML container of the overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the overlay is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this overlay in front of other overlays (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this overlay to the back of other overlays (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n\t_prepareOpen: function (latlng) {\r\n\t\tvar source = this._source;\r\n\t\tif (!source._map) { return false; }\r\n\r\n\t\tif (source instanceof FeatureGroup) {\r\n\t\t\tsource = null;\r\n\t\t\tvar layers = this._source._layers;\r\n\t\t\tfor (var id in layers) {\r\n\t\t\t\tif (layers[id]._map) {\r\n\t\t\t\t\tsource = layers[id];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n\t\t\t// set overlay source to this layer\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tif (source.getCenter) {\r\n\t\t\t\tlatlng = source.getCenter();\r\n\t\t\t} else if (source.getLatLng) {\r\n\t\t\t\tlatlng = source.getLatLng();\r\n\t\t\t} else if (source.getBounds) {\r\n\t\t\t\tlatlng = source.getBounds().getCenter();\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLatLng(latlng);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t// update the overlay (content, layout, etc...)\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\r\n\t\t// @namespace DivOverlay\r\n\t\t// @section DivOverlay events\r\n\t\t// @event contentupdate: Event\r\n\t\t// Fired when the content of the overlay is updated\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t    offset = toPoint(this.options.offset),\r\n\t\t    anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n\r\nMap.include({\r\n\t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (!(overlay instanceof OverlayClass)) {\r\n\t\t\toverlay = new OverlayClass(options).setContent(content);\r\n\t\t}\r\n\t\tif (latlng) {\r\n\t\t\toverlay.setLatLng(latlng);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n\r\n\r\nLayer.include({\r\n\t_initOverlay: function (OverlayClass, old, content, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (overlay instanceof OverlayClass) {\r\n\t\t\tUtil.setOptions(overlay, options);\r\n\t\t\toverlay._source = this;\r\n\t\t} else {\r\n\t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n\t\t\toverlay.setContent(content);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {Path} from './vector/Path';\r\nimport {FeatureGroup} from './FeatureGroup';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n *\r\n * A popup can be also standalone:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n * or\r\n * ```js\r\n * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane',\r\n\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\t// The scrollable container can be styled using the\r\n\t\t// `leaflet-popup-scrolled` CSS class selector.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Alternative to `map.openPopup(popup)`.\r\n\t// Adds the popup to the map and closes the previous one.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n\t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n\t\t\tmap.removeLayer(map._popup);\r\n\t\t}\r\n\t\tmap._popup = this;\r\n\r\n\t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this.close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t    container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(container, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n\t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">&#215;</span>';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', function (ev) {\r\n\t\t\t\tDomEvent.preventDefault(ev);\r\n\t\t\t\tthis.close();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t    style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t    maxHeight = this.options.maxHeight,\r\n\t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t    anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\t// We can endlessly recurse if keepInView is set and the view resets.\r\n\t\t// Let's guard against that by exiting early if we're responding to our own autopan.\r\n\t\tif (this._autopanning) {\r\n\t\t\tthis._autopanning = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar map = this._map,\r\n\t\t    marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t    containerWidth = this._containerWidth,\r\n\t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t    padding = toPoint(this.options.autoPanPadding),\r\n\t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t    size = map.getSize(),\r\n\t\t    dx = 0,\r\n\t\t    dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\t// Track that we're autopanning, as this function will be re-ran on moveend\r\n\t\t\tif (this.options.keepInView) {\r\n\t\t\t\tthis._autopanning = true;\r\n\t\t\t}\r\n\r\n\t\t\tmap\r\n\t\t\t    .fire('autopanstart')\r\n\t\t\t    .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n// @alternative\r\n// @factory L.popup(latlng: LatLng, options?: Popup options)\r\n// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tthis._initOverlay(Popup, popup, latlng, options)\r\n\t\t  .openOn(this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tpopup = arguments.length ? popup : this._popup;\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (latlng) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (!(this instanceof FeatureGroup)) {\r\n\t\t\t\tthis._popup._source = this;\r\n\t\t\t}\r\n\t\t\tif (this._popup._prepareOpen(latlng || this._latlng)) {\r\n\t\t\t\t// open the popup on the map\r\n\t\t\t\tthis._popup.openOn(this._map);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.toggle(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tif (!this._popup || !this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\tvar target = e.layer || e.target;\r\n\t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n\t\t\t// treat it like a marker and figure out\r\n\t\t\t// if we should toggle it open/closed\r\n\t\t\tif (this._map.hasLayer(this._popup)) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(e.latlng);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._popup._source = target;\r\n\t\tthis.openPopup(e.latlng);\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as DomEvent from '../dom/DomEvent';\nimport * as Util from '../core/Util';\nimport {FeatureGroup} from './FeatureGroup';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n * If you want to just bind a tooltip to marker:\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Path overlays like polylines also have a `bindTooltip` method.\n *\n * A tooltip can be also standalone:\n *\n * ```js\n * var tooltip = L.tooltip()\n * \t.setLatLng(latlng)\n * \t.setContent('Hello world!<br />This is a nice tooltip.')\n * \t.addTo(map);\n * ```\n * or\n * ```js\n * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n * \t.addTo(map);\n * ```\n *\n *\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n *   move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n *   should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.addEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.removeEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (!this.options.permanent) {\n\t\t\tevents.preclick = this.close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\n\t\tthis._container.setAttribute('role', 'tooltip');\n\t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + Util.stamp(this));\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar subX, subY,\n\t\t    map = this._map,\n\t\t    container = this._container,\n\t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t    direction = this.options.direction,\n\t\t    tooltipWidth = container.offsetWidth,\n\t\t    tooltipHeight = container.offsetHeight,\n\t\t    offset = toPoint(this.options.offset),\n\t\t    anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight;\n\t\t} else if (direction === 'bottom') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = 0;\n\t\t} else if (direction === 'center') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'right') {\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'left') {\n\t\t\tsubX = tooltipWidth;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t}\n\n\t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n// @alternative\n// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n\t\t  .openOn(this);\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(tooltip: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\ttooltip.close();\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (this._tooltip && this.isTooltipOpen()) {\n\t\t\tthis.unbindTooltip();\n\t\t}\n\n\t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t    events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t    };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tevents.click = this._openTooltip;\n\t\t\tif (this._map) {\n\t\t\t\tthis._addFocusListeners();\n\t\t\t} else {\n\t\t\t\tevents.add = this._addFocusListeners;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tif (this._tooltip.options.sticky) {\n\t\t\tevents.mousemove = this._moveTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (latlng) {\n\t\tif (this._tooltip) {\n\t\t\tif (!(this instanceof FeatureGroup)) {\n\t\t\t\tthis._tooltip._source = this;\n\t\t\t}\n\t\t\tif (this._tooltip._prepareOpen(latlng)) {\n\t\t\t\t// open the tooltip on the map\n\t\t\t\tthis._tooltip.openOn(this._map);\n\n\t\t\t\tif (this.getElement) {\n\t\t\t\t\tthis._setAriaDescribedByOnLayer(this);\n\t\t\t\t} else if (this.eachLayer) {\n\t\t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\treturn this._tooltip.close();\n\t\t}\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.toggle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_addFocusListeners: function () {\n\t\tif (this.getElement) {\n\t\t\tthis._addFocusListenersOnLayer(this);\n\t\t} else if (this.eachLayer) {\n\t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n\t\t}\n\t},\n\n\t_addFocusListenersOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tDomEvent.on(el, 'focus', function () {\n\t\t\t\tthis._tooltip._source = layer;\n\t\t\t\tthis.openTooltip();\n\t\t\t}, this);\n\t\t\tDomEvent.on(el, 'blur', this.closeTooltip, this);\n\t\t}\n\t},\n\n\t_setAriaDescribedByOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n\t\t}\n\t},\n\n\n\t_openTooltip: function (e) {\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the map is moving, we will show the tooltip after it's done.\n\t\tif (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {\n\t\t\tthis._openOnceFlag = true;\n\t\t\tvar that = this;\n\t\t\tthis._map.once('moveend', function () {\n\t\t\t\tthat._openOnceFlag = false;\n\t\t\t\tthat._openTooltip(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tooltip._source = e.layer || e.target;\n\n\t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n", "import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\nimport {empty} from '../../dom/DomUtil';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t    options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n", "import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n", "import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords){\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n *         var ctx = tile.getContext('2d');\n *\n *         // return the tile so it can be rendered on screen\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords, done){\n *         var error;\n *\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // draw something asynchronously and pass the tile to the done() callback\n *         setTimeout(function() {\n *             done(error, tile);\n *         }, 1000);\n *\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t    nextFrame = false,\n\t\t    willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t    maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t    map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t    y2 = Math.floor(y / 2),\n\t\t    z2 = z - 1,\n\t\t    coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t    tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t    tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t    translate = level.origin.multiplyBy(scale)\n\t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t    crs = map.options.crs,\n\t\t    tileSize = this._tileSize = this.getTileSize(),\n\t\t    tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t    tileCenter = tileRange.getCenter(),\n\t\t    queue = [],\n\t\t    margin = this.options.keepBuffer,\n\t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t      isFinite(tileRange.min.y) &&\n\t\t      isFinite(tileRange.max.x) &&\n\t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t    tileSize = this.getTileSize(),\n\t\t    nwPoint = coords.scaleBy(tileSize),\n\t\t    sePoint = nwPoint.add(tileSize),\n\t\t    nw = map.unproject(nwPoint, coords.z),\n\t\t    se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t    coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t    key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n", "import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` \u2014 zoom level, `{x}` and `{y}` \u2014 tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n", "import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data \u00A9 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t    crs = this._crs,\r\n\t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t    min = bounds.min,\r\n\t\t    max = bounds.max,\r\n\t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t    [min.y, min.x, max.y, max.x] :\r\n\t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n", "export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n", "import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t  .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t    size = this._map.getSize(),\n\t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    container = this._container,\n\t\t    size = b.getSize(),\n\t\t    m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t    dashArray = [],\n\t\t\t    dashValue,\n\t\t\t    i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore();  // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t    parts = layer._parts,\n\t\t    len = parts.length,\n\t\t    ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t    ctx = this._ctx,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n", "import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t    fill = layer._fill,\n\t\t    options = layer.options,\n\t\t    container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t    options.dashArray.join(' ') :\n\t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t    r = Math.round(layer._radius),\n\t\t    r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    size = b.getSize(),\n\t\t    container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t    options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n", "import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n", "import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n", "export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n", "export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t    size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width  = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t        this._map.containerPointToLatLng(this._startPoint),\n\t\t        this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t//  view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t    oldZoom = map.getZoom(),\n\t\t    delta = map.options.zoomDelta,\n\t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second\u00B2.\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t    halfWidth = Math.round(worldWidth / 2),\n\t\t    dx = this._initialWorldOffset,\n\t\t    x = this._draggable._newPos.x,\n\t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t    options = map.options,\n\n\t\t    noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t    ease = options.easeLinearity,\n\n\t\t\t    speedVector = direction.multiplyBy(ease / duration),\n\t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft:    [37],\n\t\tright:   [39],\n\t\tdown:    [40],\n\t\tup:      [38],\n\t\tzoomIn:  [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t    docEl = document.documentElement,\n\t\t    top = body.scrollTop || docEl.scrollTop,\n\t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t    map = this._map,\n\t\t    offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t    zoom = map.getZoom(),\n\t\t    snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n", "import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n", "/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\tif (!('_leaflet_id' in obj)) {\r\n\t\tobj['_leaflet_id'] = ++lastId;\r\n\t}\r\n\treturn obj._leaflet_id;\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t    min = range[0],\r\n\t    d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, precision?: Number|false): Number\r\n// Returns the number `num` rounded with specified `precision`.\r\n// The default `precision` value is 6 decimal places.\r\n// `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\nexport function formatNum(num, precision) {\r\n\tif (precision === false) { return num; }\r\n\tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n", "import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\tUtil.setOptions(this);\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\tdelete proto.statics;\r\n\tdelete proto.includes;\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tproto.options = parentProto.options ? Util.create(parentProto.options) : {};\r\n\t\tUtil.extend(proto.options, props.options);\r\n\t}\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tvar parentOptions = this.prototype.options;\r\n\tUtil.extend(this.prototype, props);\r\n\tif (props.options) {\r\n\t\tthis.prototype.options = parentOptions;\r\n\t\tthis.mergeOptions(props.options);\r\n\t}\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\t/* global L: true */\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n", "import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!arguments.length) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tvar removeAll = arguments.length === 1;\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tif (removeAll) {\r\n\t\t\t\t\tthis._off(types[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context, _once) {\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if fn already there\r\n\t\tif (this._listens(type, fn, context) !== false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar newListener = {fn: fn, ctx: context};\r\n\t\tif (_once) {\r\n\t\t\tnewListener.once = true;\r\n\t\t}\r\n\r\n\t\tthis._events = this._events || {};\r\n\t\tthis._events[type] = this._events[type] || [];\r\n\t\tthis._events[type].push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t    i,\r\n\t\t    len;\r\n\r\n\t\tif (!this._events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlisteners = this._events[type];\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (arguments.length === 1) { // remove all\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// Set all removed listeners to noop\r\n\t\t\t\t// so they are not called if remove happens in fire\r\n\t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find fn and remove it\r\n\t\tvar index = this._listens(type, fn, context);\r\n\t\tif (index !== false) {\r\n\t\t\tvar listener = listeners[index];\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\tlistener.fn = Util.falseFn;\r\n\r\n\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t}\r\n\t\t\tlisteners.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide a data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n\t\t\t\t\tvar fn = l.fn;\r\n\t\t\t\t\tif (l.once) {\r\n\t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String, propagate?: Boolean): Boolean\r\n\t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n\tlistens: function (type, fn, context, propagate) {\r\n\t\tif (typeof type !== 'string') {\r\n\t\t\tconsole.warn('\"string\" type argument expected');\r\n\t\t}\r\n\r\n\t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n\t\tvar _fn = fn;\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tpropagate = !!fn;\r\n\t\t\t_fn = undefined;\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) {\r\n\t\t\tif (this._listens(type, _fn, context) !== false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// returns the index (number) or false\r\n\t_listens: function (type, fn, context) {\r\n\t\tif (!this._events) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events[type] || [];\r\n\t\tif (!fn) {\r\n\t\t\treturn !!listeners.length;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn, true);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n", "import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t    y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t       point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t        formatNum(this.x) + ', ' +\r\n\t\t        formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: Bounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar min2, max2;\r\n\t\tif (!obj) { return this; }\r\n\r\n\t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n\t\t\tmin2 = max2 = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t\tmin2 = obj.min;\r\n\t\t\tmax2 = obj.max;\r\n\r\n\t\t\tif (!min2 || !max2) { return this; }\r\n\t\t}\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = min2.clone();\r\n\t\t\tthis.max = max2.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn toPoint(\r\n\t\t        (this.min.x + this.max.x) / 2,\r\n\t\t        (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn toPoint(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn toPoint(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t       (max.x <= this.max.x) &&\r\n\t\t       (min.y >= this.min.y) &&\r\n\t\t       (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\r\n\t// @method pad(bufferRatio: Number): Bounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar min = this.min,\r\n\t\tmax = this.max,\r\n\t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n\t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n\t\treturn toBounds(\r\n\t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n\t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n\t},\r\n\r\n\r\n\t// @method equals(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n\tequals: function (bounds) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n\t\t\tthis.max.equals(bounds.getBottomRight());\r\n\t},\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n", "import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n", "import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t        Math.abs(this.lat - obj.lat),\r\n\t\t        Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t        Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t        Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n", "\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t    scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t    s = this.scale(zoom),\r\n\t\t    min = this.transformation.transform(b.min, s),\r\n\t\t    max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t    lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t    alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t    newCenter = this.wrapLatLng(center),\r\n\t\t    latShift = center.lat - newCenter.lat,\r\n\t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t    ne = bounds.getNorthEast(),\r\n\t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n", "import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see https://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t    lat1 = latlng1.lat * rad,\n\t\t    lat2 = latlng2.lat * rad,\n\t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    max = this.MAX_LATITUDE,\r\n\t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t    sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n", "import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t        (point.x / scale - this._b) / this._a,\r\n\t\t        (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n", "import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n", "import Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n", "import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n *   alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nvar ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nvar ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nvar edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nvar webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// **Deprecated.** `true` for any browser running on an Android platform.\r\nvar android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\nvar android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\nvar androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nvar opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nvar chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nvar gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nvar safari = !chrome && userAgentContains('safari');\r\n\r\nvar phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nvar opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nvar win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nvar ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nvar webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nvar gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nvar any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nvar mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nvar mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nvar mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nvar msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nvar pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touchNative: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// **This does not necessarily mean** that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nvar touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\nvar touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nvar mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nvar mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nvar retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nvar passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nvar canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nvar svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\nvar inlineSvg = !!svg && (function () {\r\n\tvar div = document.createElement('div');\r\n\tdiv.innerHTML = '<svg/>';\r\n\treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n})();\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nvar vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Mac platform\r\nvar mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Linux platform\r\nvar linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n\r\n\r\nexport default {\r\n\tie: ie,\r\n\tielt9: ielt9,\r\n\tedge: edge,\r\n\twebkit: webkit,\r\n\tandroid: android,\r\n\tandroid23: android23,\r\n\tandroidStock: androidStock,\r\n\topera: opera,\r\n\tchrome: chrome,\r\n\tgecko: gecko,\r\n\tsafari: safari,\r\n\tphantom: phantom,\r\n\topera12: opera12,\r\n\twin: win,\r\n\tie3d: ie3d,\r\n\twebkit3d: webkit3d,\r\n\tgecko3d: gecko3d,\r\n\tany3d: any3d,\r\n\tmobile: mobile,\r\n\tmobileWebkit: mobileWebkit,\r\n\tmobileWebkit3d: mobileWebkit3d,\r\n\tmsPointer: msPointer,\r\n\tpointer: pointer,\r\n\ttouch: touch,\r\n\ttouchNative: touchNative,\r\n\tmobileOpera: mobileOpera,\r\n\tmobileGecko: mobileGecko,\r\n\tretina: retina,\r\n\tpassiveEvents: passiveEvents,\r\n\tcanvas: canvas,\r\n\tsvg: svg,\r\n\tvml: vml,\r\n\tinlineSvg: inlineSvg,\r\n\tmac: mac,\r\n\tlinux: linux\r\n};\r\n", "import * as DomEvent from './DomEvent';\nimport Browser from '../core/Browser';\nimport {falseFn} from '../core/Util';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\nvar POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\nvar POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\nvar POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar pEvent = {\n\ttouchstart  : POINTER_DOWN,\n\ttouchmove   : POINTER_MOVE,\n\ttouchend    : POINTER_UP,\n\ttouchcancel : POINTER_CANCEL\n};\nvar handle = {\n\ttouchstart  : _onPointerStart,\n\ttouchmove   : _handlePointer,\n\ttouchend    : _handlePointer,\n\ttouchcancel : _handlePointer\n};\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler) {\n\tif (type === 'touchstart') {\n\t\t_addPointerDocListener();\n\t}\n\tif (!handle[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn falseFn;\n\t}\n\thandler = handle[type].bind(this, handler);\n\tobj.addEventListener(pEvent[type], handler, false);\n\treturn handler;\n}\n\nexport function removePointerListener(obj, type, handler) {\n\tif (!pEvent[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn;\n\t}\n\tobj.removeEventListener(pEvent[type], handler, false);\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _addPointerDocListener() {\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _handlePointer(handler, e) {\n\tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _onPointerStart(handler, e) {\n\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\tDomEvent.preventDefault(e);\n\t}\n\t_handlePointer(handler, e);\n}\n", "import * as DomEvent from './DomEvent';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\nfunction makeDblclick(event) {\r\n\t// in modern browsers `type` cannot be just overridden:\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n\tvar newEvent = {},\r\n\t    prop, i;\r\n\tfor (i in event) {\r\n\t\tprop = event[i];\r\n\t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n\t}\r\n\tevent = newEvent;\r\n\tnewEvent.type = 'dblclick';\r\n\tnewEvent.detail = 2;\r\n\tnewEvent.isTrusted = false;\r\n\tnewEvent._simulated = true; // for debug purposes\r\n\treturn newEvent;\r\n}\r\n\r\nvar delay = 200;\r\nexport function addDoubleTapListener(obj, handler) {\r\n\t// Most browsers handle double tap natively\r\n\tobj.addEventListener('dblclick', handler);\r\n\r\n\t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n\t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n\t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n\tvar last = 0,\r\n\t    detail;\r\n\tfunction simDblclick(e) {\r\n\t\tif (e.detail !== 1) {\r\n\t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (e.pointerType === 'mouse' ||\r\n\t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// When clicking on an <input>, the browser generates a click on its\r\n\t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n\t\t// This ignores clicks on elements which are a label with a 'for'\r\n\t\t// attribute (or children of such a label), but not children of\r\n\t\t// a <input>.\r\n\t\tvar path = DomEvent.getPropagationPath(e);\r\n\t\tif (path.some(function (el) {\r\n\t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n\t\t}) &&\r\n\t\t\t!path.some(function (el) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tel instanceof HTMLInputElement ||\r\n\t\t\t\t\tel instanceof HTMLSelectElement\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now();\r\n\t\tif (now - last <= delay) {\r\n\t\t\tdetail++;\r\n\t\t\tif (detail === 2) {\r\n\t\t\t\thandler(makeDblclick(e));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdetail = 1;\r\n\t\t}\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tobj.addEventListener('click', simDblclick);\r\n\r\n\treturn {\r\n\t\tdblclick: handler,\r\n\t\tsimDblclick: simDblclick\r\n\t};\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, handlers) {\r\n\tobj.removeEventListener('dblclick', handlers.dblclick);\r\n\tobj.removeEventListener('click', handlers.simDblclick);\r\n}\r\n", "import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outlineStyle;\r\n\telement.style.outlineStyle = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outlineStyle = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n", "import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, types: String): this\r\n// Removes all previously added listeners of given types.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement): this\r\n// Removes all previously added listeners from given HTMLElement\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (arguments.length === 1) {\r\n\t\tbatchRemove(obj);\r\n\t\tdelete obj[eventsKey];\r\n\r\n\t} else if (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tif (arguments.length === 2) {\r\n\t\t\tbatchRemove(obj, function (type) {\r\n\t\t\t\treturn Util.indexOf(types, type) !== -1;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction batchRemove(obj, filterFn) {\r\n\tfor (var id in obj[eventsKey]) {\r\n\t\tvar type = id.split(/\\d/)[0];\r\n\t\tif (!filterFn || filterFn(type)) {\r\n\t\t\tremoveOne(obj, type, null, null, id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\thandler = addPointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context, id) {\r\n\tid = id || type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\tremoveDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n\tel['_leaflet_disable_click'] = true;\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getPropagationPath(ev: DOMEvent): Array\r\n// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n// Returns an array containing the `HTMLElement`s that the given DOM event\r\n// should propagate to (if not stopped).\r\nexport function getPropagationPath(ev) {\r\n\tif (ev.composedPath) {\r\n\t\treturn ev.composedPath();\r\n\t}\r\n\r\n\tvar path = [];\r\n\tvar el = ev.target;\r\n\r\n\twhile (el) {\r\n\t\tpath.push(el);\r\n\t\tel = el.parentNode;\r\n\t}\r\n\treturn path;\r\n}\r\n\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n\r\n//  except , Safari and\r\n// We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n// except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\nvar wheelPxFactor =\r\n\t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n\tBrowser.mac ? window.devicePixelRatio * 3 :\r\n\twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t       0;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n", "import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n *\n * myPositionMarker.on(\"click\", function() {\n * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n * \tpos.y -= 25;\n * \tvar fx = new L.PosAnimation();\n *\n * \tfx.once('end',function() {\n * \t\tpos.y += 25;\n * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n * \t});\n *\n * \tfx.run(myPositionMarker._icon, pos, 0.3);\n * });\n *\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t    duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n", "import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t    to = this.project(targetCenter),\r\n\t\t    size = this.getSize(),\r\n\t\t    startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t    u1 = (to.distanceTo(from)) || 1,\r\n\t\t    rho = 1.42,\r\n\t\t    rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t    s2 = i ? w1 : w0,\r\n\t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t    b = t1 / b1,\r\n\t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t    // thus triggering an infinite loop in flyTo\r\n\t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t    S = (r(1) - r0) / rho,\r\n\t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t    s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: padding options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// padding options to fit the display to more restricted bounds.\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t    pixelCenter = this.project(this.getCenter()),\r\n\t\t    pixelPoint = this.project(latlng),\r\n\t\t    pixelBounds = this.getPixelBounds(),\r\n\t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n\t\t    paddedSize = paddedBounds.getSize();\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n\t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n\t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n\t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n\t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t    oldCenter = oldSize.divideBy(2).round(),\r\n\t\t    newCenter = newSize.divideBy(2).round(),\r\n\t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t    onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar c = error.code,\r\n\t\t    message = error.message ||\r\n\t\t            (c === 1 ? 'permission denied' :\r\n\t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t    lng = pos.coords.longitude,\r\n\t\t    latlng = new LatLng(lat, lng),\r\n\t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t    options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t    pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter.clone();\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t    min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    nw = bounds.getNorthWest(),\r\n\t\t    se = bounds.getSouthEast(),\r\n\t\t    size = this.getSize().subtract(padding),\r\n\t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t    scalex = size.x / boundsSize.x,\r\n\t\t    scaley = size.y / boundsSize.y,\r\n\t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom, noMoveStart) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, noMoveStart)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data, supressEvent) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\tif (!supressEvent) {\r\n\t\t\t// @event zoom: Event\r\n\t\t\t// Fired repeatedly during any change in zoom level,\r\n\t\t\t// including zoom and fly animations.\r\n\t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\t\tthis.fire('zoom', data);\r\n\t\t\t}\r\n\r\n\t\t\t// @event move: Event\r\n\t\t\t// Fired repeatedly during any movement of the map,\r\n\t\t\t// including pan and fly animations.\r\n\t\t\tthis.fire('move', data);\r\n\t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map zoom changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing\r\n\t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop  = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t    target,\r\n\t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t    src = e.target || e.srcElement,\r\n\t\t    dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_isClickDisabled: function (el) {\r\n\t\twhile (el && el !== this._container) {\r\n\t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n\t\t\tel = el.parentNode;\r\n\t\t}\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tvar el = (e.target || e.srcElement);\r\n\t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(el);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n\t\t}\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\tvar targets = this._findEventTargets(e, type);\r\n\r\n\t\tif (canvasTargets) {\r\n\t\t\tvar filtered = []; // pick only targets with listeners\r\n\t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n\t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n\t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttargets = filtered.concat(targets);\r\n\t\t}\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tif (type === 'contextmenu') {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar target = targets[0];\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t    ),\r\n\t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t    transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t    z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t    ._moveStart(true, options.noMoveStart || false)\r\n\t\t\t    ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\tif (!this._tempFireZoomEvent) {\r\n\t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n\t\t}\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\tif (this._tempFireZoomEvent) {\r\n\t\t\tthis.fire('zoom');\r\n\t\t}\r\n\t\tdelete this._tempFireZoomEvent;\r\n\r\n\t\tthis.fire('move');\r\n\r\n\t\tthis._moveEnd(true);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n", "\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control Options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t    pos = this.getPosition(),\r\n\t\t    corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t    l = 'leaflet-',\r\n\t\t    container = this._controlContainer =\r\n\t\t            DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n", "\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n *     \"<someName1>\": layer1,\r\n *     \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\t\tthis._preventClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t    container = this._container = DomUtil.create('div', className),\r\n\t\t    collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tDomEvent.on(container, {\r\n\t\t\t\tmouseenter: this._expandSafely,\r\n\t\t\t\tmouseleave: this.collapse\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\t\tlink.setAttribute('role', 'button');\r\n\r\n\t\tDomEvent.on(link, {\r\n\t\t\tkeydown: function (e) {\r\n\t\t\t\tif (e.keyCode === 13) {\r\n\t\t\t\t\tthis._expandSafely();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Certain screen readers intercept the key event and instead send a click event\r\n\t\t\tclick: function (e) {\r\n\t\t\t\tDomEvent.preventDefault(e);\r\n\t\t\t\tthis._expandSafely();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n\t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t    checked = this._map.hasLayer(obj.layer),\r\n\t\t    input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('span');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\t// expanding the control on mobile with a click can cause adding a layer - we don't want this\r\n\t\tif (this._preventClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t    removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input,\r\n\t\t    layer,\r\n\t\t    zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expandSafely: function () {\r\n\t\tvar section = this._section;\r\n\t\tthis._preventClick = true;\r\n\t\tDomEvent.on(section, 'click', DomEvent.preventDefault);\r\n\t\tthis.expand();\r\n\t\tvar that = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\tDomEvent.off(section, 'click', DomEvent.preventDefault);\r\n\t\t\tthat._preventClick = false;\r\n\t\t});\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">&#x2212;</span>'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '<span aria-hidden=\"true\">&#x2212;</span>',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t    container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t    options = this.options;\r\n\r\n\t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t        zoomName + '-in',  container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t    className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n", "\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t    container = DomUtil.create('div', className),\n\t\t    options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t    y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t    maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t    d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t    d >= 5 ? 5 :\n\t\t    d >= 3 ? 3 :\n\t\t    d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n", "\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport Browser from '../core/Browser';\r\n\r\nvar ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String|false = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('layeradd', this._addAttribution, this);\r\n\t},\r\n\r\n\t_addAttribution: function (ev) {\r\n\t\tif (ev.layer.getAttribution) {\r\n\t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n\t\t\tev.layer.once('remove', function () {\r\n\t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String|false): this\r\n\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n", "import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n", "import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n", "import Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n", "import {Evented} from '../core/Events';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag(true);\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length !== 1) {\r\n\t\t\t// Finish dragging to avoid conflict with touchZoom\r\n\t\t\tif (Draggable._dragging === this) {\r\n\t\t\t\tthis.finishDrag();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t    sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\t\tthis._startPos = DomUtil.getPosition(this._element);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tvar mouseevent = e.type === 'mousedown';\r\n\t\tDomEvent.on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n\t\tDomEvent.on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._updatePosition();\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function () {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function (noInertia) {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tDomEvent.off(document, 'mousemove touchmove', this._onMove, this);\r\n\t\tDomEvent.off(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tvar fireDragend = this._moved && this._moving;\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\r\n\t\tif (fireDragend) {\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tnoInertia: noInertia,\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n});\r\n", "import * as LineUtil from './LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from './Point';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t    edges = [1, 4, 2, 8],\r\n\t    i, j, k,\r\n\t    a, b,\r\n\t    len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n\r\n/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n */\r\nexport function polygonCenter(latlngs, crs) {\r\n\tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!LineUtil.isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tarea = x = y = 0;\r\n\r\n\t// polygon centroid algorithm;\r\n\tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n\t\tp1 = points[i];\r\n\t\tp2 = points[j];\r\n\r\n\t\tf = p1.y * p2.x - p2.y * p1.x;\r\n\t\tx += (p1.x + p2.x) * f;\r\n\t\ty += (p1.y + p2.y) * f;\r\n\t\tarea += f * 3;\r\n\t}\r\n\r\n\tif (area === 0) {\r\n\t\t// Polygon is so small that all points are on same pixel.\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tcenter = [x / area, y / area];\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n\r\n/* @function centroid(latlngs: LatLng[]): LatLng\r\n * Returns the 'center of mass' of the passed LatLngs.\r\n */\r\nexport function centroid(coords) {\r\n\tvar latSum = 0;\r\n\tvar lngSum = 0;\r\n\tvar len = 0;\r\n\tfor (var i = 0; i < coords.length; i++) {\r\n\t\tvar latlng = toLatLng(coords[i]);\r\n\t\tlatSum += latlng.lat;\r\n\t\tlngSum += latlng.lng;\r\n\t\tlen++;\r\n\t}\r\n\treturn toLatLng([latSum / len, lngSum / len]);\r\n}\r\n", "import {Point, toPoint} from './Point';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {centroid} from './PolyUtil';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t    // stage 1: vertex reduction\r\n\t    points = _reducePoints(points, sqTolerance);\r\n\r\n\t    // stage 2: Douglas-Peucker simplification\r\n\t    points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t    markers = new ArrayConstructor(len);\r\n\r\n\t    markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t    newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t    codeB = _getBitCode(b, bounds),\r\n\r\n\t    codeOut, p, newCode;\r\n\r\n\t    // save 2nd code to avoid calculating it on the next segment\r\n\t    _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t    dy = b.y - a.y,\r\n\t    min = bounds.min,\r\n\t    max = bounds.max,\r\n\t    x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t    dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t    y = p1.y,\r\n\t    dx = p2.x - x,\r\n\t    dy = p2.y - y,\r\n\t    dot = dx * dx + dy * dy,\r\n\t    t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n\r\n/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n */\r\nexport function polylineCenter(latlngs, crs) {\r\n\tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n\t}\r\n\r\n\t// The line is so small in the current view that all points are on the same pixel.\r\n\tif (halfDist === 0) {\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n\t\t\tp1 = points[i];\r\n\t\t\tp2 = points[i + 1];\r\n\t\t\tsegDist = p1.distanceTo(p2);\r\n\t\t\tdist += segDist;\r\n\r\n\t\t\tif (dist > halfDist) {\r\n\t\t\t\tratio = (dist - halfDist) / segDist;\r\n\t\t\t\tcenter = [\r\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n", "import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    r = this.R,\r\n\t\t    y = latlng.lat * d,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t    r = this.R,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    ts = Math.exp(-point.y / r),\r\n\t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n", "/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leaflet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n", "import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n", "import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n", "import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t    dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n", "import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n", "import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn Util.stamp(layer) in this._layers;\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t *     layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t    maxZoom = -Infinity,\n\t\t    oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n", "\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Interactive layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t    i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n", "import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n *  * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n", "import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport Browser from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n *     iconUrl: 'my-icon.png',\r\n *     iconRetinaUrl: 'my-icon@2x.png',\r\n *     iconSize: [38, 95],\r\n *     iconAnchor: [22, 94],\r\n *     popupAnchor: [-3, -76],\r\n *     shadowUrl: 'my-icon-shadow.png',\r\n *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n *     shadowSize: [68, 95],\r\n *     shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0],\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t    anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t            size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width  = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n", "import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl:       'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl:     'marker-shadow.png',\n\t\ticonSize:    [25, 41],\n\t\ticonAnchor:  [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize:  [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_stripUrl: function (path) {\t// separate function to use in tests\n\t\tvar strip = function (str, re, idx) {\n\t\t\tvar match = re.exec(str);\n\t\t\treturn match && match[idx];\n\t\t};\n\t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n\t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t           DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\t\tpath = this._stripUrl(path);\n\t\tif (path) { return path; }\n\t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n\t\tif (!link) { return ''; }\n\t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n\t}\n});\n", "import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t    map = marker._map,\n\t\t    speed = this._marker.options.autoPanSpeed,\n\t\t    padding = this._marker.options.autoPanPadding,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    bounds = map.getPixelBounds(),\n\t\t    origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t    shadow = marker._shadow,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t    .fire('moveend')\n\t\t    .fire('dragend', e);\n\t}\n});\n", "import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = 'Marker'\r\n\t\t// Text for the `alt` attribute of the icon image.\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\talt: 'Marker',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @option autoPanOnFocus: Boolean = true\r\n\t\t// When `true`, the map will pan whenever the marker is focused (via\r\n\t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n\t\t// visible within the map's bounds\r\n\t\tautoPanOnFocus: true,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t    addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t\ticon.setAttribute('role', 'button');\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.on(icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t    addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.off(this._icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_panOnFocus: function () {\r\n\t\tvar map = this._map;\r\n\t\tif (!map) { return; }\r\n\r\n\t\tvar iconOpts = this.options.icon.options;\r\n\t\tvar size = iconOpts.iconSize ? point(iconOpts.iconSize) : point(0, 0);\r\n\t\tvar anchor = iconOpts.iconAnchor ? point(iconOpts.iconAnchor) : point(0, 0);\r\n\r\n\t\tmap.panInside(this._latlng, {\r\n\t\t\tpaddingTopLeft: anchor,\r\n\t\t\tpaddingBottomRight: size.subtract(anchor)\r\n\t\t});\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n", "import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n\t\t  (this._renderer.options.tolerance || 0);\n\t}\n});\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t    r2 = this._radiusY || r,\n\t\t    w = this._clickTolerance(),\n\t\t    p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n", "import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t    lat = this._latlng.lat,\n\t\t    map = this._map,\n\t\t    crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t    latR = (this._mRadius / Earth.R) / d,\n\t\t\t    top = map.project([lat + latR, lng]),\n\t\t\t    bottom = map.project([lat - latR, lng]),\n\t\t\t    p = top.add(bottom).divideBy(2),\n\t\t\t    lat2 = map.unproject(p).lat,\n\t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n", "import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t    minPoint = null,\n\t\t    closest = LineUtil._sqClosestPointOnSegment,\n\t\t    p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t    flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t    p = new Point(w, w);\n\n\t\tif (!this._rawPxBounds) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t    len = latlngs.length,\n\t\t    i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t    i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t    tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t    w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n", "import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n *   [ // first polygon\n *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n *   ],\n *   [ // second polygon\n *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n *   ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t    len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t    w = this.options.weight,\n\t\t    p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t    part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n", "import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t    i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t    coords = geometry ? geometry.coordinates : null,\r\n\t    layers = [],\r\n\t    pointToLayer = options && options.pointToLayer,\r\n\t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t    latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar geoLayer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (geoLayer) {\r\n\t\t\t\tlayers.push(geoLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'FeatureCollection':\r\n\t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n\t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n\t\t\tif (featureLayer) {\r\n\t\t\t\tlayers.push(featureLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngToCoords(latlng, precision) {\r\n\tlatlng = toLatLng(latlng);\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], LineUtil.isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed && coords.length > 0) {\r\n\t\tcoords.push(coords[0].slice());\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t    multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number|false): Object\r\n\t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n\t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t    jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n", "import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t    bounds = new Bounds(\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t    size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width  = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center of the ImageOverlay.\r\n\tgetCenter: function () {\r\n\t\treturn this._bounds.getCenter();\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n", "import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\t// On some browsers autoplay will only work with `muted: true`\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true,\r\n\r\n\t\t// @option keepAspectRatio: Boolean = true\r\n\t\t// Whether the video will save aspect ratio after the projection.\r\n\t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n\t\tkeepAspectRatio: true,\r\n\r\n\t\t// @option muted: Boolean = false\r\n\t\t// Whether the video starts on mute when loaded.\r\n\t\tmuted: false,\r\n\r\n\t\t// @option playsInline: Boolean = true\r\n\t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n\t\tplaysInline: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(vid, this.options.className); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n\t\t\tvid.style['objectFit'] = 'fill';\r\n\t\t}\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tvid.muted = !!this.options.muted;\r\n\t\tvid.playsInline = !!this.options.playsInline;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n", "import {ImageOverlay} from './ImageOverlay';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as Util from '../core/Util';\n\n/*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\nexport var SVGOverlay = ImageOverlay.extend({\n\t_initImage: function () {\n\t\tvar el = this._image = this._url;\n\n\t\tDomUtil.addClass(el, 'leaflet-image-layer');\n\t\tif (this._zoomAnimated) { DomUtil.addClass(el, 'leaflet-zoom-animated'); }\n\t\tif (this.options.className) { DomUtil.addClass(el, this.options.className); }\n\n\t\tel.onselectstart = Util.falseFn;\n\t\tel.onmousemove = Util.falseFn;\n\t}\n\n\t// @method getElement(): SVGElement\n\t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n\t// used by this overlay.\n});\n\n\n// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n// A viewBox attribute is required on the SVG element to zoom in and out properly.\n\nexport function svgOverlay(el, bounds, options) {\n\treturn new SVGOverlay(el, bounds, options);\n}\n", "import {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng, LatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Interactive layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If true, the popup/tooltip will listen to the mouse events.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option offset: Point = Point(0, 0)\r\n\t\t// The offset of the overlay position.\r\n\t\toffset: [0, 0],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the overlay.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = undefined\r\n\t\t// `Map pane` where the overlay will be added.\r\n\t\tpane: undefined,\r\n\r\n\t\t// @option content: String|HTMLElement|Function = ''\r\n\t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n\t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\t\tcontent: ''\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tif (options && (options instanceof LatLng || Util.isArray(options))) {\r\n\t\t\tthis._latlng = toLatLng(options);\r\n\t\t\tUtil.setOptions(this, source);\r\n\t\t} else {\r\n\t\t\tUtil.setOptions(this, options);\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\t\tif (this.options.content) {\r\n\t\t\tthis._content = this.options.content;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the overlay to the map.\r\n\t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\t\tif (!map.hasLayer(this)) {\r\n\t\t\tmap.addLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method close(): this\r\n\t// Closes the overlay.\r\n\t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n\t// and `layer.closePopup()`/`.closeTooltip()`.\r\n\tclose: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.removeLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method toggle(layer?: Layer): this\r\n\t// Opens or closes the overlay bound to layer depending on its current state.\r\n\t// Argument may be omitted only for overlay bound to layer.\r\n\t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n\ttoggle: function (layer) {\r\n\t\tif (this._map) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\tthis._source = layer;\r\n\t\t\t} else {\r\n\t\t\t\tlayer = this._source;\r\n\t\t\t}\r\n\t\t\tthis._prepareOpen();\r\n\r\n\t\t\t// open the overlay on the map\r\n\t\t\tthis.openOn(layer._map);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.removeInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace DivOverlay\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of the overlay.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the overlay will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the overlay.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n\t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Returns the HTML container of the overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the overlay is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this overlay in front of other overlays (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this overlay to the back of other overlays (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n\t_prepareOpen: function (latlng) {\r\n\t\tvar source = this._source;\r\n\t\tif (!source._map) { return false; }\r\n\r\n\t\tif (source instanceof FeatureGroup) {\r\n\t\t\tsource = null;\r\n\t\t\tvar layers = this._source._layers;\r\n\t\t\tfor (var id in layers) {\r\n\t\t\t\tif (layers[id]._map) {\r\n\t\t\t\t\tsource = layers[id];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n\t\t\t// set overlay source to this layer\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tif (source.getCenter) {\r\n\t\t\t\tlatlng = source.getCenter();\r\n\t\t\t} else if (source.getLatLng) {\r\n\t\t\t\tlatlng = source.getLatLng();\r\n\t\t\t} else if (source.getBounds) {\r\n\t\t\t\tlatlng = source.getBounds().getCenter();\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLatLng(latlng);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t// update the overlay (content, layout, etc...)\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\r\n\t\t// @namespace DivOverlay\r\n\t\t// @section DivOverlay events\r\n\t\t// @event contentupdate: Event\r\n\t\t// Fired when the content of the overlay is updated\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t    offset = toPoint(this.options.offset),\r\n\t\t    anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n\r\nMap.include({\r\n\t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (!(overlay instanceof OverlayClass)) {\r\n\t\t\toverlay = new OverlayClass(options).setContent(content);\r\n\t\t}\r\n\t\tif (latlng) {\r\n\t\t\toverlay.setLatLng(latlng);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n\r\n\r\nLayer.include({\r\n\t_initOverlay: function (OverlayClass, old, content, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (overlay instanceof OverlayClass) {\r\n\t\t\tUtil.setOptions(overlay, options);\r\n\t\t\toverlay._source = this;\r\n\t\t} else {\r\n\t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n\t\t\toverlay.setContent(content);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {Path} from './vector/Path';\r\nimport {FeatureGroup} from './FeatureGroup';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n *\r\n * A popup can be also standalone:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n * or\r\n * ```js\r\n * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane',\r\n\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\t// The scrollable container can be styled using the\r\n\t\t// `leaflet-popup-scrolled` CSS class selector.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Alternative to `map.openPopup(popup)`.\r\n\t// Adds the popup to the map and closes the previous one.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n\t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n\t\t\tmap.removeLayer(map._popup);\r\n\t\t}\r\n\t\tmap._popup = this;\r\n\r\n\t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this.close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t    container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(container, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n\t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">&#215;</span>';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', function (ev) {\r\n\t\t\t\tDomEvent.preventDefault(ev);\r\n\t\t\t\tthis.close();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t    style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t    maxHeight = this.options.maxHeight,\r\n\t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t    anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\t// We can endlessly recurse if keepInView is set and the view resets.\r\n\t\t// Let's guard against that by exiting early if we're responding to our own autopan.\r\n\t\tif (this._autopanning) {\r\n\t\t\tthis._autopanning = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar map = this._map,\r\n\t\t    marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t    containerWidth = this._containerWidth,\r\n\t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t    padding = toPoint(this.options.autoPanPadding),\r\n\t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t    size = map.getSize(),\r\n\t\t    dx = 0,\r\n\t\t    dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\t// Track that we're autopanning, as this function will be re-ran on moveend\r\n\t\t\tif (this.options.keepInView) {\r\n\t\t\t\tthis._autopanning = true;\r\n\t\t\t}\r\n\r\n\t\t\tmap\r\n\t\t\t    .fire('autopanstart')\r\n\t\t\t    .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n// @alternative\r\n// @factory L.popup(latlng: LatLng, options?: Popup options)\r\n// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tthis._initOverlay(Popup, popup, latlng, options)\r\n\t\t  .openOn(this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tpopup = arguments.length ? popup : this._popup;\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (latlng) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (!(this instanceof FeatureGroup)) {\r\n\t\t\t\tthis._popup._source = this;\r\n\t\t\t}\r\n\t\t\tif (this._popup._prepareOpen(latlng || this._latlng)) {\r\n\t\t\t\t// open the popup on the map\r\n\t\t\t\tthis._popup.openOn(this._map);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.toggle(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tif (!this._popup || !this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\tvar target = e.layer || e.target;\r\n\t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n\t\t\t// treat it like a marker and figure out\r\n\t\t\t// if we should toggle it open/closed\r\n\t\t\tif (this._map.hasLayer(this._popup)) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(e.latlng);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._popup._source = target;\r\n\t\tthis.openPopup(e.latlng);\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n", "import {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as DomEvent from '../dom/DomEvent';\nimport * as Util from '../core/Util';\nimport {FeatureGroup} from './FeatureGroup';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n * If you want to just bind a tooltip to marker:\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Path overlays like polylines also have a `bindTooltip` method.\n *\n * A tooltip can be also standalone:\n *\n * ```js\n * var tooltip = L.tooltip()\n * \t.setLatLng(latlng)\n * \t.setContent('Hello world!<br />This is a nice tooltip.')\n * \t.addTo(map);\n * ```\n * or\n * ```js\n * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n * \t.addTo(map);\n * ```\n *\n *\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n *   move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n *   should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.addEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.removeEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (!this.options.permanent) {\n\t\t\tevents.preclick = this.close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\n\t\tthis._container.setAttribute('role', 'tooltip');\n\t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + Util.stamp(this));\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar subX, subY,\n\t\t    map = this._map,\n\t\t    container = this._container,\n\t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t    direction = this.options.direction,\n\t\t    tooltipWidth = container.offsetWidth,\n\t\t    tooltipHeight = container.offsetHeight,\n\t\t    offset = toPoint(this.options.offset),\n\t\t    anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight;\n\t\t} else if (direction === 'bottom') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = 0;\n\t\t} else if (direction === 'center') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'right') {\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'left') {\n\t\t\tsubX = tooltipWidth;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t}\n\n\t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n// @alternative\n// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n\t\t  .openOn(this);\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(tooltip: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\ttooltip.close();\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (this._tooltip && this.isTooltipOpen()) {\n\t\t\tthis.unbindTooltip();\n\t\t}\n\n\t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t    events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t    };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tevents.click = this._openTooltip;\n\t\t\tif (this._map) {\n\t\t\t\tthis._addFocusListeners();\n\t\t\t} else {\n\t\t\t\tevents.add = this._addFocusListeners;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tif (this._tooltip.options.sticky) {\n\t\t\tevents.mousemove = this._moveTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (latlng) {\n\t\tif (this._tooltip) {\n\t\t\tif (!(this instanceof FeatureGroup)) {\n\t\t\t\tthis._tooltip._source = this;\n\t\t\t}\n\t\t\tif (this._tooltip._prepareOpen(latlng)) {\n\t\t\t\t// open the tooltip on the map\n\t\t\t\tthis._tooltip.openOn(this._map);\n\n\t\t\t\tif (this.getElement) {\n\t\t\t\t\tthis._setAriaDescribedByOnLayer(this);\n\t\t\t\t} else if (this.eachLayer) {\n\t\t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\treturn this._tooltip.close();\n\t\t}\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.toggle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_addFocusListeners: function () {\n\t\tif (this.getElement) {\n\t\t\tthis._addFocusListenersOnLayer(this);\n\t\t} else if (this.eachLayer) {\n\t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n\t\t}\n\t},\n\n\t_addFocusListenersOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tDomEvent.on(el, 'focus', function () {\n\t\t\t\tthis._tooltip._source = layer;\n\t\t\t\tthis.openTooltip();\n\t\t\t}, this);\n\t\t\tDomEvent.on(el, 'blur', this.closeTooltip, this);\n\t\t}\n\t},\n\n\t_setAriaDescribedByOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n\t\t}\n\t},\n\n\n\t_openTooltip: function (e) {\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the map is moving, we will show the tooltip after it's done.\n\t\tif (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {\n\t\t\tthis._openOnceFlag = true;\n\t\t\tvar that = this;\n\t\t\tthis._map.once('moveend', function () {\n\t\t\t\tthat._openOnceFlag = false;\n\t\t\t\tthat._openTooltip(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tooltip._source = e.layer || e.target;\n\n\t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n", "import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\nimport {empty} from '../../dom/DomUtil';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t    options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n", "import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n", "import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords){\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n *         var ctx = tile.getContext('2d');\n *\n *         // return the tile so it can be rendered on screen\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords, done){\n *         var error;\n *\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // draw something asynchronously and pass the tile to the done() callback\n *         setTimeout(function() {\n *             done(error, tile);\n *         }, 1000);\n *\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t    nextFrame = false,\n\t\t    willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t    maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t    map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t    y2 = Math.floor(y / 2),\n\t\t    z2 = z - 1,\n\t\t    coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t    tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t    tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t    translate = level.origin.multiplyBy(scale)\n\t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t    crs = map.options.crs,\n\t\t    tileSize = this._tileSize = this.getTileSize(),\n\t\t    tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t    tileCenter = tileRange.getCenter(),\n\t\t    queue = [],\n\t\t    margin = this.options.keepBuffer,\n\t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t      isFinite(tileRange.min.y) &&\n\t\t      isFinite(tileRange.max.x) &&\n\t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t    tileSize = this.getTileSize(),\n\t\t    nwPoint = coords.scaleBy(tileSize),\n\t\t    sePoint = nwPoint.add(tileSize),\n\t\t    nw = map.unproject(nwPoint, coords.z),\n\t\t    se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t    coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t    key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n", "import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n", "import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t    crs = this._crs,\r\n\t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t    min = bounds.min,\r\n\t\t    max = bounds.max,\r\n\t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t    [min.y, min.x, max.y, max.x] :\r\n\t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n", "export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n", "import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t  .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t    size = this._map.getSize(),\n\t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    container = this._container,\n\t\t    size = b.getSize(),\n\t\t    m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t    dashArray = [],\n\t\t\t    dashValue,\n\t\t\t    i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore();  // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t    parts = layer._parts,\n\t\t    len = parts.length,\n\t\t    ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t    ctx = this._ctx,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n", "import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t    fill = layer._fill,\n\t\t    options = layer.options,\n\t\t    container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t    options.dashArray.join(' ') :\n\t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t    r = Math.round(layer._radius),\n\t\t    r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n", "import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    size = b.getSize(),\n\t\t    container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t    options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n", "import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n", "import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n", "export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n", "export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t    size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width  = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t        this._map.containerPointToLatLng(this._startPoint),\n\t\t        this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t//  view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t    oldZoom = map.getZoom(),\n\t\t    delta = map.options.zoomDelta,\n\t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t    halfWidth = Math.round(worldWidth / 2),\n\t\t    dx = this._initialWorldOffset,\n\t\t    x = this._draggable._newPos.x,\n\t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t    options = map.options,\n\n\t\t    noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t    ease = options.easeLinearity,\n\n\t\t\t    speedVector = direction.multiplyBy(ease / duration),\n\t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft:    [37],\n\t\tright:   [39],\n\t\tdown:    [40],\n\t\tup:      [38],\n\t\tzoomIn:  [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t    docEl = document.documentElement,\n\t\t    top = body.scrollTop || docEl.scrollTop,\n\t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t    map = this._map,\n\t\t    offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t    zoom = map.getZoom(),\n\t\t    snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n", "import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n", "import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\n", "(function (root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(['leaflet'], factory);\n\t} else if (typeof modules === 'object' && module.exports) {\n\t\t// define a Common JS module that relies on 'leaflet'\n\t\tmodule.exports = factory(require('leaflet'));\n\t} else {\n\t\t// Assume Leaflet is loaded into global object L already\n\t\tfactory(L);\n\t}\n}(this, function (L) {\n\t'use strict';\n\n\tL.TileLayer.Provider = L.TileLayer.extend({\n\t\tinitialize: function (arg, options) {\n\t\t\tvar providers = L.TileLayer.Provider.providers;\n\n\t\t\tvar parts = arg.split('.');\n\n\t\t\tvar providerName = parts[0];\n\t\t\tvar variantName = parts[1];\n\n\t\t\tif (!providers[providerName]) {\n\t\t\t\tthrow 'No such provider (' + providerName + ')';\n\t\t\t}\n\n\t\t\tvar provider = {\n\t\t\t\turl: providers[providerName].url,\n\t\t\t\toptions: providers[providerName].options\n\t\t\t};\n\n\t\t\t// overwrite values in provider from variant.\n\t\t\tif (variantName && 'variants' in providers[providerName]) {\n\t\t\t\tif (!(variantName in providers[providerName].variants)) {\n\t\t\t\t\tthrow 'No such variant of ' + providerName + ' (' + variantName + ')';\n\t\t\t\t}\n\t\t\t\tvar variant = providers[providerName].variants[variantName];\n\t\t\t\tvar variantOptions;\n\t\t\t\tif (typeof variant === 'string') {\n\t\t\t\t\tvariantOptions = {\n\t\t\t\t\t\tvariant: variant\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tvariantOptions = variant.options;\n\t\t\t\t}\n\t\t\t\tprovider = {\n\t\t\t\t\turl: variant.url || provider.url,\n\t\t\t\t\toptions: L.Util.extend({}, provider.options, variantOptions)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// replace attribution placeholders with their values from toplevel provider attribution,\n\t\t\t// recursively\n\t\t\tvar attributionReplacer = function (attr) {\n\t\t\t\tif (attr.indexOf('{attribution.') === -1) {\n\t\t\t\t\treturn attr;\n\t\t\t\t}\n\t\t\t\treturn attr.replace(/\\{attribution.(\\w*)\\}/g,\n\t\t\t\t\tfunction (match, attributionName) {\n\t\t\t\t\t\treturn attributionReplacer(providers[attributionName].options.attribution);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\t\t\tprovider.options.attribution = attributionReplacer(provider.options.attribution);\n\n\t\t\t// Compute final options combining provider options with any user overrides\n\t\t\tvar layerOpts = L.Util.extend({}, provider.options, options);\n\t\t\tL.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);\n\t\t}\n\t});\n\n\t/**\n\t * Definition of providers.\n\t * see http://leafletjs.com/reference.html#tilelayer for options in the options map.\n\t */\n\n\tL.TileLayer.Provider.providers = {\n\t\tOpenStreetMap: {\n\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution:\n\t\t\t\t\t'&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tMapnik: {},\n\t\t\t\tDE: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tCH: {\n\t\t\t\t\turl: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 18,\n\t\t\t\t\t\tbounds: [[45, 5], [48, 11]]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tFrance: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20,\n\t\t\t\t\t\tattribution: '&copy; OpenStreetMap France | {attribution.OpenStreetMap}'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tHOT: {\n\t\t\t\t\turl: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.OpenStreetMap}, ' +\n\t\t\t\t\t\t\t'Tiles style by <a href=\"https://www.hotosm.org/\" target=\"_blank\">Humanitarian OpenStreetMap Team</a> ' +\n\t\t\t\t\t\t\t'hosted by <a href=\"https://openstreetmap.fr/\" target=\"_blank\">OpenStreetMap France</a>'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tBZH: {\n\t\t\t\t\turl: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution: '{attribution.OpenStreetMap}, Tiles courtesy of <a href=\"http://www.openstreetmap.bzh/\" target=\"_blank\">Breton OpenStreetMap Team</a>',\n\t\t\t\t\t\tbounds: [[46.2, -5.5], [50, 0.7]]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOpenSeaMap: {\n\t\t\turl: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: 'Map data: &copy; <a href=\"http://www.openseamap.org\">OpenSeaMap</a> contributors'\n\t\t\t}\n\t\t},\n\t\tOPNVKarte: {\n\t\t\turl: 'https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map <a href=\"https://memomaps.de/\">memomaps.de</a> <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>, map data {attribution.OpenStreetMap}'\n\t\t\t}\n\t\t},\n\t\tOpenTopoMap: {\n\t\t\turl: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 17,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap}, <a href=\"http://viewfinderpanoramas.org\">SRTM</a> | Map style: &copy; <a href=\"https://opentopomap.org\">OpenTopoMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tOpenRailwayMap: {\n\t\t\turl: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href=\"https://www.OpenRailwayMap.org\">OpenRailwayMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tOpenFireMap: {\n\t\t\turl: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href=\"http://www.openfiremap.org\">OpenFireMap</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tSafeCast: {\n\t\t\turl: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 16,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href=\"https://blog.safecast.org/about/\">SafeCast</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t}\n\t\t},\n\t\tStadia: {\n\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: '&copy; <a href=\"https://stadiamaps.com/\">Stadia Maps</a>, &copy; <a href=\"https://openmaptiles.org/\">OpenMapTiles</a> &copy; <a href=\"http://openstreetmap.org\">OpenStreetMap</a> contributors'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tAlidadeSmooth: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tAlidadeSmoothDark: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tOSMBright: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/osm_bright/{z}/{x}/{y}{r}.png'\n\t\t\t\t},\n\t\t\t\tOutdoors: {\n\t\t\t\t\turl: 'https://tiles.stadiamaps.com/tiles/outdoors/{z}/{x}/{y}{r}.png'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tThunderforest: {\n\t\t\turl: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'&copy; <a href=\"http://www.thunderforest.com/\">Thunderforest</a>, {attribution.OpenStreetMap}',\n\t\t\t\tvariant: 'cycle',\n\t\t\t\tapikey: '<insert your api key here>',\n\t\t\t\tmaxZoom: 22\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tOpenCycleMap: 'cycle',\n\t\t\t\tTransport: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'transport'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTransportDark: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'transport-dark'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tSpinalMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'spinal-map'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tLandscape: 'landscape',\n\t\t\t\tOutdoors: 'outdoors',\n\t\t\t\tPioneer: 'pioneer',\n\t\t\t\tMobileAtlas: 'mobile-atlas',\n\t\t\t\tNeighbourhood: 'neighbourhood'\n\t\t\t}\n\t\t},\n\t\tCyclOSM: {\n\t\t\turl: 'https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: '<a href=\"https://github.com/cyclosm/cyclosm-cartocss-style/releases\" title=\"CyclOSM - Open Bicycle render\">CyclOSM</a> | Map data: {attribution.OpenStreetMap}'\n\t\t\t}\n\t\t},\n\t\tHydda: {\n\t\t\turl: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'full',\n\t\t\t\tattribution: 'Tiles courtesy of <a href=\"http://openstreetmap.se/\" target=\"_blank\">OpenStreetMap Sweden</a> &mdash; Map data {attribution.OpenStreetMap}'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tFull: 'full',\n\t\t\t\tBase: 'base',\n\t\t\t\tRoadsAndLabels: 'roads_and_labels'\n\t\t\t}\n\t\t},\n\t\tJawg: {\n\t\t\turl: 'https://{s}.tile.jawg.io/{variant}/{z}/{x}/{y}{r}.png?access-token={accessToken}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"http://jawg.io\" title=\"Tiles Courtesy of Jawg Maps\" target=\"_blank\">&copy; <b>Jawg</b>Maps</a> ' +\n\t\t\t\t\t'{attribution.OpenStreetMap}',\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 22,\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tvariant: 'jawg-terrain',\n\t\t\t\t// Get your own Jawg access token here : https://www.jawg.io/lab/\n\t\t\t\t// NB : this is a demonstration key that comes with no guarantee\n\t\t\t\taccessToken: '<insert your access token here>',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tStreets: 'jawg-streets',\n\t\t\t\tTerrain: 'jawg-terrain',\n\t\t\t\tSunny: 'jawg-sunny',\n\t\t\t\tDark: 'jawg-dark',\n\t\t\t\tLight: 'jawg-light',\n\t\t\t\tMatrix: 'jawg-matrix'\n\t\t\t}\n\t\t},\n\t\tMapBox: {\n\t\t\turl: 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}{r}?access_token={accessToken}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'&copy; <a href=\"https://www.mapbox.com/about/maps/\" target=\"_blank\">Mapbox</a> ' +\n\t\t\t\t\t'{attribution.OpenStreetMap} ' +\n\t\t\t\t\t'<a href=\"https://www.mapbox.com/map-feedback/\" target=\"_blank\">Improve this map</a>',\n\t\t\t\ttileSize: 512,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tzoomOffset: -1,\n\t\t\t\tid: 'mapbox/streets-v11',\n\t\t\t\taccessToken: '<insert your access token here>',\n\t\t\t}\n\t\t},\n\t\tMapTiler: {\n\t\t\turl: 'https://api.maptiler.com/maps/{variant}/{z}/{x}/{y}{r}.{ext}?key={key}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"https://www.maptiler.com/copyright/\" target=\"_blank\">&copy; MapTiler</a> <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">&copy; OpenStreetMap contributors</a>',\n\t\t\t\tvariant: 'streets',\n\t\t\t\text: 'png',\n\t\t\t\tkey: '<insert your MapTiler Cloud API key here>',\n\t\t\t\ttileSize: 512,\n\t\t\t\tzoomOffset: -1,\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 21\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tStreets: 'streets',\n\t\t\t\tBasic: 'basic',\n\t\t\t\tBright: 'bright',\n\t\t\t\tPastel: 'pastel',\n\t\t\t\tPositron: 'positron',\n\t\t\t\tHybrid: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'hybrid',\n\t\t\t\t\t\text: 'jpg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tToner: 'toner',\n\t\t\t\tTopo: 'topo',\n\t\t\t\tVoyager: 'voyager'\n\t\t\t}\n\t\t},\n\t\tStamen: {\n\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map tiles by <a href=\"http://stamen.com\">Stamen Design</a>, ' +\n\t\t\t\t\t'<a href=\"http://creativecommons.org/licenses/by/3.0\">CC BY 3.0</a> &mdash; ' +\n\t\t\t\t\t'Map data {attribution.OpenStreetMap}',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tminZoom: 0,\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'toner',\n\t\t\t\text: 'png'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tToner: 'toner',\n\t\t\t\tTonerBackground: 'toner-background',\n\t\t\t\tTonerHybrid: 'toner-hybrid',\n\t\t\t\tTonerLines: 'toner-lines',\n\t\t\t\tTonerLabels: 'toner-labels',\n\t\t\t\tTonerLite: 'toner-lite',\n\t\t\t\tWatercolor: {\n\t\t\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'watercolor',\n\t\t\t\t\t\text: 'jpg',\n\t\t\t\t\t\tminZoom: 1,\n\t\t\t\t\t\tmaxZoom: 16\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrainBackground: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain-background',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTerrainLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'terrain-labels',\n\t\t\t\t\t\tminZoom: 0,\n\t\t\t\t\t\tmaxZoom: 18\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTopOSMRelief: {\n\t\t\t\t\turl: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'toposm-color-relief',\n\t\t\t\t\t\text: 'jpg',\n\t\t\t\t\t\tbounds: [[22, -132], [51, -56]]\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tTopOSMFeatures: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'toposm-features',\n\t\t\t\t\t\tbounds: [[22, -132], [51, -56]],\n\t\t\t\t\t\topacity: 0.9\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tTomTom: {\n\t\t\turl: 'https://{s}.api.tomtom.com/map/1/tile/{variant}/{style}/{z}/{x}/{y}.{ext}?key={apikey}',\n\t\t\toptions: {\n\t\t\t\tvariant: 'basic',\n\t\t\t\tmaxZoom: 22,\n\t\t\t\tattribution:\n\t\t\t\t\t'<a href=\"https://tomtom.com\" target=\"_blank\">&copy;  1992 - ' + new Date().getFullYear() + ' TomTom.</a> ',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tstyle: 'main',\n\t\t\t\text: 'png',\n\t\t\t\tapikey: '<insert your API key here>',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tBasic: 'basic',\n\t\t\t\tHybrid: 'hybrid',\n\t\t\t\tLabels: 'labels'\n\t\t\t}\n\t\t},\n\t\tEsri: {\n\t\t\turl: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',\n\t\t\toptions: {\n\t\t\t\tvariant: 'World_Street_Map',\n\t\t\t\tattribution: 'Tiles &copy; Esri'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tWorldStreetMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} &mdash; ' +\n\t\t\t\t\t\t\t'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tDeLorme: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Specialty/DeLorme_World_Base_Map',\n\t\t\t\t\t\tminZoom: 1,\n\t\t\t\t\t\tmaxZoom: 11,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; Copyright: &copy;2012 DeLorme'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldTopoMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Topo_Map',\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} &mdash; ' +\n\t\t\t\t\t\t\t'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldImagery: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Imagery',\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} &mdash; ' +\n\t\t\t\t\t\t\t'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldTerrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Terrain_Base',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution:\n\t\t\t\t\t\t\t'{attribution.Esri} &mdash; ' +\n\t\t\t\t\t\t\t'Source: USGS, Esri, TANA, DeLorme, and NPS'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldShadedRelief: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Shaded_Relief',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; Source: Esri'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldPhysical: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'World_Physical_Map',\n\t\t\t\t\t\tmaxZoom: 8,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; Source: US National Park Service'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tOceanBasemap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Ocean_Basemap',\n\t\t\t\t\t\tmaxZoom: 13,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tNatGeoWorldMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'NatGeo_World_Map',\n\t\t\t\t\t\tmaxZoom: 16,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tWorldGrayCanvas: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'Canvas/World_Light_Gray_Base',\n\t\t\t\t\t\tmaxZoom: 16,\n\t\t\t\t\t\tattribution: '{attribution.Esri} &mdash; Esri, DeLorme, NAVTEQ'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOpenWeatherMap: {\n\t\t\turl: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Map data &copy; <a href=\"http://openweathermap.org\">OpenWeatherMap</a>',\n\t\t\t\tapiKey: '<insert your api key here>',\n\t\t\t\topacity: 0.5\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tClouds: 'clouds',\n\t\t\t\tCloudsClassic: 'clouds_cls',\n\t\t\t\tPrecipitation: 'precipitation',\n\t\t\t\tPrecipitationClassic: 'precipitation_cls',\n\t\t\t\tRain: 'rain',\n\t\t\t\tRainClassic: 'rain_cls',\n\t\t\t\tPressure: 'pressure',\n\t\t\t\tPressureContour: 'pressure_cntr',\n\t\t\t\tWind: 'wind',\n\t\t\t\tTemperature: 'temp',\n\t\t\t\tSnow: 'snow'\n\t\t\t}\n\t\t},\n\t\tHERE: {\n\t\t\t/*\n\t\t\t * HERE maps, formerly Nokia maps.\n\t\t\t * These basemaps are free, but you need an api id and app key. Please sign up at\n\t\t\t * https://developer.here.com/plans\n\t\t\t */\n\t\t\turl:\n\t\t\t\t'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +\n\t\t\t\t'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +\n\t\t\t\t'app_id={app_id}&app_code={app_code}&lg={language}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map &copy; 1987-' + new Date().getFullYear() + ' <a href=\"http://developer.here.com\">HERE</a>',\n\t\t\t\tsubdomains: '1234',\n\t\t\t\tmapID: 'newest',\n\t\t\t\t'app_id': '<insert your app_id here>',\n\t\t\t\t'app_code': '<insert your app_code here>',\n\t\t\t\tbase: 'base',\n\t\t\t\tvariant: 'normal.day',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\ttype: 'maptile',\n\t\t\t\tlanguage: 'eng',\n\t\t\t\tformat: 'png8',\n\t\t\t\tsize: '256'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tnormalDay: 'normal.day',\n\t\t\t\tnormalDayCustom: 'normal.day.custom',\n\t\t\t\tnormalDayGrey: 'normal.day.grey',\n\t\t\t\tnormalDayMobile: 'normal.day.mobile',\n\t\t\t\tnormalDayGreyMobile: 'normal.day.grey.mobile',\n\t\t\t\tnormalDayTransit: 'normal.day.transit',\n\t\t\t\tnormalDayTransitMobile: 'normal.day.transit.mobile',\n\t\t\t\tnormalDayTraffic: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'normal.traffic.day',\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'traffictile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnormalNight: 'normal.night',\n\t\t\t\tnormalNightMobile: 'normal.night.mobile',\n\t\t\t\tnormalNightGrey: 'normal.night.grey',\n\t\t\t\tnormalNightGreyMobile: 'normal.night.grey.mobile',\n\t\t\t\tnormalNightTransit: 'normal.night.transit',\n\t\t\t\tnormalNightTransitMobile: 'normal.night.transit.mobile',\n\t\t\t\treducedDay: 'reduced.day',\n\t\t\t\treducedNight: 'reduced.night',\n\t\t\t\tbasicMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'basetile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmapLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'labeltile',\n\t\t\t\t\t\tformat: 'png'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrafficFlow: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'flowtile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcarnavDayGrey: 'carnav.day.grey',\n\t\t\t\thybridDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTransit: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.transit'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayGrey: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.grey.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTraffic: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'hybrid.traffic.day',\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'traffictile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpedestrianDay: 'pedestrian.day',\n\t\t\t\tpedestrianNight: 'pedestrian.night',\n\t\t\t\tsatelliteDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'satellite.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tHEREv3: {\n\t\t\t/*\n\t\t\t * HERE maps API Version 3.\n\t\t\t * These basemaps are free, but you need an API key. Please sign up at\n\t\t\t * https://developer.here.com/plans\n\t\t\t * Version 3 deprecates the app_id and app_code access in favor of apiKey\n\t\t\t *\n\t\t\t * Supported access methods as of 2019/12/21:\n\t\t\t * @see https://developer.here.com/faqs#access-control-1--how-do-you-control-access-to-here-location-services\n\t\t\t */\n\t\t\turl:\n\t\t\t\t'https://{s}.{base}.maps.ls.hereapi.com/maptile/2.1/' +\n\t\t\t\t'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +\n\t\t\t\t'apiKey={apiKey}&lg={language}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Map &copy; 1987-' + new Date().getFullYear() + ' <a href=\"http://developer.here.com\">HERE</a>',\n\t\t\t\tsubdomains: '1234',\n\t\t\t\tmapID: 'newest',\n\t\t\t\tapiKey: '<insert your apiKey here>',\n\t\t\t\tbase: 'base',\n\t\t\t\tvariant: 'normal.day',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\ttype: 'maptile',\n\t\t\t\tlanguage: 'eng',\n\t\t\t\tformat: 'png8',\n\t\t\t\tsize: '256'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tnormalDay: 'normal.day',\n\t\t\t\tnormalDayCustom: 'normal.day.custom',\n\t\t\t\tnormalDayGrey: 'normal.day.grey',\n\t\t\t\tnormalDayMobile: 'normal.day.mobile',\n\t\t\t\tnormalDayGreyMobile: 'normal.day.grey.mobile',\n\t\t\t\tnormalDayTransit: 'normal.day.transit',\n\t\t\t\tnormalDayTransitMobile: 'normal.day.transit.mobile',\n\t\t\t\tnormalNight: 'normal.night',\n\t\t\t\tnormalNightMobile: 'normal.night.mobile',\n\t\t\t\tnormalNightGrey: 'normal.night.grey',\n\t\t\t\tnormalNightGreyMobile: 'normal.night.grey.mobile',\n\t\t\t\tnormalNightTransit: 'normal.night.transit',\n\t\t\t\tnormalNightTransitMobile: 'normal.night.transit.mobile',\n\t\t\t\treducedDay: 'reduced.day',\n\t\t\t\treducedNight: 'reduced.night',\n\t\t\t\tbasicMap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'basetile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmapLabels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttype: 'labeltile',\n\t\t\t\t\t\tformat: 'png'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrafficFlow: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'traffic',\n\t\t\t\t\t\ttype: 'flowtile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcarnavDayGrey: 'carnav.day.grey',\n\t\t\t\thybridDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayTransit: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.day.transit'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thybridDayGrey: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'hybrid.grey.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpedestrianDay: 'pedestrian.day',\n\t\t\t\tpedestrianNight: 'pedestrian.night',\n\t\t\t\tsatelliteDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'satellite.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterrainDayMobile: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tbase: 'aerial',\n\t\t\t\t\t\tvariant: 'terrain.day.mobile'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tFreeMapSK: {\n\t\t\turl: 'https://{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',\n\t\t\toptions: {\n\t\t\t\tminZoom: 8,\n\t\t\t\tmaxZoom: 16,\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tbounds: [[47.204642, 15.996093], [49.830896, 22.576904]],\n\t\t\t\tattribution:\n\t\t\t\t\t'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 <a href=\"http://freemap.sk\">Freemap.sk</a>'\n\t\t\t}\n\t\t},\n\t\tMtbMap: {\n\t\t\turl: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'{attribution.OpenStreetMap} &amp; USGS'\n\t\t\t}\n\t\t},\n\t\tCartoDB: {\n\t\t\turl: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: '{attribution.OpenStreetMap} &copy; <a href=\"https://carto.com/attributions\">CARTO</a>',\n\t\t\t\tsubdomains: 'abcd',\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tvariant: 'light_all'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tPositron: 'light_all',\n\t\t\t\tPositronNoLabels: 'light_nolabels',\n\t\t\t\tPositronOnlyLabels: 'light_only_labels',\n\t\t\t\tDarkMatter: 'dark_all',\n\t\t\t\tDarkMatterNoLabels: 'dark_nolabels',\n\t\t\t\tDarkMatterOnlyLabels: 'dark_only_labels',\n\t\t\t\tVoyager: 'rastertiles/voyager',\n\t\t\t\tVoyagerNoLabels: 'rastertiles/voyager_nolabels',\n\t\t\t\tVoyagerOnlyLabels: 'rastertiles/voyager_only_labels',\n\t\t\t\tVoyagerLabelsUnder: 'rastertiles/voyager_labels_under'\n\t\t\t}\n\t\t},\n\t\tHikeBike: {\n\t\t\turl: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: '{attribution.OpenStreetMap}',\n\t\t\t\tvariant: 'hikebike'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tHikeBike: {},\n\t\t\t\tHillShading: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 15,\n\t\t\t\t\t\tvariant: 'hillshading'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tBasemapAT: {\n\t\t\turl: 'https://maps{s}.wien.gv.at/basemap/{variant}/{type}/google3857/{z}/{y}/{x}.{format}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tattribution: 'Datenquelle: <a href=\"https://www.basemap.at\">basemap.at</a>',\n\t\t\t\tsubdomains: ['', '1', '2', '3', '4'],\n\t\t\t\ttype: 'normal',\n\t\t\t\tformat: 'png',\n\t\t\t\tbounds: [[46.358770, 8.782379], [49.037872, 17.189532]],\n\t\t\t\tvariant: 'geolandbasemap'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tbasemap: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20, // currently only in Vienna\n\t\t\t\t\t\tvariant: 'geolandbasemap'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgrau: 'bmapgrau',\n\t\t\t\toverlay: 'bmapoverlay',\n\t\t\t\tterrain: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmapgelaende',\n\t\t\t\t\t\ttype: 'grau',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsurface: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmapoberflaeche',\n\t\t\t\t\t\ttype: 'grau',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thighdpi: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'bmaphidpi',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torthofoto: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 20, // currently only in Vienna\n\t\t\t\t\t\tvariant: 'bmaporthofoto30cm',\n\t\t\t\t\t\tformat: 'jpeg'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tnlmaps: {\n\t\t\turl: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tminZoom: 6,\n\t\t\t\tmaxZoom: 19,\n\t\t\t\tbounds: [[50.5, 3.25], [54, 7.6]],\n\t\t\t\tattribution: 'Kaartgegevens &copy; <a href=\"https://www.kadaster.nl\">Kadaster</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\t'standaard': 'brtachtergrondkaart',\n\t\t\t\t'pastel': 'brtachtergrondkaartpastel',\n\t\t\t\t'grijs': 'brtachtergrondkaartgrijs',\n\t\t\t\t'luchtfoto': {\n\t\t\t\t\t'url': 'https://service.pdok.nl/hwh/luchtfotorgb/wmts/v1_0/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg',\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tNASAGIBS: {\n\t\t\turl: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',\n\t\t\toptions: {\n\t\t\t\tattribution:\n\t\t\t\t\t'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +\n\t\t\t\t\t'(<a href=\"https://earthdata.nasa.gov\">ESDIS</a>) with funding provided by NASA/HQ.',\n\t\t\t\tbounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],\n\t\t\t\tminZoom: 1,\n\t\t\t\tmaxZoom: 9,\n\t\t\t\tformat: 'jpg',\n\t\t\t\ttime: '',\n\t\t\t\ttilematrixset: 'GoogleMapsCompatible_Level'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',\n\t\t\t\tModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',\n\t\t\t\tViirsEarthAtNight2012: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'VIIRS_CityLights_2012',\n\t\t\t\t\t\tmaxZoom: 8\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraLSTDay: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Land_Surface_Temp_Day',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 7,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraSnowCover: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_NDSI_Snow_Cover',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 8,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraAOD: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Aerosol',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 6,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tModisTerraChlorophyll: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'MODIS_Terra_Chlorophyll_A',\n\t\t\t\t\t\tformat: 'png',\n\t\t\t\t\t\tmaxZoom: 7,\n\t\t\t\t\t\topacity: 0.75\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tNLS: {\n\t\t\t// NLS maps are copyright National library of Scotland.\n\t\t\t// http://maps.nls.uk/projects/api/index.html\n\t\t\t// Please contact NLS for anything other than non-commercial low volume usage\n\t\t\t//\n\t\t\t// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s\n\t\t\t//   z0-9  - 1:1m\n\t\t\t//  z10-11 - quarter inch (1:253440)\n\t\t\t//  z12-18 - one inch (1:63360)\n\t\t\turl: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"http://geo.nls.uk/maps/\">National Library of Scotland Historic Maps</a>',\n\t\t\t\tbounds: [[49.6, -12], [61.7, 3]],\n\t\t\t\tminZoom: 1,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tsubdomains: '0123',\n\t\t\t}\n\t\t},\n\t\tJusticeMap: {\n\t\t\t// Justice Map (http://www.justicemap.org/)\n\t\t\t// Visualize race and income data for your community, county and country.\n\t\t\t// Includes tools for data journalists, bloggers and community activists.\n\t\t\turl: 'https://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"http://www.justicemap.org/terms.php\">Justice Map</a>',\n\t\t\t\t// one of 'county', 'tract', 'block'\n\t\t\t\tsize: 'county',\n\t\t\t\t// Bounds for USA, including Alaska and Hawaii\n\t\t\t\tbounds: [[14, -180], [72, -56]]\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tincome: 'income',\n\t\t\t\tamericanIndian: 'indian',\n\t\t\t\tasian: 'asian',\n\t\t\t\tblack: 'black',\n\t\t\t\thispanic: 'hispanic',\n\t\t\t\tmulti: 'multi',\n\t\t\t\tnonWhite: 'nonwhite',\n\t\t\t\twhite: 'white',\n\t\t\t\tplurality: 'plural'\n\t\t\t}\n\t\t},\n\t\tGeoportailFrance: {\n\t\t\turl: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&STYLE={style}&TILEMATRIXSET=PM&FORMAT={format}&LAYER={variant}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a target=\"_blank\" href=\"https://www.geoportail.gouv.fr/\">Geoportail France</a>',\n\t\t\t\tbounds: [[-75, -180], [81, 180]],\n\t\t\t\tminZoom: 2,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\t// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/\n\t\t\t\t// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee\n\t\t\t\tapikey: 'choisirgeoportail',\n\t\t\t\tformat: 'image/png',\n\t\t\t\tstyle: 'normal',\n\t\t\t\tvariant: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tplan: 'GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2',\n\t\t\t\tparcels: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tvariant: 'CADASTRALPARCELS.PARCELLAIRE_EXPRESS',\n\t\t\t\t\t\tstyle: 'PCI vecteur',\n\t\t\t\t\t\tmaxZoom: 20\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torthos: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tmaxZoom: 19,\n\t\t\t\t\t\tformat: 'image/jpeg',\n\t\t\t\t\t\tvariant: 'ORTHOIMAGERY.ORTHOPHOTOS'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tOneMapSG: {\n\t\t\turl: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tvariant: 'Default',\n\t\t\t\tminZoom: 11,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tbounds: [[1.56073, 104.11475], [1.16, 103.502]],\n\t\t\t\tattribution: '<img src=\"https://docs.onemap.sg/maps/images/oneMap64-01.png\" style=\"height:20px;width:20px;\"/> New OneMap | Map data &copy; contributors, <a href=\"http://SLA.gov.sg\">Singapore Land Authority</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tDefault: 'Default',\n\t\t\t\tNight: 'Night',\n\t\t\t\tOriginal: 'Original',\n\t\t\t\tGrey: 'Grey',\n\t\t\t\tLandLot: 'LandLot'\n\t\t\t}\n\t\t},\n\t\tUSGS: {\n\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 20,\n\t\t\t\tattribution: 'Tiles courtesy of the <a href=\"https://usgs.gov/\">U.S. Geological Survey</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tUSTopo: {},\n\t\t\t\tUSImagery: {\n\t\t\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}'\n\t\t\t\t},\n\t\t\t\tUSImageryTopo: {\n\t\t\t\t\turl: 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryTopo/MapServer/tile/{z}/{y}/{x}'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tWaymarkedTrails: {\n\t\t\turl: 'https://tile.waymarkedtrails.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} | Map style: &copy; <a href=\"https://waymarkedtrails.org\">waymarkedtrails.org</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-SA</a>)'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\thiking: 'hiking',\n\t\t\t\tcycling: 'cycling',\n\t\t\t\tmtb: 'mtb',\n\t\t\t\tslopes: 'slopes',\n\t\t\t\triding: 'riding',\n\t\t\t\tskating: 'skating'\n\t\t\t}\n\t\t},\n\t\tOpenAIP: {\n\t\t\turl: 'https://{s}.tile.maps.openaip.net/geowebcache/service/tms/1.0.0/openaip_basemap@EPSG%3A900913@png/{z}/{x}/{y}.{ext}',\n\t\t\toptions: {\n\t\t\t\tattribution: '<a href=\"https://www.openaip.net/\">openAIP Data</a> (<a href=\"https://creativecommons.org/licenses/by-sa/3.0/\">CC-BY-NC-SA</a>)',\n\t\t\t\text: 'png',\n\t\t\t\tminZoom: 4,\n\t\t\t\tmaxZoom: 14,\n\t\t\t\ttms: true,\n\t\t\t\tdetectRetina: true,\n\t\t\t\tsubdomains: '12'\n\t\t\t}\n\t\t},\n\t\tOpenSnowMap: {\n\t\t\turl: 'https://tiles.opensnowmap.org/{variant}/{z}/{x}/{y}.png',\n\t\t\toptions: {\n\t\t\t\tminZoom: 9,\n\t\t\t\tmaxZoom: 18,\n\t\t\t\tattribution: 'Map data: {attribution.OpenStreetMap} & ODbL, &copy; <a href=\"https://www.opensnowmap.org/iframes/data.html\">www.opensnowmap.org</a> <a href=\"https://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>'\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tpistes: 'pistes',\n\t\t\t}\n\t\t},\n\t\tAzureMaps: {\n\t\t\turl: \n\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}&language={language}'+\n\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\toptions: {\n\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview for details.',\n\t\t\t\tapiVersion: '2.0',\n\t\t\t\tvariant: 'microsoft.imagery',\n\t\t\t\tsubscriptionKey: '<insert your subscription key here>',\n\t\t\t\tlanguage: 'en-US',\n\t\t\t},\n\t\t\tvariants: {\n\t\t\t\tMicrosoftImagery: 'microsoft.imagery',\n\t\t\t\tMicrosoftBaseDarkGrey: 'microsoft.base.darkgrey',\n\t\t\t\tMicrosoftBaseRoad: 'microsoft.base.road',\n\t\t\t\tMicrosoftBaseHybridRoad: 'microsoft.base.hybrid.road',\n\t\t\t\tMicrosoftTerraMain: 'microsoft.terra.main',\n\t\t\t\tMicrosoftWeatherInfraredMain: {\n\t\t\t\t\turl: \n\t\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}'+\n\t\t\t\t\t'&timeStamp={timeStamp}&language={language}' +\n\t\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttimeStamp: '2021-05-08T09:03:00Z',\n\t\t\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.',\n\t\t\t\t\t\tvariant: 'microsoft.weather.infrared.main',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMicrosoftWeatherRadarMain: {\n\t\t\t\t\turl: \n\t\t\t\t\t'https://atlas.microsoft.com/map/tile?api-version={apiVersion}'+\n\t\t\t\t\t'&tilesetId={variant}&x={x}&y={y}&zoom={z}'+\n\t\t\t\t\t'&timeStamp={timeStamp}&language={language}' +\n\t\t\t\t\t'&subscription-key={subscriptionKey}',\n\t\t\t\t\toptions: {\n\t\t\t\t\t\ttimeStamp: '2021-05-08T09:03:00Z',\n\t\t\t\t\t\tattribution: 'See https://docs.microsoft.com/en-US/rest/api/maps/renderv2/getmaptilepreview#uri-parameters for details.',\n\t\t\t\t\t\tvariant: 'microsoft.weather.radar.main',\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t};\n\n\tL.tileLayer.provider = function (provider, options) {\n\t\treturn new L.TileLayer.Provider(provider, options);\n\t};\n\n\treturn L;\n}));\n", "/*\n * Extends L.Map to synchronize the interaction on one map to one or more other maps.\n */\n\n(function () {\n    var NO_ANIMATION = {\n        animate: false,\n        reset: true,\n        disableViewprereset: true\n    };\n\n    L.Sync = function () {};\n    /*\n     * Helper function to compute the offset easily.\n     *\n     * The arguments are relative positions with respect to reference and target maps of\n     * the point to sync. If you provide ratioRef=[0, 1], ratioTarget=[1, 0] will sync the\n     * bottom left corner of the reference map with the top right corner of the target map.\n     * The values can be less than 0 or greater than 1. It will sync points out of the map.\n     */\n    L.Sync.offsetHelper = function (ratioRef, ratioTarget) {\n        var or = L.Util.isArray(ratioRef) ? ratioRef : [0.5, 0.5];\n        var ot = L.Util.isArray(ratioTarget) ? ratioTarget : [0.5, 0.5];\n        return function (center, zoom, refMap, targetMap) {\n            var rs = refMap.getSize();\n            var ts = targetMap.getSize();\n            var pt = refMap.project(center, zoom)\n                           .subtract([(0.5 - or[0]) * rs.x, (0.5 - or[1]) * rs.y])\n                           .add([(0.5 - ot[0]) * ts.x, (0.5 - ot[1]) * ts.y]);\n            return refMap.unproject(pt, zoom);\n        };\n    };\n\n\n    L.Map.include({\n        sync: function (map, options) {\n            this._initSync();\n            options = L.extend({\n                noInitialSync: false,\n                syncCursor: false,\n                syncCursorMarkerOptions: {\n                    radius: 10,\n                    fillOpacity: 0.3,\n                    color: '#da291c',\n                    fillColor: '#fff'\n                },\n                offsetFn: function (center, zoom, refMap, targetMap) {\n                    // no transformation at all\n                    return center;\n                }\n            }, options);\n\n            // prevent double-syncing the map:\n            if (this._syncMaps.indexOf(map) === -1) {\n                this._syncMaps.push(map);\n                this._syncOffsetFns[L.Util.stamp(map)] = options.offsetFn;\n            }\n\n            if (!options.noInitialSync) {\n                map.setView(\n                    options.offsetFn(this.getCenter(), this.getZoom(), this, map),\n                    this.getZoom(), NO_ANIMATION);\n            }\n            if (options.syncCursor) {\n                if (typeof map.cursor === 'undefined') {\n                    map.cursor = L.circleMarker([0, 0], options.syncCursorMarkerOptions).addTo(map);\n                }\n\n                this._cursors.push(map.cursor);\n\n                this.on('mousemove', this._cursorSyncMove, this);\n                this.on('mouseout', this._cursorSyncOut, this);\n            }\n\n            // on these events, we should reset the view on every synced map\n            // dragstart is due to inertia\n            this.on('resize zoomend', this._selfSetView);\n            this.on('moveend', this._syncOnMoveend);\n            this.on('dragend', this._syncOnDragend);\n            return this;\n        },\n\n\n        // unsync maps from each other\n        unsync: function (map) {\n            var self = this;\n\n            if (this._cursors) {\n                this._cursors.forEach(function (cursor, indx, _cursors) {\n                    if (cursor === map.cursor) {\n                        _cursors.splice(indx, 1);\n                    }\n                });\n            }\n\n            // TODO: hide cursor in stead of moving to 0, 0\n            if (map.cursor) {\n                map.cursor.setLatLng([0, 0]);\n            }\n\n            if (this._syncMaps) {\n                this._syncMaps.forEach(function (synced, id) {\n                    if (map === synced) {\n                        delete self._syncOffsetFns[L.Util.stamp(map)];\n                        self._syncMaps.splice(id, 1);\n                    }\n                });\n            }\n\n            if (!this._syncMaps || this._syncMaps.length == 0) {\n                // no more synced maps, so these events are not needed.\n                this.off('resize zoomend', this._selfSetView);\n                this.off('moveend', this._syncOnMoveend);\n                this.off('dragend', this._syncOnDragend);\n            }\n\n            return this;\n        },\n\n        // Checks if the map is synced with anything or a specifyc map\n        isSynced: function (otherMap) {\n            var has = (this.hasOwnProperty('_syncMaps') && Object.keys(this._syncMaps).length > 0);\n            if (has && otherMap) {\n                // Look for this specific map\n                has = false;\n                this._syncMaps.forEach(function (synced) {\n                    if (otherMap == synced) { has = true; }\n                });\n            }\n            return has;\n        },\n\n\n        // Callbacks for events...\n        _cursorSyncMove: function (e) {\n            this._cursors.forEach(function (cursor) {\n                cursor.setLatLng(e.latlng);\n            });\n        },\n\n        _cursorSyncOut: function (e) {\n            this._cursors.forEach(function (cursor) {\n                // TODO: hide cursor in stead of moving to 0, 0\n                cursor.setLatLng([0, 0]);\n            });\n        },\n\n        _selfSetView: function (e) {\n            // reset the map, and let setView synchronize the others.\n            this.setView(this.getCenter(), this.getZoom(), NO_ANIMATION);\n        },\n\n        _syncOnMoveend: function (e) {\n            if (this._syncDragend) {\n                // This is 'the moveend' after the dragend.\n                // Without inertia, it will be right after,\n                // but when inertia is on, we need this to detect that.\n                this._syncDragend = false; // before calling setView!\n                this._selfSetView(e);\n                this._syncMaps.forEach(function (toSync) {\n                    toSync.fire('moveend');\n                });\n            }\n        },\n\n        _syncOnDragend: function (e) {\n            // It is ugly to have state, but we need it in case of inertia.\n            this._syncDragend = true;\n        },\n\n\n        // overload methods on originalMap to replay interactions on _syncMaps;\n        _initSync: function () {\n            if (this._syncMaps) {\n                return;\n            }\n            var originalMap = this;\n\n            this._syncMaps = [];\n            this._cursors = [];\n            this._syncOffsetFns = {};\n\n            L.extend(originalMap, {\n                setView: function (center, zoom, options, sync) {\n                    // Use this sandwich to disable and enable viewprereset\n                    // around setView call\n                    function sandwich (obj, fn) {\n                        var viewpreresets = [];\n                        var doit = options && options.disableViewprereset && obj && obj._events;\n                        if (doit) {\n                            // The event viewpreresets does an invalidateAll,\n                            // that reloads all the tiles.\n                            // That causes an annoying flicker.\n                            viewpreresets = obj._events.viewprereset;\n                            obj._events.viewprereset = [];\n                        }\n                        var ret = fn(obj);\n                        if (doit) {\n                            // restore viewpreresets event to its previous values\n                            obj._events.viewprereset = viewpreresets;\n                        }\n                        return ret;\n                    }\n\n                    // Looks better if the other maps 'follow' the active one,\n                    // so call this before _syncMaps\n                    var ret = sandwich(this, function (obj) {\n                        return L.Map.prototype.setView.call(obj, center, zoom, options);\n                    });\n\n                    if (!sync) {\n                        originalMap._syncMaps.forEach(function (toSync) {\n                            sandwich(toSync, function (obj) {\n                                return toSync.setView(\n                                    originalMap._syncOffsetFns[L.Util.stamp(toSync)](center, zoom, originalMap, toSync),\n                                    zoom, options, true);\n                            });\n                        });\n                    }\n\n                    return ret;\n                },\n\n                panBy: function (offset, options, sync) {\n                    if (!sync) {\n                        originalMap._syncMaps.forEach(function (toSync) {\n                            toSync.panBy(offset, options, true);\n                        });\n                    }\n                    return L.Map.prototype.panBy.call(this, offset, options);\n                },\n\n                _onResize: function (event, sync) {\n                    if (!sync) {\n                        originalMap._syncMaps.forEach(function (toSync) {\n                            toSync._onResize(event, true);\n                        });\n                    }\n                    return L.Map.prototype._onResize.call(this, event);\n                },\n\n                _stop: function (sync) {\n                    L.Map.prototype._stop.call(this);\n                    if (!sync) {\n                        originalMap._syncMaps.forEach(function (toSync) {\n                            toSync._stop(true);\n                        });\n                    }\n                }\n            });\n\n            originalMap.dragging._draggable._updatePosition = function () {\n                L.Draggable.prototype._updatePosition.call(this);\n                var self = this;\n                originalMap._syncMaps.forEach(function (toSync) {\n                    L.DomUtil.setPosition(toSync.dragging._draggable._element, self._newPos);\n                    toSync.eachLayer(function (layer) {\n                        if (layer._google !== undefined) {\n                            var offsetFn = originalMap._syncOffsetFns[L.Util.stamp(toSync)];\n                            var center = offsetFn(originalMap.getCenter(), originalMap.getZoom(), originalMap, toSync);\n                            layer._google.setCenter(center);\n                        }\n                    });\n                    toSync.fire('move');\n                });\n            };\n        }\n    });\n})();\n", "L.Control.Fullscreen = L.Control.extend({\n    options: {\n        position: 'topleft',\n        title: {\n            'false': 'View Fullscreen',\n            'true': 'Exit Fullscreen'\n        }\n    },\n\n    onAdd: function (map) {\n        var container = L.DomUtil.create('div', 'leaflet-control-fullscreen leaflet-bar leaflet-control');\n\n        this.link = L.DomUtil.create('a', 'leaflet-control-fullscreen-button leaflet-bar-part', container);\n        this.link.href = '#';\n\n        this._map = map;\n        this._map.on('fullscreenchange', this._toggleTitle, this);\n        this._toggleTitle();\n\n        L.DomEvent.on(this.link, 'click', this._click, this);\n\n        return container;\n    },\n\n    _click: function (e) {\n        L.DomEvent.stopPropagation(e);\n        L.DomEvent.preventDefault(e);\n        this._map.toggleFullscreen(this.options);\n    },\n\n    _toggleTitle: function() {\n        this.link.title = this.options.title[this._map.isFullscreen()];\n    }\n});\n\nL.Map.include({\n    isFullscreen: function () {\n        return this._isFullscreen || false;\n    },\n\n    toggleFullscreen: function (options) {\n        var container = this.getContainer();\n        if (this.isFullscreen()) {\n            if (options && options.pseudoFullscreen) {\n                this._disablePseudoFullscreen(container);\n            } else if (document.exitFullscreen) {\n                document.exitFullscreen();\n            } else if (document.mozCancelFullScreen) {\n                document.mozCancelFullScreen();\n            } else if (document.webkitCancelFullScreen) {\n                document.webkitCancelFullScreen();\n            } else if (document.msExitFullscreen) {\n                document.msExitFullscreen();\n            } else {\n                this._disablePseudoFullscreen(container);\n            }\n        } else {\n            if (options && options.pseudoFullscreen) {\n                this._enablePseudoFullscreen(container);\n            } else if (container.requestFullscreen) {\n                container.requestFullscreen();\n            } else if (container.mozRequestFullScreen) {\n                container.mozRequestFullScreen();\n            } else if (container.webkitRequestFullscreen) {\n                container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n            } else if (container.msRequestFullscreen) {\n                container.msRequestFullscreen();\n            } else {\n                this._enablePseudoFullscreen(container);\n            }\n        }\n\n    },\n\n    _enablePseudoFullscreen: function (container) {\n        L.DomUtil.addClass(container, 'leaflet-pseudo-fullscreen');\n        this._setFullscreen(true);\n        this.fire('fullscreenchange');\n    },\n\n    _disablePseudoFullscreen: function (container) {\n        L.DomUtil.removeClass(container, 'leaflet-pseudo-fullscreen');\n        this._setFullscreen(false);\n        this.fire('fullscreenchange');\n    },\n\n    _setFullscreen: function(fullscreen) {\n        this._isFullscreen = fullscreen;\n        var container = this.getContainer();\n        if (fullscreen) {\n            L.DomUtil.addClass(container, 'leaflet-fullscreen-on');\n        } else {\n            L.DomUtil.removeClass(container, 'leaflet-fullscreen-on');\n        }\n        this.invalidateSize();\n    },\n\n    _onFullscreenChange: function (e) {\n        var fullscreenElement =\n            document.fullscreenElement ||\n            document.mozFullScreenElement ||\n            document.webkitFullscreenElement ||\n            document.msFullscreenElement;\n\n        if (fullscreenElement === this.getContainer() && !this._isFullscreen) {\n            this._setFullscreen(true);\n            this.fire('fullscreenchange');\n        } else if (fullscreenElement !== this.getContainer() && this._isFullscreen) {\n            this._setFullscreen(false);\n            this.fire('fullscreenchange');\n        }\n    }\n});\n\nL.Map.mergeOptions({\n    fullscreenControl: false\n});\n\nL.Map.addInitHook(function () {\n    if (this.options.fullscreenControl) {\n        this.fullscreenControl = new L.Control.Fullscreen(this.options.fullscreenControl);\n        this.addControl(this.fullscreenControl);\n    }\n\n    var fullscreenchange;\n\n    if ('onfullscreenchange' in document) {\n        fullscreenchange = 'fullscreenchange';\n    } else if ('onmozfullscreenchange' in document) {\n        fullscreenchange = 'mozfullscreenchange';\n    } else if ('onwebkitfullscreenchange' in document) {\n        fullscreenchange = 'webkitfullscreenchange';\n    } else if ('onmsfullscreenchange' in document) {\n        fullscreenchange = 'MSFullscreenChange';\n    }\n\n    if (fullscreenchange) {\n        var onFullscreenChange = L.bind(this._onFullscreenChange, this);\n\n        this.whenReady(function () {\n            L.DomEvent.on(document, fullscreenchange, onFullscreenChange);\n        });\n\n        this.on('unload', function () {\n            L.DomEvent.off(document, fullscreenchange, onFullscreenChange);\n        });\n    }\n});\n\nL.control.fullscreen = function (options) {\n    return new L.Control.Fullscreen(options);\n};\n", "/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n// For ECMAScript module environments where a proper `window`\n// is present, execute the factory and get jQuery.\nfunction jQueryFactory( window, noGlobal ) {\n\nif ( typeof window === \"undefined\" || !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t//                         /----------\\\n\t//                        |            |    /-------\\\n\t//                        |  / Top  \\  |   |         |\n\t//         /--- Border ---+-| Right  |-+---+- Width -+---\\\n\t//        |                 | Bottom |                    |\n\t//        |                  \\ Left /                     |\n\t//        |                                               |\n\t//        |                              /----------\\     |\n\t//        |          /-------------\\    |            |    |- END\n\t//        |         |               |   |  / Top  \\  |    |\n\t//        |         |  / Margin  \\  |   | | Right  | |    |\n\t//        |---------+-|           |-+---+-| Bottom |-+----|\n\t//        |            \\ Padding /         \\ Left /       |\n\t// BEGIN -|                                               |\n\t//        |                /---------\\                    |\n\t//        |               |           |                   |\n\t//        |               |  / Min \\  |    / Width  \\     |\n\t//         \\--------------+-|       |-+---|          |---/\n\t//                           \\ Max /       \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `<table>` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t//    `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t//    as an array and fires an [inner] native event to prompt state\n\t\t\t//    changes that should be observed by registered listeners (such as\n\t\t\t//    checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t//    an array), it triggers an inner synthetic event, records the\n\t\t\t//    result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t//    array `saved`), it prevents double-propagation of surrogate events\n\t\t\t//    but otherwise allows everything to proceed (particularly including\n\t\t\t//    further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = /<script|<style|<link/i;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar type, i, l,\n\t\tevents = dataPriv.get( src, \"events\" );\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( events ) {\n\t\tdataPriv.remove( dest, \"handle events\" );\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tdataUser.set( dest, jQuery.extend( {}, dataUser.get( src ) ) );\n\t}\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( isIE && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// IE fails to set the defaultValue to the correct value when\n\t\t\t\t// cloning textareas.\n\t\t\t\tif ( nodeName( destElements[ i ], \"textarea\" ) ) {\n\t\t\t\t\tdestElements[ i ].defaultValue = srcElements[ i ].defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `<col>` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t//   * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t//   * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument$1.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Get callback name, remembering preexisting value associated with it\n\tcallbackName = s.jsonpCallback = typeof s.jsonpCallback === \"function\" ?\n\t\ts.jsonpCallback() :\n\t\ts.jsonpCallback;\n\n\t// Insert callback into url or form data\n\tif ( jsonProp ) {\n\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t} else if ( s.jsonp !== false ) {\n\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t}\n\n\t// Use data converter to retrieve json after script execution\n\ts.converters[ \"script json\" ] = function() {\n\t\tif ( !responseContainer ) {\n\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t}\n\t\treturn responseContainer[ 0 ];\n\t};\n\n\t// Force json dataType\n\ts.dataTypes[ 0 ] = \"json\";\n\n\t// Install callback\n\toverwritten = window[ callbackName ];\n\twindow[ callbackName ] = function() {\n\t\tresponseContainer = arguments;\n\t};\n\n\t// Clean-up function (fires after converters)\n\tjqXHR.always( function() {\n\n\t\t// If previous value didn't exist - remove it\n\t\tif ( overwritten === undefined ) {\n\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t// Otherwise restore preexisting value\n\t\t} else {\n\t\t\twindow[ callbackName ] = overwritten;\n\t\t}\n\n\t\t// Save back as free\n\t\tif ( s[ callbackName ] ) {\n\n\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t// Save the callback name for future use\n\t\t\toldCallbacks.push( callbackName );\n\t\t}\n\n\t\t// Call if it was a function and we have a response\n\t\tif ( responseContainer && typeof overwritten === \"function\" ) {\n\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t}\n\n\t\tresponseContainer = overwritten = undefined;\n\t} );\n\n\t// Delegate to script\n\treturn \"script\";\n} );\n\njQuery.ajaxPrefilter( function( s, origOptions ) {\n\n\t// Binary data needs to be passed to XHR as-is without stringification.\n\tif ( typeof s.data !== \"string\" && !jQuery.isPlainObject( s.data ) &&\n\t\t\t!Array.isArray( s.data ) &&\n\n\t\t\t// Don't disable data processing if explicitly set by the user.\n\t\t\t!( \"processData\" in origOptions ) ) {\n\t\ts.processData = false;\n\t}\n\n\t// `Content-Type` for requests with `FormData` bodies needs to be set\n\t// by the browser as it needs to append the `boundary` it generated.\n\tif ( s.data instanceof window.FormData ) {\n\t\ts.contentType = false;\n\t}\n} );\n\n// Argument \"data\" should be string of html or a TrustedHTML wrapper of obvious HTML\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" && !isObviousHtml( data + \"\" ) ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using DOMParser\n\t\tcontext = ( new window.DOMParser() )\n\t\t\t.parseFromString( \"\", \"text/html\" );\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( typeof params === \"function\" ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( typeof options === \"function\" ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11+\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\toffsetParent !== doc.documentElement &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.offsetParent || doc.documentElement;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) !== \"static\" ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement$1;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( typeof fn !== \"function\" ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\n\njQuery.expr[ \":\" ] = jQuery.expr.filters = jQuery.expr.pseudos;\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, gh-557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n\n}\n\nvar jQuery = jQueryFactory( window, true );\n\nexport { jQuery, jQuery as $ };\n\nexport default jQuery;\n", "\"use strict\";\n\n// Bundlers are able to synchronously require an ESM module from a CommonJS one.\nconst { jQuery } = require( \"../../dist-module/jquery.module.js\" );\nmodule.exports = jQuery;\n", "/*! DataTables 2.3.8\n * \u00A9 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\t// jQuery's factory checks for a global window - if it isn't present then it\n\t\t// returns a factory function that expects the window object\n\t\tvar jq = require('jquery');\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\twindow.DataTable = factory( jQuery, window, document );\n\t}\n}(function( $, window, document ) {\n\t\"use strict\";\n\n\t\n\tvar DataTable = function ( selector, options )\n\t{\n\t\t// Check if called with a window or jQuery object for DOM less applications\n\t\t// This is for backwards compatibility\n\t\tif (DataTable.factory(selector, options)) {\n\t\t\treturn DataTable;\n\t\t}\n\t\n\t\t// When creating with `new`, create a new DataTable, returning the API instance\n\t\tif (this instanceof DataTable) {\n\t\t\treturn $(selector).DataTable(options);\n\t\t}\n\t\telse {\n\t\t\t// Argument switching\n\t\t\toptions = selector;\n\t\t}\n\t\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\t\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\t\n\t\t// Method to get DT API instance from jQuery object\n\t\tthis.api = function ()\n\t\t{\n\t\t\treturn new _Api( this );\n\t\t};\n\t\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\t\n\t\t\t\n\t\t\tvar i=0, iLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar defaults = DataTable.defaults;\n\t\t\tvar $this = $(this);\n\t\t\t\n\t\t\t// Sanity check\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\t// Special case for options\n\t\t\tif (oInit.on && oInit.on.options) {\n\t\t\t\t_fnListener($this, 'options', oInit.on.options);\t\n\t\t\t}\n\t\t\t\n\t\t\t$this.trigger( 'options.dt', oInit );\n\t\t\t\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\t\t\t\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\t\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, $.extend( oInit, _fnEscapeObject($this.data()) ), true );\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tvar s = allSettings[i];\n\t\t\t\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif (\n\t\t\t\t\ts.nTable == this ||\n\t\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t\t) {\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\t\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn s.oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\tnew DataTable.Api(s).destroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( s.sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\t\t\t\n\t\t\t// Replacing an existing colgroup with our own. Not ideal, but a merge could take a lot of code\n\t\t\t$this.children('colgroup').remove();\n\t\t\t\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId,\n\t\t\t\tcolgroup: $('<colgroup>'),\n\t\t\t\tfastData: function (row, column, type) {\n\t\t\t\t\treturn _fnGetCellData(oSettings, row, column, type);\n\t\t\t\t}\n\t\t\t} );\n\t\t\toSettings.nTable = this;\n\t\t\toSettings.oInit  = oInit;\n\t\t\t\n\t\t\tallSettings.push( oSettings );\n\t\t\t\n\t\t\t// Make a single API instance available for internal handling\n\t\t\toSettings.api = new _Api( oSettings );\n\t\t\t\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\t\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\t\t\t\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = Array.isArray(oInit.aLengthMenu[0])\n\t\t\t\t\t? oInit.aLengthMenu[0][0]\n\t\t\t\t\t: $.isPlainObject( oInit.aLengthMenu[0] )\n\t\t\t\t\t\t? oInit.aLengthMenu[0].value\n\t\t\t\t\t\t: oInit.aLengthMenu[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\t\n\t\t\t\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t\"searchDelay\",\n\t\t\t\t\"rowId\",\n\t\t\t\t\"caption\",\n\t\t\t\t\"layout\",\n\t\t\t\t\"orderDescReverse\",\n\t\t\t\t\"orderIndicators\",\n\t\t\t\t\"orderHandler\",\n\t\t\t\t\"titleRow\",\n\t\t\t\t\"typeDetect\",\n\t\t\t\t\"columnTitleTag\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\t\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback );\n\t\t\t\n\t\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\t\n\t\t\t// Add event listeners\n\t\t\tif (oInit.on) {\n\t\t\t\tObject.keys(oInit.on).forEach(function (key) {\n\t\t\t\t\t_fnListener($this, key, oInit.on[key]);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\t\t\t\n\t\t\tvar oClasses = oSettings.oClasses;\n\t\t\t\n\t\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t$this.addClass( oClasses.table );\n\t\t\t\n\t\t\tif (! oSettings.oFeatures.bPaginate) {\n\t\t\t\toInit.iDisplayStart = 0;\n\t\t\t}\n\t\t\t\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\t\t\t\n\t\t\tvar defer = oInit.iDeferLoading;\n\t\t\tif ( defer !== null )\n\t\t\t{\n\t\t\t\toSettings.deferLoading = true;\n\t\t\t\n\t\t\t\tvar tmp = Array.isArray(defer);\n\t\t\t\toSettings._iRecordsDisplay = tmp ? defer[0] : defer;\n\t\t\t\toSettings._iRecordsTotal = tmp ? defer[1] : defer;\n\t\t\t}\n\t\t\t\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar columnsInit = [];\n\t\t\tvar thead = this.getElementsByTagName('thead');\n\t\t\tvar initHeaderLayout = _fnDetectHeader( oSettings, thead[0] );\n\t\t\t\n\t\t\t// If we don't have a columns array, then generate one with nulls\n\t\t\tif ( oInit.aoColumns ) {\n\t\t\t\tcolumnsInit = oInit.aoColumns;\n\t\t\t}\n\t\t\telse if ( initHeaderLayout.length ) {\n\t\t\t\tfor ( i=0, iLen=initHeaderLayout[0].length ; i<iLen ; i++ ) {\n\t\t\t\t\tcolumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Add the columns\n\t\t\tfor ( i=0, iLen=columnsInit.length ; i<iLen ; i++ ) {\n\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t}\n\t\t\t\n\t\t\t// Apply the column definitions\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, columnsInit, initHeaderLayout, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\t\t\t\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tvar rowOne = $this.children('tbody').find('tr:first-child').eq(0);\n\t\t\t\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t\t};\n\t\t\t\n\t\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\t\n\t\t\t\t\tif (! col) {\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\t\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\t\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\t\n\t\t\t// Must be done after everything which can be overridden by the state saving!\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState );\n\t\t\t\n\t\t\tvar features = oSettings.oFeatures;\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\tfeatures.bStateSave = true;\n\t\t\t}\n\t\t\t\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t// account, and also will apply sorting disabled classes if disabled\n\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t}\n\t\t\t} );\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\t * Table HTML init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\t\t\tvar caption = $this.children('caption');\n\t\t\t\n\t\t\tif ( oSettings.caption ) {\n\t\t\t\tif ( caption.length === 0 ) {\n\t\t\t\t\tcaption = $('<caption/>').prependTo( $this );\n\t\t\t\t}\n\t\t\t\n\t\t\t\tcaption.html( oSettings.caption );\n\t\t\t}\n\t\t\t\n\t\t\t// Store the caption side, so we can remove the element from the document\n\t\t\t// when creating the element\n\t\t\tif (caption.length) {\n\t\t\t\tcaption[0]._captionSide = caption.css('caption-side');\n\t\t\t\toSettings.captionNode = caption[0];\n\t\t\t}\n\t\t\t\n\t\t\t// Place the colgroup element in the correct location for the HTML structure\n\t\t\tif (caption.length) {\n\t\t\t\toSettings.colgroup.insertAfter(caption);\n\t\t\t}\n\t\t\telse {\n\t\t\t\toSettings.colgroup.prependTo(oSettings.nTable);\n\t\t\t}\n\t\t\t\n\t\t\tif ( thead.length === 0 ) {\n\t\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\t\t\t\n\t\t\tvar tbody = $this.children('tbody');\n\t\t\tif ( tbody.length === 0 ) {\n\t\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\t\t\t\n\t\t\tvar tfoot = $this.children('tfoot');\n\t\t\tif ( tfoot.length === 0 ) {\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t\t}\n\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\n\t\t\t// Copy the data index array\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\t\n\t\t\t// Initialisation complete - table can be drawn\n\t\t\toSettings.bInitialised = true;\n\t\t\t\n\t\t\t// Language definitions\n\t\t\tvar oLanguage = oSettings.oLanguage;\n\t\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\t\n\t\t\tif ( oLanguage.sUrl ) {\n\t\t\t\t// Get the language definitions from a file\n\t\t\t\t$.ajax( {\n\t\t\t\t\tdataType: 'json',\n\t\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\t\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings], true);\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t},\n\t\t\t\t\terror: function () {\n\t\t\t\t\t\t// Error occurred loading language file\n\t\t\t\t\t\t_fnLog( oSettings, 0, 'i18n file loading error', 21 );\n\t\t\t\n\t\t\t\t\t\t// Continue on as best we can\n\t\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings], true);\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\t\n\t\n\t\n\t/**\n\t * DataTables extensions\n\t * \n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * DataTables build type (expanded by the download builder)\n\t\t *\n\t\t *  @type string\n\t\t */\n\t\tbuilder: \"-source-\",\n\t\n\t\t/**\n\t\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t\t * defined here so other extensions can define buttons regardless of load\n\t\t * order. It is _not_ used by DataTables core.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tbuttons: {},\n\t\n\t\n\t\t/**\n\t\t * ColumnControl buttons and content\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tccContent: {},\n\t\n\t\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\t\n\t\n\t\t/**\n\t\t * Error reporting.\n\t\t * \n\t\t * How should DataTables report an error. Can take the value 'alert',\n\t\t * 'throw', 'none' or a function.\n\t\t *\n\t\t *  @type string|function\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\t\n\t\t/** HTML entity escaping */\n\t\tescape: {\n\t\t\t/** When reading data-* attributes for initialisation options */\n\t\t\tattributes: false\n\t\t},\n\t\n\t\t/**\n\t\t * Legacy so v1 plug-ins don't throw js errors on load\n\t\t */\n\t\tfeature: [],\n\t\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t * \n\t\t * This is an object of callbacks which provide the features for DataTables\n\t\t * to be initialised via the `layout` option.\n\t\t */\n\t\tfeatures: {},\n\t\n\t\n\t\t/**\n\t\t * Row searching.\n\t\t * \n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\t\n\t\n\t\t/**\n\t\t * Selector extensions\n\t\t *\n\t\t * The `selector` option can be used to extend the options available for the\n\t\t * selector modifier options (`selector-modifier` object data type) that\n\t\t * each of the three built in selector types offer (row, column and cell +\n\t\t * their plural counterparts). For example the Select extension uses this\n\t\t * mechanism to provide an option to select only rows, columns and cells\n\t\t * that have been marked as selected by the end user (`{selected: true}`),\n\t\t * which can be used in conjunction with the existing built in selector\n\t\t * options.\n\t\t *\n\t\t * Each property is an array to which functions can be pushed. The functions\n\t\t * take three attributes:\n\t\t *\n\t\t * * Settings object for the host table\n\t\t * * Options object (`selector-modifier` object type)\n\t\t * * Array of selected item indexes\n\t\t *\n\t\t * The return is an array of the resulting item indexes after the custom\n\t\t * selector has been applied.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tselector: {\n\t\t\tcell: [],\n\t\t\tcolumn: [],\n\t\t\trow: []\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default null\n\t\t\t */\n\t\t\tajax: null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t * \n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\t\n\t\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t * \n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t * \n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t * \n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\t\n\t\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Automatic column class assignment\n\t\t\t */\n\t\t\tclassName: {},\n\t\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t\t     *     perform context specific type detection - for example detection\n\t\t     *     based on language settings such as using a comma for a decimal\n\t\t     *     place. Generally speaking the options from the settings will not\n\t\t     *     be required\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data, settings ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\t\n\t\t\t/**\n\t\t\t * Automatic renderer assignment\n\t\t\t */\n\t\t\trender: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t * \n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\t\n\t\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing JavaScript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical JavaScript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t * \n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\t\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\t\n\t\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatibility only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\t\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\t\n\t\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\t\n\t\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\t\n\t\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.search,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\t\n\t\n\t$.extend( DataTable.ext.classes, {\n\t\tcontainer: 'dt-container',\n\t\tempty: {\n\t\t\trow: 'dt-empty'\n\t\t},\n\t\tinfo: {\n\t\t\tcontainer: 'dt-info'\n\t\t},\n\t\tlayout: {\n\t\t\trow: 'dt-layout-row',\n\t\t\tcell: 'dt-layout-cell',\n\t\t\ttableRow: 'dt-layout-table',\n\t\t\ttableCell: '',\n\t\t\tstart: 'dt-layout-start',\n\t\t\tend: 'dt-layout-end',\n\t\t\tfull: 'dt-layout-full'\n\t\t},\n\t\tlength: {\n\t\t\tcontainer: 'dt-length',\n\t\t\tselect: 'dt-input'\n\t\t},\n\t\torder: {\n\t\t\tcanAsc: 'dt-orderable-asc',\n\t\t\tcanDesc: 'dt-orderable-desc',\n\t\t\tisAsc: 'dt-ordering-asc',\n\t\t\tisDesc: 'dt-ordering-desc',\n\t\t\tnone: 'dt-orderable-none',\n\t\t\tposition: 'sorting_'\n\t\t},\n\t\tprocessing: {\n\t\t\tcontainer: 'dt-processing'\n\t\t},\n\t\tscrolling: {\n\t\t\tbody: 'dt-scroll-body',\n\t\t\tcontainer: 'dt-scroll',\n\t\t\tfooter: {\n\t\t\t\tself: 'dt-scroll-foot',\n\t\t\t\tinner: 'dt-scroll-footInner'\n\t\t\t},\n\t\t\theader: {\n\t\t\t\tself: 'dt-scroll-head',\n\t\t\t\tinner: 'dt-scroll-headInner'\n\t\t\t}\n\t\t},\n\t\tsearch: {\n\t\t\tcontainer: 'dt-search',\n\t\t\tinput: 'dt-input'\n\t\t},\n\t\ttable: 'dataTable',\t\n\t\ttbody: {\n\t\t\tcell: '',\n\t\t\trow: ''\n\t\t},\n\t\tthead: {\n\t\t\tcell: '',\n\t\t\trow: ''\n\t\t},\n\t\ttfoot: {\n\t\t\tcell: '',\n\t\t\trow: ''\n\t\t},\n\t\tpaging: {\n\t\t\tactive: 'current',\n\t\t\tbutton: 'dt-paging-button',\n\t\t\tcontainer: 'dt-paging',\n\t\t\tdisabled: 'disabled',\n\t\t\tnav: ''\n\t\t}\n\t} );\n\t\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n\\u2028]/g;\n\tvar _re_html = /<([^>]*>)/g;\n\tvar _max_str_len = Math.pow(2, 28);\n\t\n\t// This is not strict ISO8601 - Date.parse() is quite lax, although\n\t// implementations differ between browsers.\n\tvar _re_date = /^\\d{2,4}[./-]\\d{1,2}[./-]\\d{1,2}([T ]{1}\\d{1,2}[:.]\\d{2}([.:]\\d{2})?)?$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// https://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// - \u0243 - Bitcoin\n\t// - \u039E - Ethereum\n\t//   standards as thousands separators.\n\tvar _re_formatted_numeric = /['\\u00A0,$\u00A3\u20AC\u00A5%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk\u0243\u039E]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a JavaScript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted, allowEmpty ) {\n\t\tvar type = typeof d;\n\t\tvar strType = type === 'string';\n\t\n\t\tif ( type === 'number' || type === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( allowEmpty && _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t// Is a string a number surrounded by HTML?\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted, allowEmpty ) {\n\t\tif ( allowEmpty && _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t// input and select strings mean that this isn't just a number\n\t\tif (typeof d === 'string' && d.match(/<(input|select)/i)) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted, allowEmpty ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, iLen=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, iLen=order.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\t\tif ( a[ order[i] ] && a[ order[i] ][ prop ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\t\tif ( a[ order[i] ] ) {\n\t\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\t\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\t\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t\n\tvar _removeEmpty = function ( a )\n\t{\n\t\tvar out = [];\n\t\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\t\tout.push( a[i] );\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Replaceable function in api.util\n\tvar _stripHtml = function (input, replacement) {\n\t\tif (! input || typeof input !== 'string') {\n\t\t\treturn input;\n\t\t}\n\t\n\t\t// Irrelevant check to workaround CodeQL's false positive on the regex\n\t\tif (input.length > _max_str_len) {\n\t\t\tthrow new Error('Exceeded max str len');\n\t\t}\n\t\n\t\tvar previous;\n\t\n\t\tinput = input.replace(_re_html, replacement || ''); // Complete tags\n\t\n\t\t// Safety for incomplete script tag - use do / while to ensure that\n\t\t// we get all instances\n\t\tdo {\n\t\t\tprevious = input;\n\t\t\tinput = input.replace(/<script/i, '');\n\t\t} while (input !== previous);\n\t\n\t\treturn previous;\n\t};\n\t\n\t// Replaceable function in api.util\n\tvar _escapeHtml = function ( d ) {\n\t\tif (Array.isArray(d)) {\n\t\t\td = d.join(',');\n\t\t}\n\t\n\t\treturn typeof d === 'string' ?\n\t\t\td\n\t\t\t\t.replace(/&/g, '&amp;')\n\t\t\t\t.replace(/</g, '&lt;')\n\t\t\t\t.replace(/>/g, '&gt;')\n\t\t\t\t.replace(/\"/g, '&quot;') :\n\t\t\td;\n\t};\n\t\n\t// Remove diacritics from a string by decomposing it and then removing\n\t// non-ascii characters\n\tvar _normalize = function (str, both) {\n\t\tif (typeof str !== 'string') {\n\t\t\treturn str;\n\t\t}\n\t\n\t\t// It is faster to just run `normalize` than it is to check if\n\t\t// we need to with a regex! (Check as it isn't available in old\n\t\t// Safari)\n\t\tvar res = str.normalize\n\t\t\t? str.normalize(\"NFD\")\n\t\t\t: str;\n\t\n\t\t// Equally, here we check if a regex is needed or not\n\t\treturn res.length !== str.length\n\t\t\t? (both === true ? str + ' ' : '' ) + res.replace(/[\\u0300-\\u036f]/g, \"\")\n\t\t\t: res;\n\t}\n\t\n\t/**\n\t * Determine if all values in the array are unique. This means we can short\n\t * cut the _unique method at the cost of a single loop. A sorted array is used\n\t * to easily check the values.\n\t *\n\t * @param  {array} src Source array\n\t * @return {boolean} true if all unique, false otherwise\n\t * @ignore\n\t */\n\tvar _areAllUnique = function ( src ) {\n\t\tif ( src.length < 2 ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar sorted = src.slice().sort();\n\t\tvar last = sorted[0];\n\t\n\t\tfor ( var i=1, iLen=sorted.length ; i<iLen ; i++ ) {\n\t\t\tif ( sorted[i] === last ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tlast = sorted[i];\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\tif (Array.from && Set) {\n\t\t\treturn Array.from(new Set(src));\n\t\t}\n\t\n\t\tif ( _areAllUnique( src ) ) {\n\t\t\treturn src.slice();\n\t\t}\n\t\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.app/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, iLen=src.length,\n\t\t\tj, k=0;\n\t\n\t\tagain: for ( i=0 ; i<iLen ; i++ ) {\n\t\t\tval = src[i];\n\t\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\t\n\t\treturn out;\n\t};\n\t\n\t// Surprisingly this is faster than [].concat.apply\n\t// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\n\tvar _flatten = function (out, val) {\n\t\tif (Array.isArray(val)) {\n\t\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t\t_flatten(out, val[i]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tout.push(val);\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t// Similar to jQuery's addClass, but use classList.add\n\tfunction _addClass(el, name) {\n\t\tif (name) {\n\t\t\tname.split(' ').forEach(function (n) {\n\t\t\t\tif (n) {\n\t\t\t\t\t// `add` does deduplication, so no need to check `contains`\n\t\t\t\t\tel.classList.add(n);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t\n\t/**\n\t * DataTables utility methods\n\t * \n\t * This namespace provides helper methods that DataTables uses internally to\n\t * create a DataTable, but which are not exclusively used only for DataTables.\n\t * These methods can be used by extension authors to save the duplication of\n\t * code.\n\t *\n\t *  @namespace\n\t */\n\tDataTable.util = {\n\t\t/**\n\t\t * Return a string with diacritic characters decomposed\n\t\t * @param {*} mixed Function or string to normalize\n\t\t * @param {*} both Return original string and the normalized string\n\t\t * @returns String or undefined\n\t\t */\n\t\tdiacritics: function (mixed, both) {\n\t\t\tvar type = typeof mixed;\n\t\n\t\t\tif (type !== 'function') {\n\t\t\t\treturn _normalize(mixed, both);\n\t\t\t}\n\t\t\t_normalize = mixed;\n\t\t},\n\t\n\t\t/**\n\t\t * Debounce a function\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tdebounce: function ( fn, timeout ) {\n\t\t\tvar timer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\n\t\t\t\tclearTimeout(timer);\n\t\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t}, timeout || 250 );\n\t\t\t};\n\t\t},\n\t\n\t\t/**\n\t\t * Throttle the calls to a function. Arguments and context are maintained\n\t\t * for the throttled function.\n\t\t *\n\t\t * @param {function} fn Function to be called\n\t\t * @param {integer} freq Call frequency in mS\n\t\t * @return {function} Wrapped function\n\t\t */\n\t\tthrottle: function ( fn, freq ) {\n\t\t\tvar\n\t\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\t\tlast,\n\t\t\t\ttimer;\n\t\n\t\t\treturn function () {\n\t\t\t\tvar\n\t\t\t\t\tthat = this,\n\t\t\t\t\tnow  = +new Date(),\n\t\t\t\t\targs = arguments;\n\t\n\t\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\t\tclearTimeout( timer );\n\t\n\t\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\t\tlast = undefined;\n\t\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t\t}, frequency );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\t/**\n\t\t * Escape a string such that it can be used in a regular expression\n\t\t *\n\t\t *  @param {string} val string to escape\n\t\t *  @returns {string} escaped string\n\t\t */\n\t\tescapeRegex: function ( val ) {\n\t\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will write to a nested object or array\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Write function\n\t\t */\n\t\tset: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t\t * for `mRender` which is read only.\n\t\t\t\t */\n\t\t\t\treturn DataTable.util.set( source._ );\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Nothing to do when the data source is null\n\t\t\t\treturn function () {};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, val, meta) {\n\t\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (\n\t\t\t\ttypeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\tsource.indexOf('[') !== -1 || source.indexOf('(') !== -1)\n\t\t\t) {\n\t\t\t\t// Like the get, we need to get data from a nested object\n\t\t\t\tvar setData = function (data, val, src) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\t\n\t\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\treturn setData( data, val, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\t\tdata[source] = val;\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t\t * @param {*} source JSON notation string\n\t\t * @returns Value read\n\t\t */\n\t\tget: function ( source ) {\n\t\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\t\tvar o = {};\n\t\t\t\t$.each( source, function (key, val) {\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\tvar t = o[type] || o._;\n\t\t\t\t\treturn t !== undefined ?\n\t\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\t\tdata;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( source === null ) {\n\t\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if ( typeof source === 'function' ) {\n\t\t\t\treturn function (data, type, row, meta) {\n\t\t\t\t\treturn source( data, type, row, meta );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (\n\t\t\t\ttypeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\t\tsource.indexOf('[') !== -1 || source.indexOf('(') !== -1)\n\t\t\t) {\n\t\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t\t * be used if defined, rather than throwing an error\n\t\t\t\t */\n\t\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\t\n\t\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\t\n\t\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\t\n\t\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\n\t\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tout = [];\n\t\t\n\t\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\t\n\t\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\t\n\t\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\treturn data;\n\t\t\t\t};\n\t\t\n\t\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\t\treturn fetchData( data, type, source );\n\t\t\t\t};\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Array or flat object mapping\n\t\t\t\treturn function (data) { // row and meta also passed, but not used\n\t\t\t\t\treturn data[source];\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\n\t\tstripHtml: function (mixed, replacement) {\n\t\t\tvar type = typeof mixed;\n\t\n\t\t\tif (type === 'function') {\n\t\t\t\t_stripHtml = mixed;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (type === 'string') {\n\t\t\t\treturn _stripHtml(mixed, replacement);\n\t\t\t}\n\t\t\treturn mixed;\n\t\t},\n\t\n\t\tescapeHtml: function (mixed) {\n\t\t\tvar type = typeof mixed;\n\t\n\t\t\tif (type === 'function') {\n\t\t\t\t_escapeHtml = mixed;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (type === 'string' || Array.isArray(mixed)) {\n\t\t\t\treturn _escapeHtml(mixed);\n\t\t\t}\n\t\t\treturn mixed;\n\t\t},\n\t\n\t\tunique: _unique\n\t};\n\t\n\t\n\t\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\t\n\t\t$.each( o, function (key) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\t\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\t\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\n\t\to._hungarianMap = map;\n\t}\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap ) {\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\t\n\t\tvar hungarianKey;\n\t\n\t\t$.each( user, function (key) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\t\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\t\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t\n\t\t// Boolean initialisation of x-scrolling\n\t\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t\t}\n\t\tif ( typeof init.scrollX === 'boolean' ) {\n\t\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t\t}\n\t\n\t\t// Objects for ordering\n\t\tif ( typeof init.bSort === 'object' ) {\n\t\t\tinit.orderIndicators = init.bSort.indicators !== undefined ? init.bSort.indicators : true;\n\t\t\tinit.orderHandler = init.bSort.handler !== undefined ? init.bSort.handler : true;\n\t\t\tinit.bSort = true;\n\t\t}\n\t\telse if (init.bSort === false) {\n\t\t\tinit.orderIndicators = false;\n\t\t\tinit.orderHandler = false;\n\t\t}\n\t\telse if (init.bSort === true) {\n\t\t\tinit.orderIndicators = true;\n\t\t\tinit.orderHandler = true;\n\t\t}\n\t\n\t\t// Which cells are the title cells?\n\t\tif (typeof init.bSortCellsTop === 'boolean') {\n\t\t\tinit.titleRow = init.bSortCellsTop;\n\t\t}\n\t\n\t\t// Column search objects are in an array, so it needs to be converted\n\t\t// element by element\n\t\tvar searchCols = init.aoSearchCols;\n\t\n\t\tif ( searchCols ) {\n\t\t\tfor ( var i=0, iLen=searchCols.length ; i<iLen ; i++ ) {\n\t\t\t\tif ( searchCols[i] ) {\n\t\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Enable search delay if server-side processing is enabled\n\t\tif (init.serverSide && ! init.searchDelay) {\n\t\t\tinit.searchDelay = 400;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t\n\t\t// orderData can be given as an integer\n\t\tvar dataSort = init.aDataSort;\n\t\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\t\tinit.aDataSort = [ dataSort ];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\t// We don't need to do this every time DataTables is constructed, the values\n\t\t// calculated are specific to the browser and OS configuration which we\n\t\t// don't expect to change between initialisations\n\t\tif ( ! DataTable.__browser ) {\n\t\t\tvar browser = {};\n\t\t\tDataTable.__browser = browser;\n\t\n\t\t\t// Scrolling feature / quirks detection\n\t\t\tvar n = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'fixed',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: -1 * window.pageXOffset, // allow for scrolling\n\t\t\t\t\theight: 1,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.appendTo( 'body' );\n\t\n\t\t\tvar outer = n.children();\n\t\t\tvar inner = outer.children();\n\t\n\t\t\t// Get scrollbar width\n\t\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\t\n\t\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t\t// scrollbar on the left, rather than the right.\n\t\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\t\n\t\t\tn.remove();\n\t\t}\n\t\n\t\t$.extend( settings.oBrowser, DataTable.__browser );\n\t\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol,\n\t\t\tsearchFixed: {},\n\t\t\tcolEl: $('<col>').attr('data-dt-column', iCol)\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\t\n\t\t\t// `class` is a reserved word in JavaScript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\n\t\t\tvar origClass = oCol.sClass;\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t\t// overwriting it in the extend above\n\t\t\tif (origClass !== oCol.sClass) {\n\t\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t\t}\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\n\t\t// The `render` option can be given as an array to access the helper rendering methods.\n\t\t// The first element is the rendering method to use, the rest are the parameters to pass\n\t\tif ( oCol.mRender && Array.isArray( oCol.mRender ) ) {\n\t\t\tvar copy = oCol.mRender.slice();\n\t\t\tvar name = copy.shift();\n\t\n\t\t\toCol.mRender = DataTable.render[name].apply(window, copy);\n\t\t}\n\t\n\t\toCol._render = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\toCol._setter = null;\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn oCol._render && type ?\n\t\t\t\toCol._render( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t_fnCalculateColumnWidths( settings );\n\t\t_fnColumnSizes( settings );\n\t\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '') {\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\t\n\t/**\n\t * Apply column sizes\n\t *\n\t * @param {*} settings DataTables settings object\n\t */\n\tfunction _fnColumnSizes ( settings )\n\t{\n\t\tvar cols = settings.aoColumns;\n\t\n\t\tfor (var i=0 ; i<cols.length ; i++) {\n\t\t\tvar width = _fnColumnsSumWidth(settings, [i], false, false);\n\t\n\t\t\tcols[i].colEl.css('width', width);\n\t\n\t\t\tif (settings.oScroll.sX) {\n\t\t\t\tcols[i].colEl.css('min-width', width);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\t\n\t\n\t/**\n\t * Convert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = aiVis.indexOf(iMatch);\n\t\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\t\n\t\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleColumns( settings )\n\t{\n\t\tvar layout = settings.aoHeader;\n\t\tvar columns = settings.aoColumns;\n\t\tvar vis = 0;\n\t\n\t\tif ( layout.length ) {\n\t\t\tfor ( var i=0, iLen=layout[0].length ; i<iLen ; i++ ) {\n\t\t\t\tif ( columns[i].bVisible && $(layout[0][i].cell).css('display') !== 'none' ) {\n\t\t\t\t\tvis++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn vis;\n\t}\n\t\n\t\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\t\n\t\toSettings.aoColumns.map( function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\t\n\t\treturn a;\n\t}\n\t\n\t/**\n\t * Allow the result from a type detection function to be `true` while\n\t * translating that into a string. Old type detection functions will\n\t * return the type name if it passes. An object store would be better,\n\t * but not backwards compatible.\n\t *\n\t * @param {*} typeDetect Object or function for type detection\n\t * @param {*} res Result from the type detection function\n\t * @returns Type name or false\n\t */\n\tfunction _typeResult (typeDetect, res) {\n\t\treturn res === true\n\t\t\t? typeDetect._name\n\t\t\t: res;\n\t}\n\t\n\t/**\n\t * Calculate the 'type' of a column\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, iLen, j, jen, k, ken;\n\t\tvar col, detectedType, cache;\n\t\n\t\t// For each column, spin over the data type detection functions, seeing if one matches\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\t\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\t// With SSP type detection can be unreliable and error prone, so we provide a way\n\t\t\t\t// to turn it off.\n\t\t\t\tif (! settings.typeDetect) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tvar typeDetect = types[j];\n\t\n\t\t\t\t\t// There can be either one, or three type detection functions\n\t\t\t\t\tvar oneOf = typeDetect.oneOf;\n\t\t\t\t\tvar allOf = typeDetect.allOf || typeDetect;\n\t\t\t\t\tvar init = typeDetect.init;\n\t\t\t\t\tvar one = false;\n\t\n\t\t\t\t\tdetectedType = null;\n\t\n\t\t\t\t\t// Fast detect based on column assignment\n\t\t\t\t\tif (init) {\n\t\t\t\t\t\tdetectedType = _typeResult(typeDetect, init(settings, col, i));\n\t\n\t\t\t\t\t\tif (detectedType) {\n\t\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\tif (! data[k]) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only one data point in the column needs to match this function\n\t\t\t\t\t\tif (oneOf && ! one) {\n\t\t\t\t\t\t\tone = _typeResult(typeDetect, oneOf( cache[k], settings ));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// All data points need to match this function\n\t\t\t\t\t\tdetectedType = _typeResult(typeDetect, allOf( cache[k], settings ));\n\t\n\t\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t\t// types\n\t\t\t\t\t\tif ( ! detectedType && j !== types.length-3 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t\t// must not be empty\n\t\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( (oneOf && one && detectedType) || (!oneOf && detectedType) ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Set class names for header / footer for auto type classes\n\t\t\tvar autoClass = _ext.type.className[col.sType];\n\t\n\t\t\tif (autoClass) {\n\t\t\t\t_columnAutoClass(settings.aoHeader, i, autoClass);\n\t\t\t\t_columnAutoClass(settings.aoFooter, i, autoClass);\n\t\t\t}\n\t\n\t\t\tvar renderer = _ext.type.render[col.sType];\n\t\n\t\t\t// This can only happen once! There is no way to remove\n\t\t\t// a renderer. After the first time the renderer has\n\t\t\t// already been set so createTr will run the renderer itself.\n\t\t\tif (renderer && ! col._render) {\n\t\t\t\tcol._render = DataTable.util.get(renderer);\n\t\n\t\t\t\t_columnAutoRender(settings, i);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Apply an auto detected renderer to data which doesn't yet have\n\t * a renderer\n\t */\n\tfunction _columnAutoRender(settings, colIdx) {\n\t\tvar data = settings.aoData;\n\t\n\t\tfor (var i=0 ; i<data.length ; i++) {\n\t\t\tif (data[i].nTr) {\n\t\t\t\t// We have to update the display here since there is no\n\t\t\t\t// invalidation check for the data\n\t\t\t\tvar display = _fnGetCellData( settings, i, colIdx, 'display' );\n\t\n\t\t\t\tdata[i].displayData[colIdx] = display;\n\t\t\t\t_fnWriteCell(data[i].anCells[colIdx], display);\n\t\n\t\t\t\t// No need to update sort / filter data since it has\n\t\t\t\t// been invalidated and will be re-read with the\n\t\t\t\t// renderer now applied\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Apply a class name to a column's header cells\n\t */\n\tfunction _columnAutoClass(container, colIdx, className) {\n\t\tcontainer.forEach(function (row) {\n\t\t\tif (row[colIdx] && row[colIdx].unique) {\n\t\t\t\t_addClass(row[colIdx].cell, className);\n\t\t\t}\n\t\t});\n\t}\n\t\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {array} headerLayout Layout for header as it was loaded\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, headerLayout, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\t\tvar columns = oSettings.aoColumns;\n\t\n\t\tif ( aoCols ) {\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) {\n\t\t\t\tif (aoCols[i] && aoCols[i].name) {\n\t\t\t\t\tcolumns[i].sName = aoCols[i].name;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\t\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t\t? def.target\n\t\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t\t? def.targets\n\t\t\t\t\t\t: def.aTargets;\n\t\n\t\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\t\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tvar target = aTargets[j];\n\t\n\t\t\t\t\tif ( typeof target === 'number' && target >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( columns.length <= target )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( target, def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof target === 'number' && target < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( columns.length+target, def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof target === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ ) {\n\t\t\t\t\t\t\tif (target === '_all') {\n\t\t\t\t\t\t\t\t// Apply to all columns\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (target.indexOf(':name') !== -1) {\n\t\t\t\t\t\t\t\t// Column selector\n\t\t\t\t\t\t\t\tif (columns[k].sName === target.replace(':name', '')) {\n\t\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Cell selector\n\t\t\t\t\t\t\t\theaderLayout.forEach(function (row) {\n\t\t\t\t\t\t\t\t\tif (row[k]) {\n\t\t\t\t\t\t\t\t\t\tvar cell = $(row[k].cell);\n\t\n\t\t\t\t\t\t\t\t\t\t// Legacy support. Note that it means that we don't support\n\t\t\t\t\t\t\t\t\t\t// an element name selector only, since they are treated as\n\t\t\t\t\t\t\t\t\t\t// class names for 1.x compat.\n\t\t\t\t\t\t\t\t\t\tif (target.match(/^[a-z][\\w-]*$/i)) {\n\t\t\t\t\t\t\t\t\t\t\ttarget = '.' + target;\n\t\t\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\t\t\tif (cell.is( target )) {\n\t\t\t\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Statically defined columns array\n\t\tif ( aoCols ) {\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) {\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Get the width for a given set of columns\n\t *\n\t * @param {*} settings DataTables settings object\n\t * @param {*} targets Columns - comma separated string or array of numbers\n\t * @param {*} original Use the original width (true) or calculated (false)\n\t * @param {*} incVisible Include visible columns (true) or not (false)\n\t * @returns Combined CSS value\n\t */\n\tfunction _fnColumnsSumWidth( settings, targets, original, incVisible ) {\n\t\tif ( ! Array.isArray( targets ) ) {\n\t\t\ttargets = _fnColumnsFromHeader( targets );\n\t\t}\n\t\n\t\tvar sum = 0;\n\t\tvar unit;\n\t\tvar columns = settings.aoColumns;\n\t\t\n\t\tfor ( var i=0, iLen=targets.length ; i<iLen ; i++ ) {\n\t\t\tvar column = columns[ targets[i] ];\n\t\t\tvar definedWidth = original ?\n\t\t\t\tcolumn.sWidthOrig :\n\t\t\t\tcolumn.sWidth;\n\t\n\t\t\tif ( ! incVisible && column.bVisible === false ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif ( definedWidth === null || definedWidth === undefined ) {\n\t\t\t\treturn null; // can't determine a defined width - browser defined\n\t\t\t}\n\t\t\telse if ( typeof definedWidth === 'number' ) {\n\t\t\t\tunit = 'px';\n\t\t\t\tsum += definedWidth;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar matched = definedWidth.match(/([\\d\\.]+)([^\\d]*)/);\n\t\n\t\t\t\tif ( matched ) {\n\t\t\t\t\tsum += matched[1] * 1;\n\t\t\t\t\tunit = matched.length === 3 ?\n\t\t\t\t\t\tmatched[2] :\n\t\t\t\t\t\t'px';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn sum + unit;\n\t}\n\t\n\tfunction _fnColumnsFromHeader( cell )\n\t{\n\t\tvar attr = $(cell).closest('[data-dt-column]').attr('data-dt-column');\n\t\n\t\tif ( ! attr ) {\n\t\t\treturn [];\n\t\t}\n\t\n\t\treturn attr.split(',').map( function (val) {\n\t\t\treturn val * 1;\n\t\t} );\n\t}\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a JavaScript source, rather than a\n\t * DOM source.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array} data data array to be added\n\t *  @param {node} [tr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [tds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( settings, dataIn, tr, tds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar rowIdx = settings.aoData.length;\n\t\tvar rowModel = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: tr ? 'dom' : 'data',\n\t\t\tidx: rowIdx\n\t\t} );\n\t\n\t\trowModel._aData = dataIn;\n\t\tsettings.aoData.push( rowModel );\n\t\n\t\tvar columns = settings.aoColumns;\n\t\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\t\n\t\t/* Add to the display array */\n\t\tsettings.aiDisplayMaster.push( rowIdx );\n\t\n\t\tvar id = settings.rowIdFn( dataIn );\n\t\tif ( id !== undefined ) {\n\t\t\tsettings.aIds[ id ] = rowModel;\n\t\t}\n\t\n\t\t/* Create the DOM information, or register it if already present */\n\t\tif ( tr || ! settings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( settings, rowIdx, tr, tds );\n\t\t}\n\t\n\t\treturn rowIdx;\n\t}\n\t\n\t\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\t\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\t\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n\t{\n\t\tif (type === 'search') {\n\t\t\ttype = 'filter';\n\t\t}\n\t\telse if (type === 'order') {\n\t\t\ttype = 'sort';\n\t\t}\n\t\n\t\tvar row = settings.aoData[rowIdx];\n\t\n\t\tif (! row) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar draw           = settings.iDraw;\n\t\tvar col            = settings.aoColumns[colIdx];\n\t\tvar rowData        = row._aData;\n\t\tvar defaultContent = col.sDefaultContent;\n\t\tvar cellData       = col.fnGetData( rowData, type, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t} );\n\t\n\t\t// Allow for a node being returned for non-display types\n\t\tif (type !== 'display' && cellData && typeof cellData === 'object' && cellData.nodeName) {\n\t\t\tcellData = cellData.innerHTML;\n\t\t}\n\t\n\t\tif ( cellData === undefined ) {\n\t\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\t\tsettings.iDrawError = draw;\n\t\t\t}\n\t\t\treturn defaultContent;\n\t\t}\n\t\n\t\t// When the data source is null and a specific data type is requested (i.e.\n\t\t// not the original data), we can use default column data\n\t\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\t\tcellData = defaultContent;\n\t\t}\n\t\telse if ( typeof cellData === 'function' ) {\n\t\t\t// If the data source is a function, then we run it and use the return,\n\t\t\t// executing in the scope of the data object (for instances)\n\t\t\treturn cellData.call( rowData );\n\t\t}\n\t\n\t\tif ( cellData === null && type === 'display' ) {\n\t\t\treturn '';\n\t\t}\n\t\n\t\tif ( type === 'filter' ) {\n\t\t\tvar formatters = DataTable.ext.type.search;\n\t\n\t\t\tif ( formatters[ col.sType ] ) {\n\t\t\t\tcellData = formatters[ col.sType ]( cellData );\n\t\t\t}\n\t\t}\n\t\n\t\treturn cellData;\n\t}\n\t\n\t\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} rowIdx aoData row id\n\t *  @param {int} colIdx Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n\t{\n\t\tvar col     = settings.aoColumns[colIdx];\n\t\tvar rowData = settings.aoData[rowIdx]._aData;\n\t\n\t\tcol.fnSetData( rowData, val, {\n\t\t\tsettings: settings,\n\t\t\trow:      rowIdx,\n\t\t\tcol:      colIdx\n\t\t}  );\n\t}\n\t\n\t/**\n\t * Write a value to a cell\n\t * @param {*} td Cell\n\t * @param {*} val Value\n\t */\n\tfunction _fnWriteCell(td, val)\n\t{\n\t\tif (val && typeof val === 'object' && val.nodeName) {\n\t\t\t$(td)\n\t\t\t\t.empty()\n\t\t\t\t.append(val);\n\t\t}\n\t\telse {\n\t\t\ttd.innerHTML = val;\n\t\t}\n\t}\n\t\n\t\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\t\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\tvar parts = str.match(/(\\\\.|[^.])+/g) || [''];\n\t\n\t\treturn parts.map( function ( s ) {\n\t\t\treturn s.replace(/\\\\\\./g, '.');\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnGetObjectDataFn = DataTable.util.get;\n\t\n\t\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnSetObjectDataFn = DataTable.util.set;\n\t\n\t\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\t\n\t\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t\tsettings.aIds = {};\n\t}\n\t\n\t\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {int}    rowIdx   Row index to invalidate\n\t * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n\t *     or 'data'\n\t * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n\t *     row will be invalidated\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, iLen;\n\t\n\t\t// Remove the cached data for the row\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\t\trow.displayData = null;\n\t\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements(\n\t\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t\t)\n\t\t\t\t.data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\t\t\tvar display = _fnGetRowDisplay(settings, rowIdx);\n\t\n\t\t\tif ( cells ) {\n\t\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t\t_fnWriteCell(cells[colIdx], display[colIdx]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfor ( i=0, iLen=cells.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t_fnWriteCell(cells[i], display[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Column specific invalidation\n\t\tvar cols = settings.aoColumns;\n\t\tif ( colIdx !== undefined ) {\n\t\t\t// Type - the data might have changed\n\t\t\tcols[ colIdx ].sType = null;\n\t\n\t\t\t// Max length string. Its a fairly cheep recalculation, so not worth\n\t\t\t// something more complicated\n\t\t\tcols[ colIdx ].wideStrings = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, iLen=cols.length ; i<iLen ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t\tcols[i].wideStrings = null;\n\t\t\t}\n\t\n\t\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t\t_fnRowAttributes( settings, row );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node|object} TR element from which to read data or existing row\n\t *   object from which to re-read the data from the cells\n\t * @param {int} [colIdx] Optional column index\n\t * @param {array|object} [d] Data source object. If `colIdx` is given then this\n\t *   parameter should also be given and will be used to write the data into.\n\t *   Only the column in question will be written\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row, colIdx, d )\n\t{\n\t\tvar\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, i=0, contents,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tobjectRead = settings._rowReadObject;\n\t\n\t\t// Allow the data object to be passed in, or construct\n\t\td = d !== undefined ?\n\t\t\td :\n\t\t\tobjectRead ?\n\t\t\t\t{} :\n\t\t\t\t[];\n\t\n\t\tvar attr = function ( str, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\t\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t// Read data from a cell and store into the data object\n\t\tvar cellProcess = function ( cell ) {\n\t\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = (cell.innerHTML).trim();\n\t\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\t\tsetter( d, contents );\n\t\n\t\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t\t// be read to either an object or an array.\n\t\t\t\t\tif ( objectRead ) {\n\t\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td[i] = contents;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ti++;\n\t\t};\n\t\n\t\tif ( td ) {\n\t\t\t// `tr` element was passed in\n\t\t\twhile ( td ) {\n\t\t\t\tname = td.nodeName.toUpperCase();\n\t\n\t\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\t\tcellProcess( td );\n\t\t\t\t\ttds.push( td );\n\t\t\t\t}\n\t\n\t\t\t\ttd = td.nextSibling;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Existing row object passed in\n\t\t\ttds = row.anCells;\n\t\n\t\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\t\tcellProcess( tds[j] );\n\t\t\t}\n\t\t}\n\t\n\t\t// Read the ID from the DOM if present\n\t\tvar rowNode = row.firstChild ? row : row.nTr;\n\t\n\t\tif ( rowNode ) {\n\t\t\tvar id = rowNode.getAttribute( 'id' );\n\t\n\t\t\tif ( id ) {\n\t\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t\n\t/**\n\t * Render and cache a row's display data for the columns, if required\n\t * @returns \n\t */\n\tfunction _fnGetRowDisplay (settings, rowIdx) {\n\t\tvar rowModal = settings.aoData[rowIdx];\n\t\tvar columns = settings.aoColumns;\n\t\n\t\tif (! rowModal.displayData) {\n\t\t\t// Need to render and cache\n\t\t\trowModal.displayData = [];\n\t\t\n\t\t\tfor ( var colIdx=0, len=columns.length ; colIdx<len ; colIdx++ ) {\n\t\t\t\trowModal.displayData.push(\n\t\t\t\t\t_fnGetCellData( settings, rowIdx, colIdx, 'display' )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\n\t\treturn rowModal.displayData;\n\t}\n\t\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen, create,\n\t\t\ttrClass = oSettings.oClasses.tbody.row;\n\t\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\t\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\t\n\t\t\t_addClass(nTr, trClass);\n\t\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\t\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( oSettings, row );\n\t\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\t\t\t\tcreate = nTrIn && anTds[i] ? false : true;\n\t\n\t\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\t\n\t\t\t\tif (! nTd) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\n\t\t\t\tnTd._DT_CellIndex = {\n\t\t\t\t\trow: iRow,\n\t\t\t\t\tcolumn: i\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tcells.push( nTd );\n\t\t\t\t\n\t\t\t\tvar display = _fnGetRowDisplay(oSettings, iRow);\n\t\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif (\n\t\t\t\t\tcreate ||\n\t\t\t\t\t(\n\t\t\t\t\t\t(oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t\t(!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t_fnWriteCell(nTd, display[i]);\n\t\t\t\t}\n\t\n\t\t\t\t// column class\n\t\t\t\t_addClass(nTd, oCol.sClass);\n\t\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && create )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && ! create )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\t\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', 'row-created', [nTr, rowData, iRow, cells] );\n\t\t}\n\t\telse {\n\t\t\t_addClass(row.nTr, trClass);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} settings DataTables settings object\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( settings, row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\t\n\t\tif ( tr ) {\n\t\t\tvar id = settings.rowIdFn( data );\n\t\n\t\t\tif ( id ) {\n\t\t\t\ttr.id = id;\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\t\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowAttr ) {\n\t\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t\t}\n\t\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( settings, side )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar columns = settings.aoColumns;\n\t\tvar i, iLen, row;\n\t\tvar target = side === 'header'\n\t\t\t? settings.nTHead\n\t\t\t: settings.nTFoot;\n\t\tvar titleProp = side === 'header' ? 'sTitle' : side;\n\t\n\t\t// Footer might be defined\n\t\tif (! target) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// If no cells yet and we have content for them, then create\n\t\tif (side === 'header' || _pluck(settings.aoColumns, titleProp).join('')) {\n\t\t\trow = $('tr', target);\n\t\n\t\t\t// Add a row if needed\n\t\t\tif (! row.length) {\n\t\t\t\trow = $('<tr/>').appendTo(target)\n\t\t\t}\n\t\n\t\t\t// Add the number of cells needed to make up to the number of columns\n\t\t\tif (row.length === 1) {\n\t\t\t\tvar cellCount = 0;\n\t\t\t\t\n\t\t\t\t$('td, th', row).each(function () {\n\t\t\t\t\tcellCount += this.colSpan;\n\t\t\t\t});\n\t\n\t\t\t\tfor ( i=cellCount, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\t\t\t$('<th/>')\n\t\t\t\t\t\t.html( columns[i][titleProp] || '' )\n\t\t\t\t\t\t.appendTo( row );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tvar detected = _fnDetectHeader( settings, target, true );\n\t\n\t\tif (side === 'header') {\n\t\t\tsettings.aoHeader = detected;\n\t\t\t$('tr', target).addClass(classes.thead.row);\n\t\t}\n\t\telse {\n\t\t\tsettings.aoFooter = detected;\n\t\t\t$('tr', target).addClass(classes.tfoot.row);\n\t\t}\n\t\n\t\t// Every cell needs to be passed through the renderer\n\t\t$(target).children('tr').children('th, td')\n\t\t\t.each( function () {\n\t\t\t\t_fnRenderer( settings, side )(\n\t\t\t\t\tsettings, $(this), classes\n\t\t\t\t);\n\t\t\t} );\n\t}\n\t\n\t/**\n\t * Build a layout structure for a header or footer\n\t *\n\t * @param {*} settings DataTables settings\n\t * @param {*} source Source layout array\n\t * @param {*} incColumns What columns should be included\n\t * @returns Layout array in column index order\n\t */\n\tfunction _fnHeaderLayout( settings, source, incColumns )\n\t{\n\t\tvar row, column, cell;\n\t\tvar local = [];\n\t\tvar structure = [];\n\t\tvar columns = settings.aoColumns;\n\t\tvar columnCount = columns.length;\n\t\tvar rowspan, colspan;\n\t\n\t\tif ( ! source ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Default is to work on only visible columns\n\t\tif ( ! incColumns ) {\n\t\t\tincColumns = _range(columnCount)\n\t\t\t\t.filter(function (idx) {\n\t\t\t\t\treturn columns[idx].bVisible;\n\t\t\t\t});\n\t\t}\n\t\n\t\t// Make a copy of the master layout array, but with only the columns we want\n\t\tfor ( row=0 ; row<source.length ; row++ ) {\n\t\t\t// Remove any columns we haven't selected\n\t\t\tlocal[row] = source[row].slice().filter(function (cell, i) {\n\t\t\t\treturn incColumns.includes(i);\n\t\t\t});\n\t\n\t\t\t// Prep the structure array - it needs an element for each row\n\t\t\tstructure.push( [] );\n\t\t}\n\t\n\t\tfor ( row=0 ; row<local.length ; row++ ) {\n\t\t\tfor ( column=0 ; column<local[row].length ; column++ ) {\n\t\t\t\trowspan = 1;\n\t\t\t\tcolspan = 1;\n\t\n\t\t\t\t// Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t// insert point. If there is, then there is nothing to do.\n\t\t\t\tif ( structure[row][column] === undefined ) {\n\t\t\t\t\tcell = local[row][column].cell;\n\t\n\t\t\t\t\t// Expand for rowspan\n\t\t\t\t\twhile (\n\t\t\t\t\t\tlocal[row+rowspan] !== undefined &&\n\t\t\t\t\t\tlocal[row][column].cell == local[row+rowspan][column].cell\n\t\t\t\t\t) {\n\t\t\t\t\t\tstructure[row+rowspan][column] = null;\n\t\t\t\t\t\trowspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// And for colspan\n\t\t\t\t\twhile (\n\t\t\t\t\t\tlocal[row][column+colspan] !== undefined &&\n\t\t\t\t\t\tlocal[row][column].cell == local[row][column+colspan].cell\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Which also needs to go over rows\n\t\t\t\t\t\tfor ( var k=0 ; k<rowspan ; k++ ) {\n\t\t\t\t\t\t\tstructure[row+k][column+colspan] = null;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tcolspan++;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar titleSpan = $('.dt-column-title', cell);\n\t\n\t\t\t\t\tstructure[row][column] = {\n\t\t\t\t\t\tcell: cell,\n\t\t\t\t\t\tcolspan: colspan,\n\t\t\t\t\t\trowspan: rowspan,\n\t\t\t\t\t\ttitle: titleSpan.length\n\t\t\t\t\t\t\t? titleSpan.html()\n\t\t\t\t\t\t\t: $(cell).html()\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn structure;\n\t}\n\t\n\t\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states.\n\t *\n\t *  @param object oSettings dataTables settings object\n\t *  @param array aoSource Layout array from _fnDetectHeader\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( settings, source )\n\t{\n\t\tvar layout = _fnHeaderLayout(settings, source);\n\t\tvar tr, n;\n\t\n\t\tfor ( var row=0 ; row<source.length ; row++ ) {\n\t\t\ttr = source[row].row;\n\t\n\t\t\t// All cells are going to be replaced, so empty out the row\n\t\t\t// Can't use $().empty() as that kills event handlers\n\t\t\tif (tr) {\n\t\t\t\twhile( (n = tr.firstChild) ) {\n\t\t\t\t\ttr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tfor ( var column=0 ; column<layout[row].length ; column++ ) {\n\t\t\t\tvar point = layout[row][column];\n\t\n\t\t\t\tif (point) {\n\t\t\t\t\t$(point.cell)\n\t\t\t\t\t\t.appendTo(tr)\n\t\t\t\t\t\t.attr('rowspan', point.rowspan)\n\t\t\t\t\t\t.attr('colspan', point.colspan);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param ajaxComplete true after ajax call to complete rendering\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings, ajaxComplete )\n\t{\n\t\t// Allow for state saving and a custom start position\n\t\t_fnStart( oSettings );\n\t\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( aPreDraw.indexOf(false) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\t\tvar columns = oSettings.aoColumns;\n\t\tvar body = $(oSettings.nTBody);\n\t\n\t\toSettings.bDrawing = true;\n\t\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.deferLoading )\n\t\t{\n\t\t\toSettings.deferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t\t{\n\t\t\t// Show loading message for server-side processing\n\t\t\tif (oSettings.iDraw === 0) {\n\t\t\t\tbody.empty().append(_emptyRow(oSettings));\n\t\t\t}\n\t\n\t\t\t_fnAjaxUpdate( oSettings );\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\t\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\n\t\t\t\t// Row has been deleted - can't be displayed\n\t\t\t\tif (aoData === null)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\t// Row node hasn't been created yet\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\t\n\t\t\t\tvar nRow = aoData.nTr;\n\t\n\t\t\t\t// Add various classes as needed\n\t\t\t\tfor (var i=0 ; i<columns.length ; i++) {\n\t\t\t\t\tvar col = columns[i];\n\t\t\t\t\tvar td = aoData.anCells[i];\n\t\n\t\t\t\t\t_addClass(td, _ext.type.className[col.sType]); // auto class\n\t\t\t\t\t_addClass(td, oSettings.oClasses.tbody.cell); // all cells\n\t\t\t\t}\n\t\n\t\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t\t// useful?\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\t\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tanRows[ 0 ] = _emptyRow(oSettings);\n\t\t}\n\t\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\t\n\t\t// replaceChildren is faster, but only became widespread in 2020,\n\t\t// so a fall back in jQuery is provided for older browsers.\n\t\tif (body[0].replaceChildren) {\n\t\t\tbody[0].replaceChildren.apply(body[0], anRows);\n\t\t}\n\t\telse {\n\t\t\tbody.children().detach();\n\t\t\tbody.append( $(anRows) );\n\t\t}\n\t\n\t\t// Empty table needs a specific class\n\t\t$(oSettings.nTableWrapper).toggleClass('dt-empty-footer', $('tr', oSettings.nTFoot).length === 0);\n\t\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings], true );\n\t\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\t\n\t\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition, recompute )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\t\n\t\tif (recompute === undefined || recompute === true) {\n\t\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t\t_fnColumnTypes( settings );\n\t\n\t\t\tif ( sort ) {\n\t\t\t\t_fnSort( settings );\n\t\t\t}\n\t\n\t\t\tif ( filter ) {\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No filtering, so we want to just use the display master\n\t\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t\t}\n\t\t}\n\t\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\t\telse {\n\t\t\t// Keep position, but make sure that there is actually data to display,\n\t\t\t// otherwise we need to rewind a bit (e.g. if rows were deleted)\n\t\t\t_fnLengthOverflow(settings);\n\t\t}\n\t\n\t\t// Let any modules know about the draw hold position state (used by\n\t\t// scrolling internally)\n\t\tsettings._drawHold = holdPosition;\n\t\n\t\t_fnDraw( settings );\n\t\n\t\tsettings.api.one('draw', function () {\n\t\t\tsettings._drawHold = false;\n\t\t});\n\t}\n\t\n\t\n\t/*\n\t * Table is empty - create a row with an empty message in it\n\t */\n\tfunction _emptyRow ( settings ) {\n\t\tvar oLang = settings.oLanguage;\n\t\tvar zero = oLang.sZeroRecords;\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\n\t\t// Make use of the fact that settings.json is only set once the initial data has\n\t\t// been loaded. Show loading when that isn't the case\n\t\tif ((dataSrc === 'ssp' || dataSrc === 'ajax') && ! settings.json) {\n\t\t\tzero = oLang.sLoadingRecords;\n\t\t}\n\t\telse if ( oLang.sEmptyTable && settings.fnRecordsTotal() === 0 )\n\t\t{\n\t\t\tzero = oLang.sEmptyTable;\n\t\t}\n\t\n\t\treturn $( '<tr/>' )\n\t\t\t.append( $('<td />', {\n\t\t\t\t'colSpan': _fnVisibleColumns( settings ),\n\t\t\t\t'class':   settings.oClasses.empty.row\n\t\t\t} ).html( zero ) )[0];\n\t}\n\t\n\t\n\t/**\n\t * Expand the layout items into an object for the rendering function\n\t */\n\tfunction _layoutItems (row, align, items) {\n\t\tif ( Array.isArray(items)) {\n\t\t\tfor (var i=0 ; i<items.length ; i++) {\n\t\t\t\t_layoutItems(row, align, items[i]);\n\t\t\t}\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar rowCell = row[align];\n\t\n\t\t// If it is an object, then there can be multiple features contained in it\n\t\tif ( $.isPlainObject( items ) ) {\n\t\t\t// A feature plugin cannot be named \"features\" due to this check\n\t\t\tif (items.features) {\n\t\t\t\tif (items.rowId) {\n\t\t\t\t\trow.id = items.rowId;\n\t\t\t\t}\n\t\t\t\tif (items.rowClass) {\n\t\t\t\t\trow.className = items.rowClass;\n\t\t\t\t}\n\t\n\t\t\t\trowCell.id = items.id;\n\t\t\t\trowCell.className = items.className;\n\t\n\t\t\t\t_layoutItems(row, align, items.features);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tObject.keys(items).map(function (key) {\n\t\t\t\t\trowCell.contents.push( {\n\t\t\t\t\t\tfeature: key,\n\t\t\t\t\t\topts: items[key]\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\trowCell.contents.push(items);\n\t\t}\n\t}\n\t\n\t/**\n\t * Find, or create a layout row\n\t */\n\tfunction _layoutGetRow(rows, rowNum, align) {\n\t\tvar row;\n\t\n\t\t// Find existing rows\n\t\tfor (var i=0; i<rows.length; i++) {\n\t\t\trow = rows[i];\n\t\n\t\t\tif (row.rowNum === rowNum) {\n\t\t\t\t// full is on its own, but start and end share a row\n\t\t\t\tif (\n\t\t\t\t\t(align === 'full' && row.full) ||\n\t\t\t\t\t((align === 'start' || align === 'end') && (row.start || row.end))\n\t\t\t\t) {\n\t\t\t\t\tif (! row[align]) {\n\t\t\t\t\t\trow[align] = {\n\t\t\t\t\t\t\tcontents: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// If we get this far, then there was no match, create a new row\n\t\trow = {\n\t\t\trowNum: rowNum\t\n\t\t};\n\t\n\t\trow[align] = {\n\t\t\tcontents: []\n\t\t};\n\t\n\t\trows.push(row);\n\t\n\t\treturn row;\n\t}\n\t\n\t/**\n\t * Convert a `layout` object given by a user to the object structure needed\n\t * for the renderer. This is done twice, once for above and once for below\n\t * the table. Ordering must also be considered.\n\t *\n\t * @param {*} settings DataTables settings object\n\t * @param {*} layout Layout object to convert\n\t * @param {string} side `top` or `bottom`\n\t * @returns Converted array structure - one item for each row.\n\t */\n\tfunction _layoutArray ( settings, layout, side ) {\n\t\tvar rows = [];\n\t\t\n\t\t// Split out into an array\n\t\t$.each( layout, function ( pos, items ) {\n\t\t\tif (items === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar parts = pos.match(/^([a-z]+)([0-9]*)([A-Za-z]*)$/);\n\t\t\tvar rowNum = parts[2]\n\t\t\t\t? parts[2] * 1\n\t\t\t\t: 0;\n\t\t\tvar align = parts[3]\n\t\t\t\t? parts[3].toLowerCase()\n\t\t\t\t: 'full';\n\t\n\t\t\t// Filter out the side we aren't interested in\n\t\t\tif (parts[1] !== side) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// Get or create the row we should attach to\n\t\t\tvar row = _layoutGetRow(rows, rowNum, align);\n\t\n\t\t\t_layoutItems(row, align, items);\n\t\t});\n\t\n\t\t// Order by item identifier\n\t\trows.sort( function ( a, b ) {\n\t\t\tvar order1 = a.rowNum;\n\t\t\tvar order2 = b.rowNum;\n\t\n\t\t\t// If both in the same row, then the row with `full` comes first\n\t\t\tif (order1 === order2) {\n\t\t\t\tvar ret = a.full && ! b.full ? -1 : 1;\n\t\n\t\t\t\treturn side === 'bottom'\n\t\t\t\t\t? ret * -1\n\t\t\t\t\t: ret;\n\t\t\t}\n\t\n\t\t\treturn order2 - order1;\n\t\t} );\n\t\n\t\t// Invert for below the table\n\t\tif ( side === 'bottom' ) {\n\t\t\trows.reverse();\n\t\t}\n\t\n\t\tfor (var row = 0; row<rows.length; row++) {\n\t\t\tdelete rows[row].rowNum;\n\t\n\t\t\t_layoutResolve(settings, rows[row]);\n\t\t}\n\t\n\t\treturn rows;\n\t}\n\t\n\t\n\t/**\n\t * Convert the contents of a row's layout object to nodes that can be inserted\n\t * into the document by a renderer. Execute functions, look up plug-ins, etc.\n\t *\n\t * @param {*} settings DataTables settings object\n\t * @param {*} row Layout object for this row\n\t */\n\tfunction _layoutResolve( settings, row ) {\n\t\tvar getFeature = function (feature, opts) {\n\t\t\tif ( ! _ext.features[ feature ] ) {\n\t\t\t\t_fnLog( settings, 0, 'Unknown feature: '+ feature );\n\t\t\t}\n\t\n\t\t\treturn _ext.features[ feature ].apply( this, [settings, opts] );\n\t\t};\n\t\n\t\tvar resolve = function ( item ) {\n\t\t\tif (! row[ item ]) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar line = row[ item ].contents;\n\t\n\t\t\tfor ( var i=0, iLen=line.length ; i<iLen ; i++ ) {\n\t\t\t\tif ( ! line[i] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if ( typeof line[i] === 'string' ) {\n\t\t\t\t\tline[i] = getFeature( line[i], null );\n\t\t\t\t}\n\t\t\t\telse if ( $.isPlainObject(line[i]) ) {\n\t\t\t\t\t// If it's an object, it just has feature and opts properties from\n\t\t\t\t\t// the transform in _layoutArray\n\t\t\t\t\tline[i] = getFeature(line[i].feature, line[i].opts);\n\t\t\t\t}\n\t\t\t\telse if ( typeof line[i].node === 'function' ) {\n\t\t\t\t\tline[i] = line[i].node( settings );\n\t\t\t\t}\n\t\t\t\telse if ( typeof line[i] === 'function' ) {\n\t\t\t\t\tvar inst = line[i]( settings );\n\t\n\t\t\t\t\tline[i] = typeof inst.node === 'function' ?\n\t\t\t\t\t\tinst.node() :\n\t\t\t\t\t\tinst;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\tresolve('start');\n\t\tresolve('end');\n\t\tresolve('full');\n\t}\n\t\n\t\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} settings DataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Wrapper div around everything DataTables controls\n\t\tvar insert = $('<div/>')\n\t\t\t.attr({\n\t\t\t\tid:      settings.sTableId+'_wrapper',\n\t\t\t\t'class': classes.container\n\t\t\t})\n\t\t\t.insertBefore(table);\n\t\n\t\tsettings.nTableWrapper = insert[0];\n\t\n\t\tif (settings.sDom) {\n\t\t\t// Legacy\n\t\t\t_fnLayoutDom(settings, settings.sDom, insert);\n\t\t}\n\t\telse {\n\t\t\tvar top = _layoutArray( settings, settings.layout, 'top' );\n\t\t\tvar bottom = _layoutArray( settings, settings.layout, 'bottom' );\n\t\t\tvar renderer = _fnRenderer( settings, 'layout' );\n\t\t\n\t\t\t// Everything above - the renderer will actually insert the contents into the document\n\t\t\ttop.forEach(function (item) {\n\t\t\t\trenderer( settings, insert, item );\n\t\t\t});\n\t\n\t\t\t// The table - always the center of attention\n\t\t\trenderer( settings, insert, {\n\t\t\t\tfull: {\n\t\t\t\t\ttable: true,\n\t\t\t\t\tcontents: [ _fnFeatureHtmlTable(settings) ]\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Everything below\n\t\t\tbottom.forEach(function (item) {\n\t\t\t\trenderer( settings, insert, item );\n\t\t\t});\n\t\t}\n\t\n\t\t// Processing floats on top, so it isn't an inserted feature\n\t\t_processingHtml( settings );\n\t}\n\t\n\t/**\n\t * Draw the table with the legacy DOM property\n\t * @param {*} settings DT settings object\n\t * @param {*} dom DOM string\n\t * @param {*} insert Insert point\n\t */\n\tfunction _fnLayoutDom( settings, dom, insert )\n\t{\n\t\tvar parts = dom.match(/(\".*?\")|('.*?')|./g);\n\t\tvar featureNode, option, newNode, next, attr;\n\t\n\t\tfor ( var i=0 ; i<parts.length ; i++ ) {\n\t\t\tfeatureNode = null;\n\t\t\toption = parts[i];\n\t\n\t\t\tif ( option == '<' ) {\n\t\t\t\t// New container div\n\t\t\t\tnewNode = $('<div/>');\n\t\n\t\t\t\t// Check to see if we should append an id and/or a class name to the container\n\t\t\t\tnext = parts[i+1];\n\t\n\t\t\t\tif ( next[0] == \"'\" || next[0] == '\"' ) {\n\t\t\t\t\tattr = next.replace(/['\"]/g, '');\n\t\n\t\t\t\t\tvar id = '', className;\n\t\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( attr.indexOf('.') != -1 ) {\n\t\t\t\t\t\tvar split = attr.split('.');\n\t\n\t\t\t\t\t\tid = split[0];\n\t\t\t\t\t\tclassName = split[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( attr[0] == \"#\" ) {\n\t\t\t\t\t\tid = attr;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclassName = attr;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tnewNode\n\t\t\t\t\t\t.attr('id', id.substring(1))\n\t\t\t\t\t\t.addClass(className);\n\t\n\t\t\t\t\ti++; // Move along the position array\n\t\t\t\t}\n\t\n\t\t\t\tinsert.append( newNode );\n\t\t\t\tinsert = newNode;\n\t\t\t}\n\t\t\telse if ( option == '>' ) {\n\t\t\t\t// End container div\n\t\t\t\tinsert = insert.parent();\n\t\t\t}\n\t\t\telse if ( option == 't' ) {\n\t\t\t\t// Table\n\t\t\t\tfeatureNode = _fnFeatureHtmlTable( settings );\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDataTable.ext.feature.forEach(function(feature) {\n\t\t\t\t\tif ( option == feature.cFeature ) {\n\t\t\t\t\t\tfeatureNode = feature.fnInit( settings );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\t// Add to the display\n\t\t\tif ( featureNode ) {\n\t\t\t\tinsert.append( featureNode );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell at that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param {node} thead The header/footer element for the table\n\t *  @returns {array} Calculated layout array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( settings, thead, write )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar rows = $(thead).children('tr');\n\t\tvar row, cell;\n\t\tvar i, k, l, iLen, shifted, column, colspan, rowspan;\n\t\tvar titleRow = settings.titleRow;\n\t\tvar isHeader = thead && thead.nodeName.toLowerCase() === 'thead';\n\t\tvar layout = [];\n\t\tvar unique;\n\t\tvar shift = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t\t\twhile ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\t\n\t\t// We know how many rows there are in the layout - so prep it\n\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\tlayout.push( [] );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\trow = rows[i];\n\t\t\tcolumn = 0;\n\t\n\t\t\t// For every cell in the row..\n\t\t\tcell = row.firstChild;\n\t\t\twhile ( cell ) {\n\t\t\t\tif (\n\t\t\t\t\tcell.nodeName.toUpperCase() == 'TD' ||\n\t\t\t\t\tcell.nodeName.toUpperCase() == 'TH'\n\t\t\t\t) {\n\t\t\t\t\tvar cols = [];\n\t\t\t\t\tvar jqCell = $(cell);\n\t\n\t\t\t\t\t// Get the col and rowspan attributes from the DOM and sanitise them\n\t\t\t\t\tcolspan = cell.getAttribute('colspan') * 1;\n\t\t\t\t\trowspan = cell.getAttribute('rowspan') * 1;\n\t\t\t\t\tcolspan = (!colspan || colspan===0 || colspan===1) ? 1 : colspan;\n\t\t\t\t\trowspan = (!rowspan || rowspan===0 || rowspan===1) ? 1 : rowspan;\n\t\n\t\t\t\t\t// There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t// accordingly\n\t\t\t\t\tshifted = shift( layout, i, column );\n\t\n\t\t\t\t\t// Cache calculation for unique columns\n\t\t\t\t\tunique = colspan === 1 ?\n\t\t\t\t\t\ttrue :\n\t\t\t\t\t\tfalse;\n\t\t\t\t\t\n\t\t\t\t\t// Perform header setup\n\t\t\t\t\tif ( write ) {\n\t\t\t\t\t\tif (unique) {\n\t\t\t\t\t\t\t// Allow column options to be set from HTML attributes\n\t\t\t\t\t\t\t_fnColumnOptions( settings, shifted, _fnEscapeObject(jqCell.data()) );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Get the width for the column. This can be defined from the\n\t\t\t\t\t\t\t// width attribute, style attribute or `columns.width` option\n\t\t\t\t\t\t\tvar columnDef = columns[shifted];\n\t\t\t\t\t\t\tvar width = cell.getAttribute('width') || null;\n\t\t\t\t\t\t\tvar t = cell.style.width.match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\t\t\t\t\tif ( t ) {\n\t\t\t\t\t\t\t\twidth = t[1];\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tcolumnDef.sWidthOrig = columnDef.sWidth || width;\n\t\n\t\t\t\t\t\t\tif (isHeader) {\n\t\t\t\t\t\t\t\t// Column title handling - can be user set, or read from the DOM\n\t\t\t\t\t\t\t\t// This happens before the render, so the original is still in place\n\t\t\t\t\t\t\t\tif ( columnDef.sTitle !== null && ! columnDef.autoTitle ) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t(titleRow === true && i === 0) || // top row\n\t\t\t\t\t\t\t\t\t\t(titleRow === false && i === rows.length -1) || // bottom row\n\t\t\t\t\t\t\t\t\t\t(titleRow === i) || // specific row\n\t\t\t\t\t\t\t\t\t\t(titleRow === null)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tcell.innerHTML = columnDef.sTitle;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t\tif (! columnDef.sTitle && unique) {\n\t\t\t\t\t\t\t\t\tcolumnDef.sTitle = _stripHtml(cell.innerHTML);\n\t\t\t\t\t\t\t\t\tcolumnDef.autoTitle = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Footer specific operations\n\t\t\t\t\t\t\t\tif (columnDef.footer) {\n\t\t\t\t\t\t\t\t\tcell.innerHTML = columnDef.footer;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t\t\t\t\t\t// provided.\n\t\t\t\t\t\t\tif (! columnDef.ariaTitle) {\n\t\t\t\t\t\t\t\tcolumnDef.ariaTitle = jqCell.attr(\"aria-label\") || columnDef.sTitle;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Column specific class names\n\t\t\t\t\t\t\tif ( columnDef.className ) {\n\t\t\t\t\t\t\t\tjqCell.addClass( columnDef.className );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Wrap the column title so we can write to it in future\n\t\t\t\t\t\tif ( $('.dt-column-title', cell).length === 0) {\n\t\t\t\t\t\t\t$(document.createElement(settings.columnTitleTag))\n\t\t\t\t\t\t\t\t.addClass('dt-column-title')\n\t\t\t\t\t\t\t\t.append(cell.childNodes)\n\t\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tsettings.orderIndicators &&\n\t\t\t\t\t\t\tisHeader &&\n\t\t\t\t\t\t\tjqCell.filter(':not([data-dt-order=disable])').length !== 0 &&\n\t\t\t\t\t\t\tjqCell.parent(':not([data-dt-order=disable])').length !== 0 &&\n\t\t\t\t\t\t\t$('.dt-column-order', cell).length === 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t$(document.createElement(settings.columnTitleTag))\n\t\t\t\t\t\t\t\t.addClass('dt-column-order')\n\t\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// We need to wrap the elements in the header in another element to use flexbox\n\t\t\t\t\t\t// layout for those elements\n\t\t\t\t\t\tvar headerFooter = isHeader ? 'header' : 'footer';\n\t\n\t\t\t\t\t\tif ( $('div.dt-column-' + headerFooter, cell).length === 0) {\n\t\t\t\t\t\t\t$('<div>')\n\t\t\t\t\t\t\t\t.addClass('dt-column-' + headerFooter)\n\t\t\t\t\t\t\t\t.append(cell.childNodes)\n\t\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If there is col / rowspan, copy the information into the layout grid\n\t\t\t\t\tfor ( l=0 ; l<colspan ; l++ ) {\n\t\t\t\t\t\tfor ( k=0 ; k<rowspan ; k++ ) {\n\t\t\t\t\t\t\tlayout[i+k][shifted+l] = {\n\t\t\t\t\t\t\t\tcell: cell,\n\t\t\t\t\t\t\t\tunique: unique\n\t\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\t\tlayout[i+k].row = row;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tcols.push( shifted+l );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Assign an attribute so spanning cells can still be identified\n\t\t\t\t\t// as belonging to a column\n\t\t\t\t\tcell.setAttribute('data-dt-column', _unique(cols).join(','));\n\t\t\t\t}\n\t\n\t\t\t\tcell = cell.nextSibling;\n\t\t\t}\n\t\t}\n\t\n\t\treturn layout;\n\t}\n\t\n\t/**\n\t * Set the start position for draw\n\t *  @param {object} oSettings dataTables settings object\n\t */\n\tfunction _fnStart( oSettings )\n\t{\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\n\t\t// Check and see if we have an initial draw position from state saving\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\t\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\t}\n\t\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax(oSettings, data, fn) {\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\t\tvar callback = function (json) {\n\t\t\tvar status = oSettings.jqXHR ? oSettings.jqXHR.status : null;\n\t\n\t\t\tif (json === null || (typeof status === 'number' && status == 204)) {\n\t\t\t\tjson = {};\n\t\t\t\t_fnAjaxDataSrc(oSettings, json, []);\n\t\t\t}\n\t\n\t\t\tvar error = json.error || json.sError;\n\t\t\tif (error) {\n\t\t\t\t_fnLog(oSettings, 0, error);\n\t\t\t}\n\t\n\t\t\t// Microsoft often wrap JSON as a string in another JSON object\n\t\t\t// Let's handle that automatically\n\t\t\tif (json.d && typeof json.d === 'string') {\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(json.d);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// noop\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\toSettings.json = json;\n\t\n\t\t\t_fnCallbackFire(oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR], true);\n\t\t\tfn(json);\n\t\t};\n\t\n\t\tif ($.isPlainObject(ajax) && ajax.data) {\n\t\t\tajaxData = ajax.data;\n\t\n\t\t\tvar newData =\n\t\t\t\ttypeof ajaxData === 'function'\n\t\t\t\t\t? ajaxData(data, oSettings) // fn can manipulate data or return\n\t\t\t\t\t: ajaxData; // an object or array to merge\n\t\n\t\t\t// If the function returned something, use that alone\n\t\t\tdata = typeof ajaxData === 'function' && newData ? newData : $.extend(true, data, newData);\n\t\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\t\n\t\tvar baseAjax = {\n\t\t\turl: typeof ajax === 'string' ? ajax : '',\n\t\t\tdata: data,\n\t\t\tsuccess: callback,\n\t\t\tdataType: 'json',\n\t\t\tcache: false,\n\t\t\ttype: oSettings.sServerMethod,\n\t\t\terror: function (xhr, error) {\n\t\t\t\tvar ret = _fnCallbackFire(\n\t\t\t\t\toSettings,\n\t\t\t\t\tnull,\n\t\t\t\t\t'xhr',\n\t\t\t\t\t[oSettings, null, oSettings.jqXHR],\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\n\t\t\t\tif (ret.indexOf(true) === -1) {\n\t\t\t\t\tif (error == 'parsererror') {\n\t\t\t\t\t\t_fnLog(oSettings, 0, 'Invalid JSON response', 1);\n\t\t\t\t\t}\n\t\t\t\t\telse if (xhr.readyState === 4) {\n\t\t\t\t\t\t_fnLog(oSettings, 0, 'Ajax error', 7);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t_fnProcessingDisplay(oSettings, false);\n\t\t\t}\n\t\t};\n\t\n\t\t// If `ajax` option is an object, extend and override our default base\n\t\tif ($.isPlainObject(ajax)) {\n\t\t\t$.extend(baseAjax, ajax);\n\t\t}\n\t\n\t\t// Store the data submitted for the API\n\t\toSettings.oAjaxData = data;\n\t\n\t\t// Allow plug-ins and external processes to modify the data\n\t\t_fnCallbackFire(oSettings, null, 'preXhr', [oSettings, data, baseAjax], true);\n\t\n\t\t// Custom Ajax option to submit the parameters as a JSON string\n\t\tif (baseAjax.submitAs === 'json' && typeof data === 'object') {\n\t\t\tbaseAjax.data = JSON.stringify(data);\n\t\n\t\t\tif (!baseAjax.contentType) {\n\t\t\t\tbaseAjax.contentType = 'application/json; charset=utf-8';\n\t\t\t}\n\t\t}\n\t\n\t\tif (typeof ajax === 'function') {\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call(instance, data, callback, oSettings);\n\t\t}\n\t\telse if (ajax.url === '') {\n\t\t\t// No url, so don't load any data. Just apply an empty data array\n\t\t\t// to the object for the callback.\n\t\t\tvar empty = {};\n\t\n\t\t\t_fnAjaxDataSrc(oSettings, empty, []);\n\t\t\tcallback(empty);\n\t\t}\n\t\telse {\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax(baseAjax);\n\t\t}\n\t\n\t\t// Restore for next time around\n\t\tif (ajaxData) {\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\t\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate(settings) {\n\t\tsettings.iDraw++;\n\t\t_fnProcessingDisplay(settings, true);\n\t\n\t\t_fnBuildAjax(settings, _fnAjaxParameters(settings), function (json) {\n\t\t\t_fnAjaxUpdateDraw(settings, json);\n\t\t});\n\t}\n\t\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters(settings) {\n\t\tvar columns = settings.aoColumns,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\tcolData = function (idx, prop) {\n\t\t\t\treturn typeof columns[idx][prop] === 'function' ? 'function' : columns[idx][prop];\n\t\t\t};\n\t\n\t\treturn {\n\t\t\tdraw: settings.iDraw,\n\t\t\tcolumns: columns.map(function (column, i) {\n\t\t\t\treturn {\n\t\t\t\t\tdata: colData(i, 'mData'),\n\t\t\t\t\tname: column.sName,\n\t\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\t\torderable: column.bSortable,\n\t\t\t\t\tsearch: {\n\t\t\t\t\t\tvalue: preColSearch[i].search,\n\t\t\t\t\t\tregex: preColSearch[i].regex,\n\t\t\t\t\t\tfixed: Object.keys(column.searchFixed)\n\t\t\t\t\t\t\t.map(function (name) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\t\t\tterm: typeof column.searchFixed[name] !== 'function'\n\t\t\t\t\t\t\t\t\t\t? column.searchFixed[name].toString()\n\t\t\t\t\t\t\t\t\t\t: 'function'\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}),\n\t\t\torder: _fnSortFlatten(settings).map(function (val) {\n\t\t\t\treturn {\n\t\t\t\t\tcolumn: val.col,\n\t\t\t\t\tdir: val.dir,\n\t\t\t\t\tname: colData(val.col, 'sName')\n\t\t\t\t};\n\t\t\t}),\n\t\t\tstart: settings._iDisplayStart,\n\t\t\tlength: features.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tsearch: {\n\t\t\t\tvalue: preSearch.search,\n\t\t\t\tregex: preSearch.regex,\n\t\t\t\tfixed: Object.keys(settings.searchFixed)\n\t\t\t\t\t.map(function (name) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\tterm: typeof settings.searchFixed[name] !== 'function'\n\t\t\t\t\t\t\t\t? settings.searchFixed[name].toString()\n\t\t\t\t\t\t\t\t: 'function'\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t}\n\t\t};\n\t}\n\t\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw(settings, json) {\n\t\tvar data = _fnAjaxDataSrc(settings, json);\n\t\tvar draw = _fnAjaxDataSrcParam(settings, 'draw', json);\n\t\tvar recordsTotal = _fnAjaxDataSrcParam(settings, 'recordsTotal', json);\n\t\tvar recordsFiltered = _fnAjaxDataSrcParam(settings, 'recordsFiltered', json);\n\t\n\t\tif (draw !== undefined) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif (draw * 1 < settings.iDraw) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\t\n\t\t// No data in returned object, so rather than an array, we show an empty table\n\t\tif (!data) {\n\t\t\tdata = [];\n\t\t}\n\t\n\t\t_fnClearTable(settings);\n\t\tsettings._iRecordsTotal = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\t\n\t\tfor (var i = 0, iLen = data.length; i < iLen; i++) {\n\t\t\t_fnAddData(settings, data[i]);\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t_fnColumnTypes(settings);\n\t\t_fnDraw(settings, true);\n\t\t_fnInitComplete(settings);\n\t\t_fnProcessingDisplay(settings, false);\n\t}\n\t\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} settings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\tfunction _fnAjaxDataSrc(settings, json, write) {\n\t\tvar dataProp = 'data';\n\t\n\t\tif ($.isPlainObject(settings.ajax) && settings.ajax.dataSrc !== undefined) {\n\t\t\t// Could in inside a `dataSrc` object, or not!\n\t\t\tvar dataSrc = settings.ajax.dataSrc;\n\t\n\t\t\t// string, function and object are valid types\n\t\t\tif (typeof dataSrc === 'string' || typeof dataSrc === 'function') {\n\t\t\t\tdataProp = dataSrc;\n\t\t\t}\n\t\t\telse if (dataSrc.data !== undefined) {\n\t\t\t\tdataProp = dataSrc.data;\n\t\t\t}\n\t\t}\n\t\n\t\tif (!write) {\n\t\t\tif (dataProp === 'data') {\n\t\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t\t// it if possible\n\t\t\t\treturn json.aaData || json[dataProp];\n\t\t\t}\n\t\n\t\t\treturn dataProp !== '' ? _fnGetObjectDataFn(dataProp)(json) : json;\n\t\t}\n\t\n\t\t// set\n\t\t_fnSetObjectDataFn(dataProp)(json, write);\n\t}\n\t\n\t/**\n\t * Very similar to _fnAjaxDataSrc, but for the other SSP properties\n\t * @param {*} settings DataTables settings object\n\t * @param {*} param Target parameter\n\t * @param {*} json JSON data\n\t * @returns Resolved value\n\t */\n\tfunction _fnAjaxDataSrcParam(settings, param, json) {\n\t\tvar dataSrc = $.isPlainObject(settings.ajax) ? settings.ajax.dataSrc : null;\n\t\n\t\tif (dataSrc && dataSrc[param]) {\n\t\t\t// Get from custom location\n\t\t\treturn _fnGetObjectDataFn(dataSrc[param])(json);\n\t\t}\n\t\n\t\t// else - Default behaviour\n\t\tvar old = '';\n\t\n\t\t// Legacy support\n\t\tif (param === 'draw') {\n\t\t\told = 'sEcho';\n\t\t}\n\t\telse if (param === 'recordsTotal') {\n\t\t\told = 'iTotalRecords';\n\t\t}\n\t\telse if (param === 'recordsFiltered') {\n\t\t\told = 'iTotalDisplayRecords';\n\t\t}\n\t\n\t\treturn json[old] !== undefined ? json[old] : json[param];\n\t}\n\t\n\t\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} settings dataTables settings object\n\t *  @param {object} input search information\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( settings, input )\n\t{\n\t\tvar columnsSearch = settings.aoPreSearchCols;\n\t\n\t\t// In server-side processing all filtering is done by the server, so no point hanging around here\n\t\tif ( _fnDataSource( settings ) != 'ssp' )\n\t\t{\n\t\t\t// Check if any of the rows were invalidated\n\t\t\t_fnFilterData( settings );\n\t\n\t\t\t// Start from the full data set\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t\t// Global filter first\n\t\t\t_fnFilter( settings.aiDisplay, settings, input.search, input );\n\t\n\t\t\t$.each(settings.searchFixed, function (name, term) {\n\t\t\t\t_fnFilter(settings.aiDisplay, settings, term, {});\n\t\t\t});\n\t\n\t\t\t// Then individual column filters\n\t\t\tfor ( var i=0 ; i<columnsSearch.length ; i++ )\n\t\t\t{\n\t\t\t\tvar col = columnsSearch[i];\n\t\n\t\t\t\t_fnFilter(\n\t\t\t\t\tsettings.aiDisplay,\n\t\t\t\t\tsettings,\n\t\t\t\t\tcol.search,\n\t\t\t\t\tcol,\n\t\t\t\t\ti\n\t\t\t\t);\n\t\n\t\t\t\t$.each(settings.aoColumns[i].searchFixed, function (name, term) {\n\t\t\t\t\t_fnFilter(settings.aiDisplay, settings, term, {}, i);\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\t// And finally global filtering\n\t\t\t_fnFilterCustom( settings );\n\t\t}\n\t\n\t\t// Tell the draw function we have been filtering\n\t\tsettings.bFiltered = true;\n\t\n\t\t_fnCallbackFire( settings, null, 'search', [settings] );\n\t}\n\t\n\t\n\t/**\n\t * Apply custom filtering functions\n\t * \n\t * This is legacy now that we have named functions, but it is widely used\n\t * from 1.x, so it is not yet deprecated.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( settings )\n\t{\n\t\tvar filters = DataTable.ext.search;\n\t\tvar displayRows = settings.aiDisplay;\n\t\tvar row, rowIdx;\n\t\n\t\tfor ( var i=0, iLen=filters.length ; i<iLen ; i++ ) {\n\t\t\tvar rows = [];\n\t\n\t\t\t// Loop over each row and see if it should be included\n\t\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\t\trowIdx = displayRows[ j ];\n\t\t\t\trow = settings.aoData[ rowIdx ];\n\t\n\t\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\t\trows.push( rowIdx );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// So the array reference doesn't break set the results into the\n\t\t\t// existing array\n\t\t\tdisplayRows.length = 0;\n\t\t\t_fnArrayApply(displayRows, rows);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t */\n\tfunction _fnFilter( searchRows, settings, input, options, column )\n\t{\n\t\tif ( input === '' ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar i = 0;\n\t\tvar matched = [];\n\t\n\t\t// Search term can be a function, regex or string - if a string we apply our\n\t\t// smart filtering regex (assuming the options require that)\n\t\tvar searchFunc = typeof input === 'function' ? input : null;\n\t\tvar rpSearch = input instanceof RegExp\n\t\t\t? input\n\t\t\t: searchFunc\n\t\t\t\t? null\n\t\t\t\t: _fnFilterCreateSearch( input, options );\n\t\n\t\t// Then for each row, does the test pass. If not, lop the row from the array\n\t\tfor (i=0 ; i<searchRows.length ; i++) {\n\t\t\tvar row = settings.aoData[ searchRows[i] ];\n\t\t\tvar data = column === undefined\n\t\t\t\t? row._sFilterRow\n\t\t\t\t: row._aFilterData[ column ];\n\t\n\t\t\tif ( (searchFunc && searchFunc(data, row._aData, searchRows[i], column)) || (rpSearch && rpSearch.test(data)) ) {\n\t\t\t\tmatched.push(searchRows[i]);\n\t\t\t}\n\t\t}\n\t\n\t\t// Mutate the searchRows array\n\t\tsearchRows.length = matched.length;\n\t\n\t\tfor (i=0 ; i<matched.length ; i++) {\n\t\t\tsearchRows[i] = matched[i];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case-insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( search, inOpts )\n\t{\n\t\tvar not = [];\n\t\tvar options = $.extend({}, {\n\t\t\tboundary: false,\n\t\t\tcaseInsensitive: true,\n\t\t\texact: false,\n\t\t\tregex: false,\n\t\t\tsmart: true\n\t\t}, inOpts);\n\t\n\t\tif (typeof search !== 'string') {\n\t\t\tsearch = search.toString();\n\t\t}\n\t\n\t\t// Remove diacritics if normalize is set up to do so\n\t\tsearch = _normalize(search);\n\t\n\t\tif (options.exact) {\n\t\t\treturn new RegExp(\n\t\t\t\t'^'+_fnEscapeRegex(search)+'$',\n\t\t\t\toptions.caseInsensitive ? 'i' : ''\n\t\t\t);\n\t\t}\n\t\n\t\tsearch = options.regex ?\n\t\t\tsearch :\n\t\t\t_fnEscapeRegex( search );\n\t\t\n\t\tif ( options.smart ) {\n\t\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t\t * order is important - a la google. And a negative look around for\n\t\t\t * finding rows which don't contain a given string.\n\t\t\t * \n\t\t\t * So this is the sort of thing we want to generate:\n\t\t\t * \n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t\t */\n\t\t\tvar parts = search.match( /!?[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''];\n\t\t\tvar a = parts.map( function ( word ) {\n\t\t\t\tvar negative = false;\n\t\t\t\tvar m;\n\t\n\t\t\t\t// Determine if it is a \"does not include\"\n\t\t\t\tif ( word.charAt(0) === '!' ) {\n\t\t\t\t\tnegative = true;\n\t\t\t\t\tword = word.substring(1);\n\t\t\t\t}\n\t\n\t\t\t\t// Strip the quotes from around matched phrases\n\t\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\t\tm = word.match( /^\"(.*)\"$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\t\t// Smart quote match (iPhone users)\n\t\t\t\t\tm = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\t\tword = m ? m[1] : word;\n\t\t\t\t}\n\t\n\t\t\t\t// For our \"not\" case, we need to modify the string that is\n\t\t\t\t// allowed to match at the end of the expression.\n\t\t\t\tif (negative) {\n\t\t\t\t\tif (word.length > 1) {\n\t\t\t\t\t\tnot.push('(?!'+word+')');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tword = '';\n\t\t\t\t}\n\t\n\t\t\t\treturn word.replace(/\"/g, '');\n\t\t\t} );\n\t\n\t\t\tvar match = not.length\n\t\t\t\t? not.join('')\n\t\t\t\t: '';\n\t\n\t\t\tvar boundary = options.boundary\n\t\t\t\t? '\\\\b'\n\t\t\t\t: '';\n\t\n\t\t\tsearch = '^(?=.*?'+boundary+a.join( ')(?=.*?'+boundary )+')('+match+'.)*$';\n\t\t}\n\t\n\t\treturn new RegExp( search, options.caseInsensitive ? 'i' : '' );\n\t}\n\t\n\t\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\t\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\t\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar column;\n\t\tvar j, jen, filterData, cellData, row;\n\t\tvar wasInvalidated = false;\n\t\n\t\tfor ( var rowIdx=0 ; rowIdx<data.length ; rowIdx++ ) {\n\t\t\tif (! data[rowIdx]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\trow = data[rowIdx];\n\t\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\t\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\t\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, rowIdx, j, 'filter' );\n\t\n\t\t\t\t\t\t// Search in DataTables is string based\n\t\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\t\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\t\n\t\treturn wasInvalidated;\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i;\n\t\tvar init = settings.oInit;\n\t\tvar deferLoading = settings.deferLoading;\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\n\t\t// Ensure that the table data is fully initialised\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Build the header / footer for the table\n\t\t_fnBuildHead( settings, 'header' );\n\t\t_fnBuildHead( settings, 'footer' );\n\t\n\t\t// Load the table's state (if needed) and then render around it and draw\n\t\t_fnLoadState( settings, init, function () {\n\t\t\t// Then draw the header / footer\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t\t// Cache the paging start point, as the first redraw will reset it\n\t\t\tvar iAjaxStart = settings.iInitDisplayStart\n\t\n\t\t\t// Local data load\n\t\t\t// Check if there is data passing into the constructor\n\t\t\tif ( init.aaData ) {\n\t\t\t\tfor ( i=0 ; i<init.aaData.length ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, init.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( deferLoading || dataSrc == 'dom' ) {\n\t\t\t\t// Grab the data from the page\n\t\t\t\t_fnAddTr( settings, $(settings.nTBody).children('tr') );\n\t\t\t}\n\t\n\t\t\t// Filter not yet applied - copy the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\n\t\t\t// Enable features\n\t\t\t_fnAddOptionsHtml( settings );\n\t\t\t_fnSortInit( settings );\n\t\n\t\t\t_colGroup( settings );\n\t\n\t\t\t/* Okay to show that something is going on now */\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t_fnCallbackFire( settings, null, 'preInit', [settings], true );\n\t\n\t\t\t// If there is default sorting required - let's do it. The sort function\n\t\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t\t// data (show 'loading' message possibly)\n\t\t\t_fnReDraw( settings );\n\t\n\t\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t\t// if there is an ajax source load the data\n\t\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t\t_fnBuildAjax( settings, {}, function(json) {\n\t\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\t\n\t\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\t\n\t\t\t\t\t\t_fnReDraw( settings );\n\t\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t\t_fnInitComplete( settings );\n\t\t\t\t\t}, settings );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnInitComplete( settings );\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings )\n\t{\n\t\tif (settings._bInitComplete) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar args = [settings, settings.json];\n\t\n\t\t// If the footer element is empty after initialisation, then remove it\n\t\tlet tfoot = $(settings.tfoot);\n\t\tif (tfoot.children().length === 0) {\n\t\t\ttfoot.remove();\n\t\t}\n\t\n\t\tsettings._bInitComplete = true;\n\t\n\t\t// Table is fully set up and we have data, so calculate the\n\t\t// column widths\n\t\t_fnAdjustColumnSizing( settings );\n\t\n\t\t_fnCallbackFire( settings, null, 'plugin-init', args, true );\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', args, true );\n\t}\n\t\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\t\n\t\t_fnLengthOverflow( settings );\n\t\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\t\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\t\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\t\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\t\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse if ( action === 'ellipsis' )\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\t\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\t\n\t\t_fnCallbackFire( settings, null, changed ? 'page' : 'page-nc', [settings] );\n\t\n\t\tif ( changed && redraw ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t\n\t\treturn changed;\n\t}\n\t\n\t\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings DataTables settings object\n\t */\n\tfunction _processingHtml ( settings )\n\t{\n\t\tvar table = settings.nTable;\n\t\tvar scrolling = settings.oScroll.sX !== '' || settings.oScroll.sY !== '';\n\t\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\tvar n = $('<div/>', {\n\t\t\t\t\t'id': settings.sTableId + '_processing',\n\t\t\t\t\t'class': settings.oClasses.processing.container,\n\t\t\t\t\t'role': 'status'\n\t\t\t\t} )\n\t\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>');\n\t\n\t\t\t// Different positioning depending on if scrolling is enabled or not\n\t\t\tif (scrolling) {\n\t\t\t\tn.prependTo( $('div.dt-scroll', settings.nTableWrapper) );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tn.insertBefore( table );\n\t\t\t}\n\t\n\t\t\t$(table).on( 'processing.dt.DT', function (e, s, show) {\n\t\t\t\tn.css( 'display', show ? 'block' : 'none' );\n\t\t\t} );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings DataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\t// Ignore cases when we are still redrawing\n\t\tif (settings.bDrawing && show === false) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\t\n\t/**\n\t * Show the processing element if an action takes longer than a given time\n\t *\n\t * @param {*} settings DataTables settings object\n\t * @param {*} enable Do (true) or not (false) async processing (local feature enablement)\n\t * @param {*} run Function to run\n\t */\n\tfunction _fnProcessingRun( settings, enable, run ) {\n\t\tif (! enable) {\n\t\t\t// Immediate execution, synchronous\n\t\t\trun();\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay(settings, true);\n\t\t\t\n\t\t\t// Allow the processing display to show if needed\n\t\t\tsetTimeout(function () {\n\t\t\t\trun();\n\t\n\t\t\t\t_fnProcessingDisplay(settings, false);\n\t\t\t}, 0);\n\t\t}\n\t}\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\t\n\t\t// Scrolling from here on in\n\t\tvar scroll = settings.oScroll;\n\t\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\t\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses.scrolling;\n\t\tvar caption = settings.captionNode;\n\t\tvar captionSide = caption ? caption._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\t\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\t\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.container } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.header.self } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.header.inner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.body } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\t\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.footer.self } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.footer.inner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\t\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\t$(scrollBody).on( 'scroll.DT', function () {\n\t\t\tvar scrollLeft = this.scrollLeft;\n\t\n\t\t\tscrollHead.scrollLeft = scrollLeft;\n\t\n\t\t\tif ( footer ) {\n\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t}\n\t\t} );\n\t\n\t\t// When focus is put on the header cells, we might need to scroll the body\n\t\t$('th, td', scrollHead).on('focus', function () {\n\t\t\tvar scrollLeft = scrollHead.scrollLeft;\n\t\n\t\t\tscrollBody.scrollLeft = scrollLeft;\n\t\n\t\t\tif ( footer ) {\n\t\t\t\tscrollBody.scrollLeft = scrollLeft;\n\t\t\t}\n\t\t});\n\t\n\t\t$(scrollBody).css('max-height', scrollY);\n\t\tif (! scroll.bCollapse) {\n\t\t\t$(scrollBody).css('height', scrollY);\n\t\t}\n\t\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\t\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push(_fnScrollDraw);\n\t\n\t\treturn scroller[0];\n\t}\n\t\n\t\n\t\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Correct colgroup > col values if needed\n\t *   3. Copy colgroup > col over to header and footer\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\tfooter         = settings.nTFoot && $('th, td', settings.nTFoot).length ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\theaderCopy, footerCopy;\n\t\n\t\t// If the scrollbar visibility has changed from the last draw, we need to\n\t\t// adjust the column sizes as the table width will have changed to account\n\t\t// for the scrollbar\n\t\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\t\n\t\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\treturn; // adjust column sizing will call this function again\n\t\t}\n\t\telse {\n\t\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t}\n\t\n\t\t// 1. Re-create the table inside the scrolling div\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\t\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\t\theaderCopy.find('[id]').removeAttr('id');\n\t\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterCopy.find('[id]').removeAttr('id');\n\t\t}\n\t\n\t\t// 2. Correct colgroup > col values if needed\n\t\t// It is possible that the cell sizes are smaller than the content, so we need to\n\t\t// correct colgroup>col for such cases. This can happen if the auto width detection\n\t\t// uses a cell which has a longer string, but isn't the widest! For example \n\t\t// \"Chief Executive Officer (CEO)\" is the longest string in the demo, but\n\t\t// \"Systems Administrator\" is actually the widest string since it doesn't collapse.\n\t\t// Note the use of translating into a column index to get the `col` element. This\n\t\t// is because of Responsive which might remove `col` elements, knocking the alignment\n\t\t// of the indexes out.\n\t\tif (settings.aiDisplay.length) {\n\t\t\t// Get the column sizes from the first row in the table. This should really be a\n\t\t\t// [].find, but it wasn't supported in Chrome until Sept 2015, and DT has 10 year\n\t\t\t// browser support\n\t\t\tvar firstTr = null;\n\t\t\tvar start = _fnDataSource( settings ) !== 'ssp'\n\t\t\t\t? settings._iDisplayStart\n\t\t\t\t: 0;\n\t\n\t\t\tfor (i=start ; i<start + settings.aiDisplay.length ; i++) {\n\t\t\t\tvar idx = settings.aiDisplay[i];\n\t\t\t\tvar tr = settings.aoData[idx].nTr;\n\t\n\t\t\t\tif (tr) {\n\t\t\t\t\tfirstTr = tr;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (firstTr) {\n\t\t\t\tvar colSizes = $(firstTr).children('th, td').map(function (vis) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tidx: _fnVisibleToColumnIndex(settings, vis),\n\t\t\t\t\t\twidth: $(this).outerWidth()\n\t\t\t\t\t};\n\t\t\t\t});\n\t\n\t\t\t\t// Check against what the colgroup > col is set to and correct if needed\n\t\t\t\tfor (var i=0 ; i<colSizes.length ; i++) {\n\t\t\t\t\tvar colEl = settings.aoColumns[ colSizes[i].idx ].colEl[0];\n\t\t\t\t\tvar colWidth = colEl.style.width.replace('px', '');\n\t\n\t\t\t\t\tif (colWidth !== colSizes[i].width) {\n\t\t\t\t\t\tcolEl.style.width = colSizes[i].width + 'px';\n\t\n\t\t\t\t\t\tif (scroll.sX) {\n\t\t\t\t\t\t\tcolEl.style.minWidth = colSizes[i].width + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// 3. Copy the colgroup over to the header and footer\n\t\tdivHeaderTable\n\t\t\t.find('colgroup')\n\t\t\t.remove();\n\t\n\t\tdivHeaderTable.append(settings.colgroup.clone());\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable\n\t\t\t\t.find('colgroup')\n\t\t\t\t.remove();\n\t\n\t\t\tdivFooterTable.append(settings.colgroup.clone());\n\t\t}\n\t\n\t\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t\t// the content of the cell so that the width applied to the header and body\n\t\t// both match, but we want to hide it completely.\n\t\t$('th, td', headerCopy).each(function () {\n\t\t\t$(this.childNodes).wrapAll('<div class=\"dt-scroll-sizing\" />');\n\t\t});\n\t\n\t\tif ( footer ) {\n\t\t\t$('th, td', footerCopy).each(function () {\n\t\t\t\t$(this.childNodes).wrapAll('<div class=\"dt-scroll-sizing\" />');\n\t\t\t});\n\t\t}\n\t\n\t\t// 4. Clean up\n\t\t// Figure out if there are scrollbar present - if so then we need the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar isScrolling = Math.floor(table.height()) > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar paddingSide = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\n\t\t// Set the width's of the header and footer tables\n\t\tvar outerWidth = table.outerWidth();\n\t\n\t\tdivHeaderTable.css('width', _fnStringToCss( outerWidth ));\n\t\tdivHeaderInner\n\t\t\t.css('width', _fnStringToCss( outerWidth ))\n\t\t\t.css(paddingSide, isScrolling ? barWidth+\"px\" : \"0px\");\n\t\n\t\tif ( footer ) {\n\t\t\tdivFooterTable.css('width', _fnStringToCss( outerWidth ));\n\t\t\tdivFooterInner\n\t\t\t\t.css('width', _fnStringToCss( outerWidth ))\n\t\t\t\t.css(paddingSide, isScrolling ? barWidth+\"px\" : \"0px\");\n\t\t}\n\t\n\t\t// Correct DOM ordering for colgroup - comes before the thead\n\t\ttable.children('colgroup').prependTo(table);\n\t\n\t\t// Remove tabindex from the hidden row elements\n\t\ttable.find('thead, tfoot').find('[tabindex]').removeAttr('tabindex');\n\t\ttable.find('thead, tfoot').find('role').removeAttr('role');\n\t\n\t\t// Adjust the position of the header in case we loose the y-scrollbar\n\t\tdivBody.trigger('scroll');\n\t\n\t\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t\t// only if we aren't holding the position\n\t\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\t\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( settings )\n\t{\n\t\t// Not interested in doing column width calculation if auto-width is disabled\n\t\tif (! settings.oFeatures.bAutoWidth) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ttable = settings.nTable,\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tscroll = settings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tvisibleColumns = _fnGetColumns( settings, 'bVisible' ),\n\t\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\t\ttableContainer = table.parentNode,\n\t\t\ti, j, column, columnIdx;\n\t\t\t\n\t\tvar styleWidth = table.style.width;\n\t\tvar containerWidth = _fnWrapperWidth(settings);\n\t\n\t\t// Don't re-run for the same width as the last time\n\t\tif (containerWidth === settings.containerWidth) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tsettings.containerWidth = containerWidth;\n\t\n\t\t// If there is no width applied as a CSS style or as an attribute, we assume that\n\t\t// the width is intended to be 100%, which is usually is in CSS, but it is very\n\t\t// difficult to correctly parse the rules to get the final result.\n\t\tif ( ! styleWidth && ! tableWidthAttr) {\n\t\t\ttable.style.width = '100%';\n\t\t\tstyleWidth = '100%';\n\t\t}\n\t\n\t\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\t\ttableWidthAttr = styleWidth;\n\t\t}\n\t\n\t\t// Let plug-ins know that we are doing a recalc, in case they have changed any of the\n\t\t// visible columns their own way (e.g. Responsive uses display:none).\n\t\t_fnCallbackFire(\n\t\t\tsettings,\n\t\t\tnull,\n\t\t\t'column-calc',\n\t\t\t{visible: visibleColumns},\n\t\t\tfalse\n\t\t);\n\t\n\t\t// Construct a worst case table with the widest, assign any user defined\n\t\t// widths, then insert it into  the DOM and allow the browser to do all\n\t\t// the hard work of calculating table widths\n\t\tvar tmpTable = $(table.cloneNode())\n\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t.css( 'margin', 0 )\n\t\t\t.removeAttr( 'id' );\n\t\n\t\t// Clean up the table body\n\t\ttmpTable.append('<tbody/>')\n\t\n\t\t// Clone the table header and footer - we can't use the header / footer\n\t\t// from the cloned table, since if scrolling is active, the table's\n\t\t// real header and footer are contained in different table tags\n\t\ttmpTable\n\t\t\t.append( $(settings.nTHead).clone() )\n\t\t\t.append( $(settings.nTFoot).clone() );\n\t\n\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\t\n\t\t// Apply custom sizing to the cloned header\n\t\ttmpTable.find('thead th, thead td').each( function () {\n\t\t\t// Get the `width` from the header layout\n\t\t\tvar width = _fnColumnsSumWidth( settings, this, true, false );\n\t\n\t\t\tif ( width ) {\n\t\t\t\tthis.style.width = width;\n\t\n\t\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t\t// width the column requires, then it will have no effect\n\t\t\t\tif ( scrollX ) {\n\t\t\t\t\tthis.style.minWidth = width;\n\t\n\t\t\t\t\t$( this ).append( $('<div/>').css( {\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\theight: 1\n\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.style.width = '';\n\t\t\t}\n\t\t} );\n\t\n\t\t// Get the widest strings for each of the visible columns and add them to\n\t\t// our table to create a \"worst case\"\n\t\tvar longestData = [];\n\t\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tlongestData.push(_fnGetWideStrings(settings, visibleColumns[i]));\n\t\t}\n\t\n\t\tif (longestData.length) {\n\t\t\tfor ( i=0 ; i<longestData[0].length ; i++ ) {\n\t\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\t\n\t\t\t\tfor ( j=0 ; j<visibleColumns.length ; j++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[j];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\t\n\t\t\t\t\tvar longest = longestData[j][i] || '';\n\t\t\t\t\tvar autoClass = _ext.type.className[column.sType];\n\t\t\t\t\tvar padding = column.sContentPadding || (scrollX ? '-' : '');\n\t\t\t\t\tvar text = longest + padding;\n\t\t\t\t\tvar insert = longest.indexOf('<') === -1 && longest.indexOf('&') === -1\n\t\t\t\t\t\t? document.createTextNode(text)\n\t\t\t\t\t\t: text\n\t\n\t\t\t\t\t$('<td/>')\n\t\t\t\t\t\t.addClass(autoClass)\n\t\t\t\t\t\t.addClass(column.sClass)\n\t\t\t\t\t\t.append(insert)\n\t\t\t\t\t\t.appendTo(tr);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// Tidy the temporary table - remove name attributes so there aren't\n\t\t// duplicated in the dom (radio elements for example)\n\t\t$('[name]', tmpTable).removeAttr('name');\n\t\n\t\t// Table has been built, attach to the document so we can work with it.\n\t\t// A holding element is used, positioned at the top of the container\n\t\t// with minimal height, so it has no effect on if the container scrolls\n\t\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t\t// needed\n\t\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t\t{\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\theight: 1,\n\t\t\t\t\tright: 0,\n\t\t\t\t\toverflow: 'hidden'\n\t\t\t\t} :\n\t\t\t\t{}\n\t\t\t)\n\t\t\t.append( tmpTable )\n\t\t\t.appendTo( tableContainer );\n\t\n\t\t// When scrolling (X or Y) we want to set the width of the table as \n\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t// is. This results in slightly different, but I think correct behaviour\n\t\tif ( scrollX && scrollXInner ) {\n\t\t\ttmpTable.width( scrollXInner );\n\t\t}\n\t\telse if ( scrollX ) {\n\t\t\ttmpTable.css( 'width', 'auto' );\n\t\t\ttmpTable.removeAttr('width');\n\t\n\t\t\t// If there is no width attribute or style, then allow the table to\n\t\t\t// collapse\n\t\t\tif ( tmpTable.outerWidth() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\t\ttmpTable.outerWidth( tableContainer.clientWidth );\n\t\t\t}\n\t\t}\n\t\telse if ( scrollY ) {\n\t\t\ttmpTable.outerWidth( tableContainer.clientWidth );\n\t\t}\n\t\telse if ( tableWidthAttr ) {\n\t\t\ttmpTable.outerWidth( tableWidthAttr );\n\t\t}\n\t\n\t\t// Get the width of each column in the constructed table\n\t\tvar total = 0;\n\t\tvar bodyCells = tmpTable.find('tbody tr').eq(0).children();\n\t\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t// Use getBounding for sub-pixel accuracy, which we then want to round up!\n\t\t\tvar bounding = bodyCells[i].getBoundingClientRect().width;\n\t\n\t\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t\t// of the table might not equal the total given here\n\t\t\ttotal += bounding;\n\t\n\t\t\t// Width for each column to use\n\t\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding );\n\t\t}\n\t\n\t\ttable.style.width = _fnStringToCss( total );\n\t\n\t\t// Finished with the table - ditch it\n\t\tholder.remove();\n\t\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t\t}\n\t\n\t\tif ( (tableWidthAttr || scrollX) && ! settings._reszEvt ) {\n\t\t\tvar resize = DataTable.util.throttle( function () {\n\t\t\t\tvar newWidth = _fnWrapperWidth(settings);\n\t\n\t\t\t\t// Don't do it if destroying or the container width is 0\n\t\t\t\tif (! settings.bDestroying && newWidth !== 0) {\n\t\t\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// For browsers that support it (~2020 onwards for wide support) we can watch for the\n\t\t\t// container changing width.\n\t\t\tif (window.ResizeObserver) {\n\t\t\t\t// This is a tricky beast - if the element is visible when `.observe()` is called,\n\t\t\t\t// then the callback is immediately run. Which we don't want. If the element isn't\n\t\t\t\t// visible, then it isn't run, but we want it to run when it is then made visible.\n\t\t\t\t// This flag allows the above to be satisfied.\n\t\t\t\tvar first = $(settings.nTableWrapper).is(':visible');\n\t\n\t\t\t\t// Use an empty div to attach the observer so it isn't impacted by height changes\n\t\t\t\tvar resizer = $('<div>')\n\t\t\t\t\t.css({\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: 0\n\t\t\t\t\t})\n\t\t\t\t\t.addClass('dt-autosize')\n\t\t\t\t\t.appendTo(settings.nTableWrapper);\n\t\n\t\t\t\tsettings.resizeObserver = new ResizeObserver(function (e) {\n\t\t\t\t\tif (first) {\n\t\t\t\t\t\tfirst = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresize();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\n\t\t\t\tsettings.resizeObserver.observe(resizer[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For old browsers, the best we can do is listen for a window resize\n\t\t\t\t$(window).on('resize.DT-'+settings.sInstance, resize);\n\t\t\t}\n\t\n\t\t\tsettings._reszEvt = true;\n\t\t}\n\t}\n\t\n\t/**\n\t * Get the width of the DataTables wrapper element\n\t *\n\t * @param {*} settings DataTables settings object\n\t * @returns Width\n\t */\n\tfunction _fnWrapperWidth(settings) {\n\t\treturn $(settings.nTableWrapper).is(':visible')\n\t\t\t? $(settings.nTableWrapper).width()\n\t\t\t: 0;\n\t}\n\t\n\t/**\n\t * Get the widest strings for each column.\n\t *\n\t * It is very difficult to determine what the widest string actually is due to variable character\n\t * width and kerning. Doing an exact calculation with the DOM or even Canvas would kill performance\n\t * and this is a critical point, so we use two techniques to determine a collection of the longest\n\t * strings from the column, which will likely contain the widest strings:\n\t *\n\t * 1) Get the top three longest strings from the column\n\t * 2) Get the top three widest words (i.e. an unbreakable phrase)\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string[]} Array of the longest strings\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWideStrings( settings, colIdx )\n\t{\n\t\tvar column = settings.aoColumns[colIdx];\n\t\n\t\t// Do we need to recalculate (i.e. was invalidated), or just use the cached data?\n\t\tif (! column.wideStrings) {\n\t\t\tvar allStrings = [];\n\t\t\tvar collection = [];\n\t\n\t\t\t// Create an array with the string information for the column\n\t\t\tfor ( var i=0, iLen=settings.aiDisplayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\tvar rowIdx = settings.aiDisplayMaster[i];\n\t\t\t\tvar data = _fnGetRowDisplay(settings, rowIdx)[colIdx];\n\t\n\t\t\t\tvar cellString = data && typeof data === 'object' && data.nodeType\n\t\t\t\t\t? data.innerHTML\n\t\t\t\t\t: data+'';\n\t\n\t\t\t\t// Remove id / name attributes from elements so they\n\t\t\t\t// don't interfere with existing elements\n\t\t\t\tcellString = cellString\n\t\t\t\t\t.replace(/id=\".*?\"/g, '')\n\t\t\t\t\t.replace(/name=\".*?\"/g, '');\n\t\n\t\t\t\t// Don't want script, dialog or template tags in the width\n\t\t\t\t// calculations as they are hidden content\n\t\t\t\tcellString = cellString\n\t\t\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n\t\t\t\t\t.replace(/<dialog[\\s\\S]*?<\\/dialog>/gi, ' ')\n\t\t\t\t\t.replace(/<template[\\s\\S]*?<\\/template>/gi, ' ');\n\t\n\t\t\t\tvar noHtml = _stripHtml(cellString, ' ')\n\t\t\t\t\t.replace( /&nbsp;/g, ' ' );\n\t\t\n\t\t\t\t// The length is calculated on the text only, but we keep the HTML\n\t\t\t\t// in the string so it can be used in the calculation table\n\t\t\t\tcollection.push({\n\t\t\t\t\tstr: cellString,\n\t\t\t\t\tlen: noHtml.length\n\t\t\t\t});\n\t\n\t\t\t\tallStrings.push(noHtml);\n\t\t\t}\n\t\n\t\t\t// Order and then cut down to the size we need\n\t\t\tcollection\n\t\t\t\t.sort(function (a, b) {\n\t\t\t\t\treturn b.len - a.len;\n\t\t\t\t})\n\t\t\t\t.splice(3);\n\t\n\t\t\tcolumn.wideStrings = collection.map(function (item) {\n\t\t\t\treturn item.str;\n\t\t\t});\n\t\n\t\t\t// Longest unbroken string\n\t\t\tlet parts = allStrings.join(' ').split(' ');\n\t\n\t\t\tparts.sort(function (a, b) {\n\t\t\t\treturn b.length - a.length;\n\t\t\t});\n\t\n\t\t\tif (parts.length) {\n\t\t\t\tcolumn.wideStrings.push(parts[0]);\n\t\t\t}\n\t\n\t\t\tif (parts.length > 1) {\n\t\t\t\tcolumn.wideStrings.push(parts[1]);\n\t\t\t}\n\t\n\t\t\tif (parts.length > 2) {\n\t\t\t\tcolumn.wideStrings.push(parts[3]);\n\t\t\t}\n\t\t}\n\t\n\t\treturn column.wideStrings;\n\t}\n\t\n\t\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\t\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\t\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\t\n\t/**\n\t * Re-insert the `col` elements for current visibility\n\t *\n\t * @param {*} settings DT settings\n\t */\n\tfunction _colGroup( settings ) {\n\t\tvar cols = settings.aoColumns;\n\t\n\t\tsettings.colgroup.empty();\n\t\n\t\tfor (i=0 ; i<cols.length ; i++) {\n\t\t\tif (cols[i].bVisible) {\n\t\t\t\tsettings.colgroup.append(cols[i].colEl);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tfunction _fnSortInit( settings ) {\n\t\tvar target = settings.nTHead;\n\t\tvar headerRows = target.querySelectorAll('tr');\n\t\tvar titleRow = settings.titleRow;\n\t\tvar notSelector = ':not([data-dt-order=\"disable\"]):not([data-dt-order=\"icon-only\"])';\n\t\t\n\t\t// Legacy support for `orderCellsTop`\n\t\tif (titleRow === true) {\n\t\t\ttarget = headerRows[0];\n\t\t}\n\t\telse if (titleRow === false) {\n\t\t\ttarget = headerRows[ headerRows.length - 1 ];\n\t\t}\n\t\telse if (titleRow !== null) {\n\t\t\ttarget = headerRows[titleRow];\n\t\t}\n\t\t// else - all rows\n\t\n\t\tif (settings.orderHandler) {\n\t\t\t_fnSortAttachListener(\n\t\t\t\tsettings,\n\t\t\t\ttarget,\n\t\t\t\ttarget === settings.nTHead\n\t\t\t\t\t? 'tr'+notSelector+' th'+notSelector+', tr'+notSelector+' td'+notSelector\n\t\t\t\t\t: 'th'+notSelector+', td'+notSelector\n\t\t\t);\n\t\t}\n\t\n\t\t// Need to resolve the user input array into our internal structure\n\t\tvar order = [];\n\t\t_fnSortResolve( settings, order, settings.aaSorting );\n\t\n\t\tsettings.aaSorting = order;\n\t}\n\t\n\t\n\tfunction _fnSortAttachListener(settings, node, selector, column, callback) {\n\t\t_fnBindAction( node, selector, function (e) {\n\t\t\tvar run = false;\n\t\t\tvar columns = column === undefined\n\t\t\t\t? _fnColumnsFromHeader( e.target )\n\t\t\t\t: typeof column === 'function'\n\t\t\t\t\t? column()\n\t\t\t\t\t: Array.isArray(column)\n\t\t\t\t\t\t? column\n\t\t\t\t\t\t: [column];\n\t\n\t\t\tif ( columns.length ) {\n\t\t\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\t\t\tvar ret = _fnSortAdd( settings, columns[i], i, e.shiftKey );\n\t\n\t\t\t\t\tif (ret !== false) {\n\t\t\t\t\t\trun = true;\n\t\t\t\t\t}\t\t\t\t\t\n\t\n\t\t\t\t\t// If the first entry is no sort, then subsequent\n\t\t\t\t\t// sort columns are ignored\n\t\t\t\t\tif (settings.aaSorting.length === 1 && settings.aaSorting[0][1] === '') {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (run) {\n\t\t\t\t\t_fnProcessingRun(settings, true, function () {\n\t\t\t\t\t\t_fnSort( settings );\n\t\t\t\t\t\t_fnSortDisplay( settings, settings.aiDisplay );\n\t\n\t\t\t\t\t\t_fnReDraw( settings, false, false );\n\t\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tcallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\t\n\t/**\n\t * Sort the display array to match the master's order\n\t * @param {*} settings\n\t */\n\tfunction _fnSortDisplay(settings, display) {\n\t\tif (display.length < 2) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar master = settings.aiDisplayMaster;\n\t\tvar masterMap = {};\n\t\tvar map = {};\n\t\tvar i;\n\t\n\t\t// Rather than needing an `indexOf` on master array, we can create a map\n\t\tfor (i=0 ; i<master.length ; i++) {\n\t\t\tmasterMap[master[i]] = i;\n\t\t}\n\t\n\t\t// And then cache what would be the indexOf from the display\n\t\tfor (i=0 ; i<display.length ; i++) {\n\t\t\tmap[display[i]] = masterMap[display[i]];\n\t\t}\n\t\n\t\tdisplay.sort(function(a, b){\n\t\t\t// Short version of this function is simply `master.indexOf(a) - master.indexOf(b);`\n\t\t\treturn map[a] - map[b];\n\t\t});\n\t}\n\t\n\t\n\tfunction _fnSortResolve (settings, nestedSort, sort) {\n\t\tvar push = function ( a ) {\n\t\t\tif ($.isPlainObject(a)) {\n\t\t\t\tif (a.idx !== undefined) {\n\t\t\t\t\t// Index based ordering\n\t\t\t\t\tnestedSort.push([a.idx, a.dir]);\n\t\t\t\t}\n\t\t\t\telse if (a.name) {\n\t\t\t\t\t// Name based ordering\n\t\t\t\t\tvar cols = _pluck( settings.aoColumns, 'sName');\n\t\t\t\t\tvar idx = cols.indexOf(a.name);\n\t\n\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\tnestedSort.push([idx, a.dir]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Plain column index and direction pair\n\t\t\t\tnestedSort.push(a);\n\t\t\t}\n\t\t};\n\t\n\t\tif ( $.isPlainObject(sort) ) {\n\t\t\t// Object\n\t\t\tpush(sort);\n\t\t}\n\t\telse if ( sort.length && typeof sort[0] === 'number' ) {\n\t\t\t// 1D array\n\t\t\tpush(sort);\n\t\t}\n\t\telse if ( sort.length ) {\n\t\t\t// 2D array\n\t\t\tfor (var z=0; z<sort.length; z++) {\n\t\t\t\tpush(sort[z]); // Object or array\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, k, kLen,\n\t\t\taSort = [],\n\t\t\textSort = DataTable.ext.type.order,\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [];\n\t\t\n\t\tif ( ! settings.oFeatures.bSort ) {\n\t\t\treturn aSort;\n\t\t}\n\t\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( Array.isArray( fixed ) ) {\n\t\t\t_fnSortResolve( settings, nestedSort, fixed );\n\t\t}\n\t\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\t_fnSortResolve( settings, nestedSort, fixed.pre );\n\t\t}\n\t\n\t\t_fnSortResolve( settings, nestedSort, settings.aaSorting );\n\t\n\t\tif (fixedObj && fixed.post ) {\n\t\t\t_fnSortResolve( settings, nestedSort, fixed.post );\n\t\t}\n\t\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\n\t\t\tif ( aoColumns[ srcCol ] ) {\n\t\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\t\n\t\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tiCol = aDataSort[k];\n\t\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\t\n\t\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\t\tnestedSort[i]._idx = aoColumns[iCol].asSorting.indexOf(nestedSort[i][1]);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( nestedSort[i][1] ) {\n\t\t\t\t\t\taSort.push( {\n\t\t\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\t\t\tcol:       iCol,\n\t\t\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\t\t\ttype:      sType,\n\t\t\t\t\t\t\tformatter: extSort[ sType+\"-pre\" ],\n\t\t\t\t\t\t\tsorter:    extSort[ sType+\"-\"+nestedSort[i][1] ]\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn aSort;\n\t}\n\t\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSort ( oSettings, col, dir )\n\t{\n\t\tvar\n\t\t\ti, iLen,\n\t\t\taiOrig = [],\n\t\t\textSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort;\n\t\n\t\t// Make sure the columns all have types defined\n\t\t_fnColumnTypes(oSettings);\n\t\n\t\t// Allow a specific column to be sorted, which will _not_ alter the display\n\t\t// master\n\t\tif (col !== undefined) {\n\t\t\tvar srcCol = oSettings.aoColumns[col];\n\t\n\t\t\taSort = [{\n\t\t\t\tsrc:       col,\n\t\t\t\tcol:       col,\n\t\t\t\tdir:       dir,\n\t\t\t\tindex:     0,\n\t\t\t\ttype:      srcCol.sType,\n\t\t\t\tformatter: extSort[ srcCol.sType+\"-pre\" ],\n\t\t\t\tsorter:    extSort[ srcCol.sType+\"-\"+dir ]\n\t\t\t}];\n\t\t\tdisplayMaster = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\taSort = _fnSortFlatten( oSettings );\n\t\t}\n\t\n\t\tfor ( i=0, iLen=aSort.length ; i<iLen ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\t\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\t\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Reset the initial positions on each pass so we get a stable sort\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ i ] = i;\n\t\t\t}\n\t\n\t\t\t// If the first sort is desc, then reverse the array to preserve original\n\t\t\t// order, just in reverse\n\t\t\tif (aSort.length && aSort[0].dir === 'desc' && oSettings.orderDescReverse) {\n\t\t\t\taiOrig.reverse();\n\t\t\t}\n\t\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on its own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var test;\n\t\t\t *    test = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (test !== 0)\n\t\t\t *        return test;\n\t\t\t *    test = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (test !== 0)\n\t\t\t *      return test;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t */\n\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\tvar\n\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\tdataB = aoData[b]._aSortData;\n\t\n\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\tsort = aSort[k];\n\t\n\t\t\t\t\t// Data, which may have already been through a `-pre` function\n\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\ty = dataB[ sort.col ];\n\t\n\t\t\t\t\tif (sort.sorter) {\n\t\t\t\t\t\t// If there is a custom sorter (`-asc` or `-desc`) for this\n\t\t\t\t\t\t// data type, use it\n\t\t\t\t\t\ttest = sort.sorter(x, y);\n\t\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Otherwise, use generic sorting\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tx = aiOrig[a];\n\t\t\t\ty = aiOrig[b];\n\t\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t} );\n\t\t}\n\t\telse if ( aSort.length === 0 ) {\n\t\t\t// Apply index order\n\t\t\tdisplayMaster.sort(function (x, y) {\n\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t});\n\t\t}\n\t\n\t\tif (col === undefined) {\n\t\t\t// Tell the draw function that we have sorted the data\n\t\t\toSettings.bSorted = true;\n\t\t\toSettings.sortDetails = aSort;\n\t\n\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort] );\n\t\t}\n\t\n\t\treturn displayMaster;\n\t}\n\t\n\t\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {int} addIndex Counter\n\t *  @param {boolean} [shift=false] Shift click add\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAdd ( settings, colIdx, addIndex, shift )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a, overflow ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = asSorting.indexOf(a[1]);\n\t\t\t}\n\t\n\t\t\treturn idx+1 < asSorting.length ?\n\t\t\t\tidx+1 :\n\t\t\t\toverflow ?\n\t\t\t\t\tnull :\n\t\t\t\t\t0;\n\t\t};\n\t\n\t\tif ( ! col.bSortable ) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\t// Convert to 2D array if needed\n\t\tif ( typeof sorting[0] === 'number' ) {\n\t\t\tsorting = settings.aaSorting = [ sorting ];\n\t\t}\n\t\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( (shift || addIndex) && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = _pluck(sorting, '0').indexOf(colIdx);\n\t\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\t\n\t\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t\t}\n\t\n\t\t\t\tif ( nextSortIdx === null || asSorting[ nextSortIdx ] === '' ) {\n\t\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (shift) {\n\t\t\t\t// No sort on this column yet, being added by shift click\n\t\t\t\t// add it as itself\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet, being added from a colspan\n\t\t\t\t// so add with same direction as first column\n\t\t\t\tsorting.push( [ colIdx, sorting[0][1], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\t\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.order.position;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, iLen, colIdx;\n\t\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, iLen=oldSort.length ; i<iLen ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\t\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, iLen=sort.length ; i<iLen ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\t\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\t\n\t\tsettings.aLastSort = sort;\n\t}\n\t\n\t\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, colIdx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ colIdx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\t\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, colIdx,\n\t\t\t\t_fnColumnIndexToVisible( settings, colIdx )\n\t\t\t);\n\t\t}\n\t\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\t\tvar data = settings.aoData;\n\t\n\t\tfor ( var rowIdx=0 ; rowIdx<data.length ; rowIdx++ ) {\n\t\t\t// Sparse array\n\t\t\tif (! data[rowIdx]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\trow = data[rowIdx];\n\t\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\t\n\t\t\tif ( ! row._aSortData[colIdx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[rowIdx] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, rowIdx, colIdx, 'sort' );\n\t\n\t\t\t\trow._aSortData[ colIdx ] = formatter ?\n\t\t\t\t\tformatter( cellData, settings ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * State information for a table\n\t *\n\t * @param {*} settings\n\t * @returns State object\n\t */\n\tfunction _fnSaveState ( settings )\n\t{\n\t\tif (settings._bLoadingState) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Sort state saving uses [[idx, order]] structure.\n\t\tvar sorting = [];\n\t\t_fnSortResolve(settings, sorting, settings.aaSorting );\n\t\n\t\t/* Store the interesting variables */\n\t\tvar columns = settings.aoColumns;\n\t\tvar state = {\n\t\t\ttime:    +new Date(),\n\t\t\tstart:   settings._iDisplayStart,\n\t\t\tlength:  settings._iDisplayLength,\n\t\t\torder:   sorting.map(function (sort) {\n\t\t\t\t// If a column name is available, use it\n\t\t\t\treturn columns[sort[0]] && columns[sort[0]].sName\n\t\t\t\t\t? [ columns[sort[0]].sName, sort[1] ]\n\t\t\t\t\t: sort.slice();\n\t\t\t} ),\n\t\t\tsearch:  $.extend({}, settings.oPreviousSearch),\n\t\t\tcolumns: settings.aoColumns.map( function ( col, i ) {\n\t\t\t\treturn {\n\t\t\t\t\tname: col.sName,\n\t\t\t\t\tvisible: col.bVisible,\n\t\t\t\t\tsearch: $.extend({}, settings.aoPreSearchCols[i])\n\t\t\t\t};\n\t\t\t} )\n\t\t};\n\t\n\t\tsettings.oSavedState = state;\n\t\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\t\n\t\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t\t{\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t\t}\t\n\t}\n\t\n\t\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @param {function} callback Callback to execute when the state has been loaded\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( settings, init, callback )\n\t{\n\t\tif ( ! settings.oFeatures.bStateSave ) {\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar loaded = function(state) {\n\t\t\t_fnImplementState(settings, state, callback);\n\t\t}\n\t\n\t\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\t\n\t\tif ( state !== undefined ) {\n\t\t\t_fnImplementState( settings, state, callback );\n\t\t}\n\t\t// otherwise, wait for the loaded callback to be executed\n\t\n\t\treturn true;\n\t}\n\t\n\tfunction _fnImplementState ( settings, s, callback) {\n\t\tvar i, iLen;\n\t\tvar columns = settings.aoColumns;\n\t\tvar currentNames = _pluck(settings.aoColumns, 'sName');\n\t\n\t\tsettings._bLoadingState = true;\n\t\n\t\t// When StateRestore was introduced the state could now be implemented at any time\n\t\t// Not just initialisation. To do this an api instance is required in some places\n\t\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\t\n\t\tif ( ! s || ! s.time ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Reject old data\n\t\tvar duration = settings.iStateDuration;\n\t\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t// cancelling of loading by returning false\n\t\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\t\tif ( abStateLoad.indexOf(false) !== -1 ) {\n\t\t\tsettings._bLoadingState = false;\n\t\t\tcallback();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Store the saved state so it might be accessed at any time\n\t\tsettings.oLoadedState = $.extend( true, {}, s );\n\t\n\t\t// This is needed for ColReorder, which has to happen first to allow all\n\t\t// the stored indexes to be usable. It is not publicly documented.\n\t\t_fnCallbackFire( settings, null, 'stateLoadInit', [settings, s], true );\n\t\n\t\t// Page Length\n\t\tif ( s.length !== undefined ) {\n\t\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\t\tif (api) {\n\t\t\t\tapi.page.len(s.length)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings._iDisplayLength   = s.length;\n\t\t\t}\n\t\t}\n\t\n\t\t// Restore key features\n\t\tif ( s.start !== undefined ) {\n\t\t\tif(api === null) {\n\t\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t\t}\n\t\t}\n\t\n\t\t// Order\n\t\tif ( s.order !== undefined ) {\n\t\t\tsettings.aaSorting = [];\n\t\t\t$.each( s.order, function ( i, col ) {\n\t\t\t\tvar set = [ col[0], col[1] ];\n\t\n\t\t\t\t// A column name was stored and should be used for restore\n\t\t\t\tif (typeof col[0] === 'string') {\n\t\t\t\t\t// Find the name from the current list of column names\n\t\t\t\t\tvar idx = currentNames.indexOf(col[0]);\n\t\n\t\t\t\t\tif (idx < 0) {\n\t\t\t\t\t\t// If the column was not found ignore it and continue\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tset[0] = idx;\n\t\t\t\t}\n\t\t\t\telse if (set[0] >= columns.length) {\n\t\t\t\t\t// If the column index is out of bounds ignore it and continue\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tsettings.aaSorting.push(set);\n\t\t\t} );\n\t\t}\n\t\n\t\t// Search\n\t\tif ( s.search !== undefined ) {\n\t\t\t$.extend( settings.oPreviousSearch, s.search );\n\t\t}\n\t\n\t\t// Columns\n\t\tif ( s.columns ) {\n\t\t\tvar set = s.columns;\n\t\t\tvar incoming = _pluck(s.columns, 'name');\n\t\n\t\t\t// Check if it is a 2.2 style state object with a `name` property for the columns, and if\n\t\t\t// the name was defined. If so, then create a new array that will map the state object\n\t\t\t// given, to the current columns (don't bother if they are already matching tho).\n\t\t\tif (incoming.join('').length && incoming.join('') !== currentNames.join('')) {\n\t\t\t\tset = [];\n\t\n\t\t\t\t// For each column, try to find the name in the incoming array\n\t\t\t\tfor (i=0 ; i<currentNames.length ; i++) {\n\t\t\t\t\tif (currentNames[i] != '') {\n\t\t\t\t\t\tvar idx = incoming.indexOf(currentNames[i]);\n\t\n\t\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\t\tset.push(s.columns[idx]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// No matching column name in the state's columns, so this might be a new\n\t\t\t\t\t\t\t// column and thus can't have a state already.\n\t\t\t\t\t\t\tset.push({});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// If no name, but other columns did have a name, then there is no knowing\n\t\t\t\t\t\t// where this one came from originally so it can't be restored.\n\t\t\t\t\t\tset.push({});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// If the number of columns to restore is different from current, then all bets are off.\n\t\t\tif (set.length === columns.length) {\n\t\t\t\tfor ( i=0, iLen=set.length ; i<iLen ; i++ ) {\n\t\t\t\t\tvar col = set[i];\n\t\n\t\t\t\t\t// Visibility\n\t\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\t\tif (api) {\n\t\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Search\n\t\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], col.search );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\t\tif (api) {\n\t\t\t\t\tapi.one('draw', function () {\n\t\t\t\t\t\tapi.columns.adjust();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tsettings._bLoadingState = false;\n\t\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\t\tcallback();\n\t}\n\t\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\t\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'https://datatables.net/tn/'+tn;\n\t\t}\n\t\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\t\n\t\t\tif ( settings ) {\n\t\t\t\t_fnCallbackFire( settings, null, 'dt-error', [ settings, tn, msg ], true );\n\t\t\t}\n\t\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse if ( type == 'throw' ) {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t\telse if ( typeof type == 'function' ) {\n\t\t\t\ttype( settings, tn, msg );\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn;\n\t\t}\n\t\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\t\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\t\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( Object.prototype.hasOwnProperty.call(extender, prop) ) {\n\t\t\t\tval = extender[prop];\n\t\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\t\n\t/**\n\t * Bind an event handler to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object|string} selector Selector (for delegated events) or data object\n\t *   to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, selector, fn )\n\t{\n\t\t$(n)\n\t\t\t.on( 'click.DT', selector, function (e) {\n\t\t\t\tfn(e);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', selector, function (e){\n\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfn(e);\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.on( 'selectstart.DT', selector, function () {\n\t\t\t\t// Don't want a double click resulting in text selection\n\t\t\t\treturn false;\n\t\t\t} );\n\t}\n\t\n\t\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} store Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( settings, store, fn )\n\t{\n\t\tif ( fn ) {\n\t\t\tsettings[store].push(fn);\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} eventName Name of the jQuery custom event to trigger. If\n\t *      null no trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @param {boolean} [bubbles] True if the event should bubble\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, eventName, args, bubbles )\n\t{\n\t\tvar ret = [];\n\t\n\t\tif ( callbackArr ) {\n\t\t\tret = settings[callbackArr].slice().reverse().map( function (val) {\n\t\t\t\treturn val.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( eventName !== null) {\n\t\t\tvar e = $.Event( eventName+'.dt' );\n\t\t\tvar table = $(settings.nTable);\n\t\t\t\n\t\t\t// Expose the DataTables API on the event object for easy access\n\t\t\te.dt = settings.api;\n\t\n\t\t\ttable[bubbles ?  'trigger' : 'triggerHandler']( e, args );\n\t\n\t\t\t// If not yet attached to the document, trigger the event\n\t\t\t// on the body directly to sort of simulate the bubble\n\t\t\tif (bubbles && table.parents('body').length === 0) {\n\t\t\t\t$('body').trigger( e, args );\n\t\t\t}\n\t\n\t\t\tret.push( e.result );\n\t\t}\n\t\n\t\treturn ret;\n\t}\n\t\n\t\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\t\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( start >= end )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\t\n\t\t// Keep the start record on the current page\n\t\tstart -= (start % len);\n\t\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\n\t\tsettings._iDisplayStart = start;\n\t}\n\t\n\t\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\t\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\t\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\t\n\t\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\t\n\t/**\n\t * Common replacement for language strings\n\t *\n\t * @param {*} settings DT settings object\n\t * @param {*} str String with values to replace\n\t * @param {*} entries Plural number for _ENTRIES_ - can be undefined\n\t * @returns String\n\t */\n\tfunction _fnMacros ( settings, str, entries )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is\n\t\t// used only internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tmax        = settings.fnRecordsTotal(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, max ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) ).\n\t\t\treplace(/_ENTRIES_/g, settings.api.i18n('entries', '', entries) ).\n\t\t\treplace(/_ENTRIES-MAX_/g, settings.api.i18n('entries', '', max) ).\n\t\t\treplace(/_ENTRIES-TOTAL_/g, settings.api.i18n('entries', '', vis) );\n\t}\n\t\n\t/**\n\t * Add elements to an array as quickly as possible, but stack safe.\n\t *\n\t * @param {*} arr Array to add the data to\n\t * @param {*} data Data array that is to be added\n\t * @returns \n\t */\n\tfunction _fnArrayApply(arr, data) {\n\t\tif (! data) {\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Chrome can throw a max stack error if apply is called with\n\t\t// too large an array, but apply is faster.\n\t\tif (data.length < 10000) {\n\t\t\tarr.push.apply(arr, data);\n\t\t}\n\t\telse {\n\t\t\tfor (i=0 ; i<data.length ; i++) {\n\t\t\t\tarr.push(data[i]);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Add one or more listeners to the table\n\t *\n\t * @param {*} that JQ for the table\n\t * @param {*} name Event name\n\t * @param {*} src Listener(s)\n\t */\n\tfunction _fnListener(that, name, src) {\n\t\tif (!Array.isArray(src)) {\n\t\t\tsrc = [src];\n\t\t}\n\t\n\t\tfor (i=0 ; i<src.length ; i++) {\n\t\t\tthat.on(name + '.dt', src[i]);\n\t\t}\n\t}\n\t\n\t/**\n\t * Escape HTML entities in strings, in an object\n\t */\n\tfunction _fnEscapeObject(obj) {\n\t\tif (DataTable.ext.escape.attributes) {\n\t\t\t$.each(obj, function (key, val) {\n\t\t\t\tobj[key] = _escapeHtml(val);\n\t\t\t})\n\t\t}\n\t\n\t\treturn obj;\n\t}\n\t\n\t\n\t\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\t\n\t\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\t\n\t\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t *   * `DataTables.Api` - API instance\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = _pluck(settings, 'nTable');\n\t\n\t\tif ( ! mixed ) {\n\t\t\treturn [];\n\t\t}\n\t\telse if ( mixed.nTable && mixed.oFeatures ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = tables.indexOf(mixed);\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\t\treturn mixed.settings().toArray();\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed).get();\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed.get();\n\t\t}\n\t\n\t\tif ( jq ) {\n\t\t\treturn settings.filter(function (v, idx) {\n\t\t\t\treturn jq.includes(tables[idx]);\n\t\t\t});\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new DataTable.Api( 'table.dataTable' );\n\t */\n\t_Api = function ( context, data )\n\t{\n\t\tif ( ! (this instanceof _Api) ) {\n\t\t\treturn new _Api( context, data );\n\t\t}\n\t\n\t\tvar i;\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\t\n\t\tif ( Array.isArray( context ) ) {\n\t\t\tfor ( i=0 ; i<context.length ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\t\n\t\t// Remove duplicates\n\t\tthis.context = settings.length > 1\n\t\t\t? _unique( settings )\n\t\t\t: settings;\n\t\n\t\t// Initial data\n\t\t_fnArrayApply(this, data);\n\t\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\t\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\t\n\tDataTable.Api = _Api;\n\t\n\t// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n\t// isPlainObject.\n\t$.extend( _Api.prototype, {\n\t\tany: function ()\n\t\t{\n\t\t\treturn this.count() !== 0;\n\t\t},\n\t\n\t\tcontext: [], // array of table settings objects\n\t\n\t\tcount: function ()\n\t\t{\n\t\t\treturn this.flatten().length;\n\t\t},\n\t\n\t\teach: function ( fn )\n\t\t{\n\t\t\tfor ( var i=0, iLen=this.length ; i<iLen; i++ ) {\n\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t},\n\t\n\t\teq: function ( idx )\n\t\t{\n\t\t\tvar ctx = this.context;\n\t\n\t\t\treturn ctx.length > idx ?\n\t\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\t\tnull;\n\t\t},\n\t\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = __arrayProto.filter.call( this, fn, this );\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t\t},\n\t\n\t\tget: function ( idx )\n\t\t{\n\t\t\treturn this[ idx ];\n\t\t},\n\t\n\t\tjoin:    __arrayProto.join,\n\t\n\t\tincludes: function ( find ) {\n\t\t\treturn this.indexOf( find ) === -1 ? false : true;\n\t\t},\n\t\n\t\tindexOf: __arrayProto.indexOf,\n\t\n\t\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, iLen, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\t\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\talwaysNew = fn;\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\t\n\t\t\tfor ( i=0, iLen=context.length ; i<iLen ; i++ ) {\n\t\t\t\tvar apiInst = new _Api( context[i] );\n\t\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn.call( apiInst, context[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\t\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'every' || type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\t\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\t\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif ( a.length || alwaysNew ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\n\t\tlastIndexOf: __arrayProto.lastIndexOf,\n\t\n\t\tlength:  0,\n\t\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = __arrayProto.map.call( this, fn, this );\n\t\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\t\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\tvar fn = DataTable.util.get(prop);\n\t\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn fn(el);\n\t\t\t} );\n\t\t},\n\t\n\t\tpop:     __arrayProto.pop,\n\t\n\t\tpush:    __arrayProto.push,\n\t\n\t\treduce: __arrayProto.reduce,\n\t\n\t\treduceRight: __arrayProto.reduceRight,\n\t\n\t\treverse: __arrayProto.reverse,\n\t\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\t\n\t\tshift:   __arrayProto.shift,\n\t\n\t\tslice: function () {\n\t\t\treturn new _Api( this.context, this );\n\t\t},\n\t\n\t\tsort:    __arrayProto.sort,\n\t\n\t\tsplice:  __arrayProto.splice,\n\t\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\t\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\t\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this.toArray()) );\n\t\t},\n\t\n\t\tunshift: __arrayProto.unshift\n\t} );\n\t\n\t\n\tfunction _api_scope( scope, fn, struct ) {\n\t\treturn function () {\n\t\t\tvar ret = fn.apply( scope || this, arguments );\n\t\n\t\t\t// Method extension\n\t\t\t_Api.extend( ret, ret, struct.methodExt );\n\t\t\treturn ret;\n\t\t};\n\t}\n\t\n\tfunction _api_find( src, name ) {\n\t\tfor ( var i=0, iLen=src.length ; i<iLen ; i++ ) {\n\t\t\tif ( src[i].name === name ) {\n\t\t\t\treturn src[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t\n\twindow.__apiStruct = __apiStruct;\n\t\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, iLen,\n\t\t\tstruct;\n\t\n\t\tfor ( i=0, iLen=ext.length ; i<iLen ; i++ ) {\n\t\t\tstruct = ext[i];\n\t\n\t\t\tif (struct.name === '__proto__') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t\t_api_scope( scope, struct.val, struct ) :\n\t\t\t\tstruct.type === 'object' ?\n\t\t\t\t\t{} :\n\t\t\t\t\tstruct.val;\n\t\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\t\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\t\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\t\n\t\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( Array.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\ti, iLen,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\t\n\t\tfor ( i=0, iLen=heir.length ; i<iLen ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\t\n\t\t\tvar src = _api_find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   [],\n\t\t\t\t\ttype:      'object'\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\t\n\t\t\tif ( i === iLen-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t\t'function' :\n\t\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t\t'object' :\n\t\t\t\t\t\t'other';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\t};\n\t\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\t\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\t\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\t\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\t\n\t\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\tif ( Array.isArray(selector) ) {\n\t\t\tvar result = [];\n\t\n\t\t\tselector.forEach(function (sel) {\n\t\t\t\tvar inner = __table_selector(sel, a);\n\t\n\t\t\t\t_fnArrayApply(result, inner);\n\t\t\t});\n\t\n\t\t\treturn result.filter( function (item) {\n\t\t\t\treturn item;\n\t\t\t});\n\t\t}\n\t\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\t\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = a.map( function (el) {\n\t\t\treturn el.nTable;\n\t\t} );\n\t\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function () {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = nodes.indexOf(this);\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\t\n\t\n\t\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector !== undefined && selector !== null ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\t\n\t\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\t\n\t\t// Truncate to the first matched table\n\t\treturn ctx.length ?\n\t\t\tnew _Api( ctx[0] ) :\n\t\t\ttables;\n\t} );\n\t\n\t// Common methods, combined to reduce size\n\t[\n\t\t['nodes', 'node', 'nTable'],\n\t\t['body', 'body', 'nTBody'],\n\t\t['header', 'header', 'nTHead'],\n\t\t['footer', 'footer', 'nTFoot'],\n\t].forEach(function (item) {\n\t\t_api_registerPlural(\n\t\t\t'tables().' + item[0] + '()',\n\t\t\t'table().' + item[1] + '()' ,\n\t\t\tfunction () {\n\t\t\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t\t\treturn ctx[item[2]];\n\t\t\t\t}, 1 );\n\t\t\t}\n\t\t);\n\t});\n\t\n\t// Structure methods\n\t[\n\t\t['header', 'aoHeader'],\n\t\t['footer', 'aoFooter'],\n\t].forEach(function (item) {\n\t\t_api_register( 'table().' + item[0] + '.structure()' , function (selector) {\n\t\t\tvar indexes = this.columns(selector).indexes().flatten().toArray();\n\t\t\tvar ctx = this.context[0];\n\t\t\tvar structure = _fnHeaderLayout(ctx, ctx[item[1]], indexes);\n\t\n\t\t\t// The structure is in column index order - but from this method we want the return to be\n\t\t\t// in the columns() selector API order. In order to do that we need to map from one form\n\t\t\t// to the other\n\t\t\tvar orderedIndexes = indexes.slice().sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\t\n\t\t\treturn structure.map(function (row) {\n\t\t\t\treturn indexes.map(function (colIdx) {\n\t\t\t\t\treturn row[orderedIndexes.indexOf(colIdx)];\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n\t\n\t\n\t_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTableWrapper;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'tables().every()', function ( fn ) {\n\t\tvar that = this;\n\t\n\t\treturn this.iterator('table', function (s, i) {\n\t\t\tfn.call(that.table(i), i);\n\t\t});\n\t});\n\t\n\t_api_register( 'caption()', function ( value, side ) {\n\t\tvar context = this.context;\n\t\n\t\t// Getter - return existing node's content\n\t\tif ( value === undefined ) {\n\t\t\tvar caption = context[0].captionNode;\n\t\n\t\t\treturn caption && context.length ?\n\t\t\t\tcaption.innerHTML : \n\t\t\t\tnull;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\tvar table = $(ctx.nTable);\n\t\t\tvar caption = $(ctx.captionNode);\n\t\t\tvar container = $(ctx.nTableWrapper);\n\t\n\t\t\t// Create the node if it doesn't exist yet\n\t\t\tif ( ! caption.length ) {\n\t\t\t\tcaption = $('<caption/>').html( value );\n\t\t\t\tctx.captionNode = caption[0];\n\t\n\t\t\t\t// If side isn't set, we need to insert into the document to let the\n\t\t\t\t// CSS decide so we can read it back, otherwise there is no way to\n\t\t\t\t// know if the CSS would put it top or bottom for scrolling\n\t\t\t\tif (! side) {\n\t\t\t\t\ttable.prepend(caption);\n\t\n\t\t\t\t\tside = caption.css('caption-side');\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tcaption.html( value );\n\t\n\t\t\tif ( side ) {\n\t\t\t\tcaption.css( 'caption-side', side );\n\t\t\t\tcaption[0]._captionSide = side;\n\t\t\t}\n\t\n\t\t\tif (container.find('div.dataTables_scroll').length) {\n\t\t\t\tvar selector = (side === 'top' ? 'Head' : 'Foot');\n\t\n\t\t\t\tcontainer.find('div.dataTables_scroll'+ selector +' table').prepend(caption);\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttable.prepend(caption);\n\t\t\t}\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'caption.node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\treturn ctx.length ? ctx[0].captionNode : null;\n\t} );\n\t\n\t\n\t/**\n\t * Redraw the tables in the current context.\n\t */\n\t_api_register( 'draw()', function ( paging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( paging === 'page' ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\t\tfalse :\n\t\t\t\t\t\ttrue;\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, paging===false );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\t\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function () {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\t\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords,\n\t\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t\t};\n\t} );\n\t\n\t\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a JavaScript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\t// Use the draw event to trigger a callback\n\t\tif ( callback ) {\n\t\t\tvar api = new _Api( settings );\n\t\n\t\t\tapi.one( 'draw', function () {\n\t\t\t\tcallback( api.ajax.json() );\n\t\t\t} );\n\t\t}\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t_fnProcessingDisplay( settings, true );\n\t\n\t\t\t// Cancel an existing request\n\t\t\tvar xhr = settings.jqXHR;\n\t\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\t\txhr.abort();\n\t\t\t}\n\t\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, {}, function( json ) {\n\t\t\t\t_fnClearTable( settings );\n\t\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\t\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Get the data submitted in the last Ajax request\n\t */\n\t_api_register( 'ajax.params()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].oAjaxData;\n\t\t}\n\t\n\t\t// else return undefined;\n\t} );\n\t\n\t\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\t\n\t\t\treturn $.isPlainObject( ctx.ajax ) ?\n\t\t\t\tctx.ajax.url :\n\t\t\t\tctx.ajax;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t\n\tvar _selector_run = function ( type, selector, selectFn, settings, opts )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ti, iLen,\n\t\t\tselectorType = typeof selector;\n\t\n\t\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t\t// given with their array like look\n\t\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\t\n\t\tfor ( i=0, iLen=selector.length ; i<iLen ; i++ ) {\n\t\t\tres = selectFn( typeof selector[i] === 'string' ? selector[i].trim() : selector[i] );\n\t\n\t\t\t// Remove empty items\n\t\t\tres = res.filter( function (item) {\n\t\t\t\treturn item !== null && item !== undefined;\n\t\t\t});\n\t\n\t\t\tif ( res && res.length ) {\n\t\t\t\tout = out.concat( res );\n\t\t\t}\n\t\t}\n\t\n\t\t// selector extensions\n\t\tvar ext = _ext.selector[ type ];\n\t\tif ( ext.length ) {\n\t\t\tfor ( i=0, iLen=ext.length ; i<iLen ; i++ ) {\n\t\t\t\tout = ext[i]( settings, opts, out );\n\t\t\t}\n\t\t}\n\t\n\t\treturn _unique( out );\n\t};\n\t\n\t\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\t\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && opts.search === undefined ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\t\n\t\treturn $.extend( {\n\t\t\tcolumnOrder: 'implied',\n\t\t\tsearch: 'none',\n\t\t\torder: 'current',\n\t\t\tpage: 'all'\n\t\t}, opts );\n\t};\n\t\n\t\n\t// Reduce the API instance to the first item found\n\tvar _selector_first = function ( old )\n\t{\n\t\tvar inst = new _Api(old.context[0]);\n\t\n\t\t// Use a push rather than passing to the constructor, since it will\n\t\t// merge arrays down automatically, which isn't what is wanted here\n\t\tif (old.length) {\n\t\t\tinst.push( old[0] );\n\t\t}\n\t\n\t\tinst.selector = old.selector;\n\t\n\t\t// Limit to a single row / column / cell\n\t\tif (inst.length && inst[0].length > 1) {\n\t\t\tinst[0].splice(1);\n\t\t}\n\t\n\t\treturn inst;\n\t};\n\t\n\t\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, iLen, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\t\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\t\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t// In server-side processing mode, most options are irrelevant since\n\t\t\t// rows not shown don't exist and the index order is the applied order\n\t\t\t// Removed is a special case - for consistency just return an empty\n\t\t\t// array\n\t\t\treturn search === 'removed' ?\n\t\t\t\t[] :\n\t\t\t\t_range( 0, displayMaster.length );\n\t\t}\n\t\n\t\tif ( page == 'current' ) {\n\t\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t\t// are\n\t\t\tfor ( i=settings._iDisplayStart, iLen=settings.fnDisplayEnd() ; i<iLen ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\tif ( search == 'none') {\n\t\t\t\ta = displayMaster.slice();\n\t\t\t}\n\t\t\telse if ( search == 'applied' ) {\n\t\t\t\ta = displayFiltered.slice();\n\t\t\t}\n\t\t\telse if ( search == 'removed' ) {\n\t\t\t\t// O(n+m) solution by creating a hash map\n\t\t\t\tvar displayFilteredMap = {};\n\t\n\t\t\t\tfor ( i=0, iLen=displayFiltered.length ; i<iLen ; i++ ) {\n\t\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t\t}\n\t\n\t\t\t\tdisplayMaster.forEach(function (item) {\n\t\t\t\t\tif (! Object.prototype.hasOwnProperty.call(displayFilteredMap, item)) {\n\t\t\t\t\t\ta.push(item);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, iLen=settings.aoData.length ; i<iLen ; i++ ) {\n\t\t\t\tif (! settings.aoData[i]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = displayFiltered.indexOf(i);\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if ( typeof order === 'number' ) {\n\t\t\t// Order the rows by the given column\n\t\t\tvar ordered = _fnSort(settings, order, 'asc');\n\t\n\t\t\tif (search === 'none') {\n\t\t\t\ta = ordered;\n\t\t\t}\n\t\t\telse { // applied | removed\n\t\t\t\tfor (i=0; i<ordered.length; i++) {\n\t\t\t\t\ttmp = displayFiltered.indexOf(ordered[i]);\n\t\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( ordered[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn a;\n\t};\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\tvar rows;\n\t\tvar run = function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\t\t\tvar aoData = settings.aoData;\n\t\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\n\t\t\tif ( ! rows ) {\n\t\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t\t}\n\t\n\t\t\tif ( selInt !== null && rows.indexOf(selInt) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\t\n\t\t\t// Selector - function\n\t\t\tif ( typeof sel === 'function' ) {\n\t\t\t\treturn rows.map( function (idx) {\n\t\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t\t} );\n\t\t\t}\n\t\n\t\t\t// Selector - node\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\t\tvar cellIdx = sel._DT_CellIndex;\n\t\n\t\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse if ( cellIdx ) {\n\t\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\t\treturn host.length ?\n\t\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t\t[];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t\t// DataTables simplifies this for row selectors since you can select\n\t\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t\t// unescaped.\n\t\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t\t// get row index from id\n\t\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\t\treturn [ rowObj.idx ];\n\t\t\t\t}\n\t\n\t\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t\t// matches\n\t\t\t}\n\t\t\t\n\t\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\t\tvar nodes = _removeEmpty(\n\t\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t\t);\n\t\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t};\n\t\n\t\tvar matched = _selector_run( 'row', selector, run, settings, opts );\n\t\n\t\tif (opts.order === 'current' || opts.order === 'applied') {\n\t\t\t_fnSortDisplay(settings, matched);\n\t\t}\n\t\n\t\treturn matched;\n\t};\n\t\n\t\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_register( 'rows().nodes()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidate( settings, row, src );\n\t\t} );\n\t} );\n\t\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\t\tvar a = [];\n\t\tvar context = this.context;\n\t\n\t\t// `iterator` will drop undefined values, but in this case we want them\n\t\tfor ( var i=0, iLen=context.length ; i<iLen ; i++ ) {\n\t\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t\t}\n\t\t}\n\t\n\t\treturn new _Api( context, a );\n\t} );\n\t\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tthis.iterator( 'row', function ( settings, row ) {\n\t\t\tvar data = settings.aoData;\n\t\t\tvar rowData = data[ row ];\n\t\n\t\t\t// Delete from the display arrays\n\t\t\tvar idx = settings.aiDisplayMaster.indexOf(row);\n\t\t\tif (idx !== -1) {\n\t\t\t\tsettings.aiDisplayMaster.splice(idx, 1);\n\t\t\t}\n\t\n\t\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\t\tsettings._iRecordsDisplay--;\n\t\t\t}\n\t\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\n\t\t\t// Remove the row's ID reference if there is one\n\t\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\t\tif ( id !== undefined ) {\n\t\t\t\tdelete settings.aIds[ id ];\n\t\t\t}\n\t\n\t\t\tdata[row] = null;\n\t\t} );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, iLen;\n\t\t\t\tvar out = [];\n\t\n\t\t\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn out;\n\t\t\t}, 1 );\n\t\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\t_fnArrayApply(modRows, newRows);\n\t\n\t\treturn modRows;\n\t} );\n\t\n\t\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length && this[0].length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\trow._aData = data;\n\t\n\t\t// If the DOM has an id, and the data source is an array\n\t\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t\t}\n\t\n\t\t// Automatically invalidate\n\t\t_fnInvalidate( ctx[0], this[0], 'data' );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( 'row().node()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif (ctx.length && this.length && this[0].length) {\n\t\t\tvar row = ctx[0].aoData[ this[0] ];\n\t\n\t\t\tif (row && row.nTr) {\n\t\t\t\treturn row.nTr;\n\t\t\t}\n\t\t}\n\t\n\t\treturn null;\n\t} );\n\t\n\t\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\t\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\t\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\t\n\t\n\t$(document).on('plugin-init.dt', function (e, context) {\n\t\tvar api = new _Api( context );\n\t\n\t\tapi.on( 'stateSaveParams.DT', function ( e, settings, d ) {\n\t\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t\t// internal loop\n\t\t\tvar idFn = settings.rowIdFn;\n\t\t\tvar rows = settings.aiDisplayMaster;\n\t\t\tvar ids = [];\n\t\n\t\t\tfor (var i=0 ; i<rows.length ; i++) {\n\t\t\t\tvar rowIdx = rows[i];\n\t\t\t\tvar data = settings.aoData[rowIdx];\n\t\n\t\t\t\tif (data._detailsShow) {\n\t\t\t\t\tids.push( '#' + idFn(data._aData) );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\td.childRows = ids;\n\t\t});\n\t\n\t\t// For future state loads (e.g. with StateRestore)\n\t\tapi.on( 'stateLoaded.DT', function (e, settings, state) {\n\t\t\t__details_state_load( api, state );\n\t\t});\n\t\n\t\t// And the initial load state\n\t\t__details_state_load( api, api.state.loaded() );\n\t});\n\t\n\tvar __details_state_load = function (api, state)\n\t{\n\t\tif ( state && state.childRows ) {\n\t\t\tapi\n\t\t\t\t.rows( state.childRows.map(function (id) {\n\t\t\t\t\t// Escape any `:` characters from the row id. Accounts for\n\t\t\t\t\t// already escaped characters.\n\t\t\t\t\treturn id.replace(/([^:\\\\]*(?:\\\\.[^:\\\\]*)*):/g, \"$1\\\\:\");\n\t\t\t\t}) )\n\t\t\t\t.every( function () {\n\t\t\t\t\t_fnCallbackFire( api.settings()[0], null, 'requestChild', [ this ] )\n\t\t\t\t});\n\t\t}\n\t}\n\t\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\t// Recursion to allow for arrays of jQuery objects\n\t\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\t\tfor ( var i=0, iLen=r.length ; i<iLen ; i++ ) {\n\t\t\t\t\taddRow( r[i], k );\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t\t// to add the correct number of columns etc\n\t\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\t\tr.setAttribute( 'data-dt-row', row.idx );\n\t\t\t\trows.push( r );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Otherwise create a row with a wrapper\n\t\t\t\tvar created = $('<tr><td></td></tr>')\n\t\t\t\t\t.attr( 'data-dt-row', row.idx )\n\t\t\t\t\t.addClass( k );\n\t\t\t\t\n\t\t\t\t$('td', created)\n\t\t\t\t\t.addClass( k )\n\t\t\t\t\t.html( r )[0].colSpan = _fnVisibleColumns( ctx );\n\t\n\t\t\t\trows.push( created[0] );\n\t\t\t}\n\t\t};\n\t\n\t\taddRow( data, klass );\n\t\n\t\tif ( row._details ) {\n\t\t\trow._details.detach();\n\t\t}\n\t\n\t\trow._details = $(rows);\n\t\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\t\n\t\n\t// Make state saving of child row details async to allow them to be batch processed\n\tvar __details_state = DataTable.util.throttle(\n\t\tfunction (ctx) {\n\t\t\t_fnSaveState( ctx[0] )\n\t\t},\n\t\t500\n\t);\n\t\n\t\n\tvar __details_remove = function ( api, idx )\n\t{\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length ) {\n\t\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\t\n\t\t\tif ( row && row._details ) {\n\t\t\t\trow._details.detach();\n\t\n\t\t\t\trow._detailsShow = undefined;\n\t\t\t\trow._details = undefined;\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_display = function ( api, show ) {\n\t\tvar ctx = api.context;\n\t\n\t\tif ( ctx.length && api.length ) {\n\t\t\tvar row = ctx[0].aoData[ api[0] ];\n\t\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.detach();\n\t\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t\t}\n\t\n\t\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\t\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t\t__details_state( ctx );\n\t\t\t}\n\t\t}\n\t};\n\t\n\t\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar api = new _Api( settings );\n\t\tvar namespace = '.dt.DT_details';\n\t\tvar drawEvent = 'draw'+namespace;\n\t\tvar colvisEvent = 'column-sizing'+namespace;\n\t\tvar destroyEvent = 'destroy'+namespace;\n\t\tvar data = settings.aoData;\n\t\n\t\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\t\n\t\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t\t// Internal data grab\n\t\t\t\t\tvar row = data[ idx ];\n\t\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\t\n\t\t\t// Column visibility change - update the colspan\n\t\t\tapi.on( colvisEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisibleColumns( ctx );\n\t\n\t\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\t\trow = data[i];\n\t\n\t\t\t\t\tif ( row && row._details ) {\n\t\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\t\tvar el = $(this).children('td');\n\t\n\t\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\t// Table destroyed - nuke any child rows\n\t\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\t\tif ( settings !== ctx ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\t\tif ( data[i] && data[i]._details ) {\n\t\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\t\n\t// Strings for the method names to help minification\n\tvar _emp = '';\n\tvar _child_obj = _emp+'row().child';\n\tvar _child_mth = _child_obj+'()';\n\t\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( _child_mth, function ( data, klass ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length && ctx[0].aoData[ this[0] ]\n\t\t\t\t? ctx[0].aoData[ this[0] ]._details\n\t\t\t\t: undefined;\n\t\t}\n\t\telse if ( data === true ) {\n\t\t\t// show\n\t\t\tthis.child.show();\n\t\t}\n\t\telse if ( data === false ) {\n\t\t\t// remove\n\t\t\t__details_remove( this );\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.show()',\n\t\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, true );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.hide()',\n\t\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n\t], function () {         // it returns an object and this method is not executed)\n\t\t__details_display( this, false );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( [\n\t\t_child_obj+'.remove()',\n\t\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n\t], function () {           // it returns an object and this method is not executed)\n\t\t__details_remove( this );\n\t\treturn this;\n\t} );\n\t\n\t\n\t_api_register( _child_obj+'.isShown()', function () {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( ctx.length && this.length && ctx[0].aoData[ this[0] ] ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\t\n\t\n\t\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\t\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\t\n\tvar __re_column_selector = /^([^:]+)?:(name|title|visIdx|visible)$/;\n\t\n\t\n\t// r1 and r2 are redundant - but it means that the parameters match for the\n\t// iterator callback in columns().data()\n\tvar __columnData = function ( settings, column, r1, r2, rows, type ) {\n\t\tvar a = [];\n\t\tfor ( var row=0, iLen=rows.length ; row<iLen ; row++ ) {\n\t\t\ta.push( _fnGetCellData( settings, rows[row], column, type ) );\n\t\t}\n\t\treturn a;\n\t};\n\t\n\t\n\tvar __column_header = function ( settings, column, row ) {\n\t\tvar header = settings.aoHeader;\n\t\tvar titleRow = settings.titleRow;\n\t\tvar target = null;\n\t\n\t\tif (row !== undefined) {\n\t\t\ttarget = row;\n\t\t}\n\t\telse if (titleRow === true) { // legacy orderCellsTop support\n\t\t\ttarget = 0;\n\t\t}\n\t\telse if (titleRow === false) {\n\t\t\ttarget = header.length - 1;\n\t\t}\n\t\telse if (titleRow !== null) {\n\t\t\ttarget = titleRow;\n\t\t}\n\t\telse {\n\t\t\t// Automatic - find the _last_ unique cell from the top that is not empty (last for\n\t\t\t// backwards compatibility)\n\t\t\tfor (var i=0 ; i<header.length ; i++) {\n\t\t\t\tif (header[i][column].unique && $('.dt-column-title', header[i][column].cell).text()) {\n\t\t\t\t\ttarget = i;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (target === null) {\n\t\t\t\ttarget = 0;\n\t\t\t}\n\t\t}\n\t\n\t\treturn header[target][column].cell;\n\t};\n\t\n\tvar __column_header_cells = function (header) {\n\t\tvar out = [];\n\t\n\t\tfor (var i=0 ; i<header.length ; i++) {\n\t\t\tfor (var j=0 ; j<header[i].length ; j++) {\n\t\t\t\tvar cell = header[i][j].cell;\n\t\n\t\t\t\tif (!out.includes(cell)) {\n\t\t\t\t\tout.push(cell);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames, titles,\n\t\t\tnodes = __column_header_cells(settings.aoHeader);\n\t\t\n\t\tvar run = function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\t\n\t\t\t// Selector - all\n\t\t\tif ( s === '' ) {\n\t\t\t\treturn _range( columns.length );\n\t\t\t}\n\t\n\t\t\t// Selector - index\n\t\t\tif ( selInt !== null ) {\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\n\t\t\t// Selector = function\n\t\t\tif ( typeof s === 'function' ) {\n\t\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\n\t\t\t\treturn columns.map(function (col, idx) {\n\t\t\t\t\treturn s(\n\t\t\t\t\t\t\tidx,\n\t\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t\t__column_header( settings, idx )\n\t\t\t\t\t\t) ? idx : null;\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\t// jQuery or string selector\n\t\t\tvar match = typeof s === 'string' ?\n\t\t\t\ts.match( __re_column_selector ) :\n\t\t\t\t'';\n\t\n\t\t\tif ( match ) {\n\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\t// Selector is a column index\n\t\t\t\t\t\tif (match[1] && match[1].match(/^\\d+$/)) {\n\t\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\n\t\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\t\tvar visColumns = columns.map( function (col,i) {\n\t\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn columns.map( function (col, idx) {\n\t\t\t\t\t\t\t// Not visible, can't match\n\t\t\t\t\t\t\tif (! col.bVisible) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tif (col.responsiveVisible === false) {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// Selector\n\t\t\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\t\t\treturn $(nodes[idx]).filter(match[1]).length > 0 ? idx : null;\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// `:visible` on its own\n\t\t\t\t\t\t\treturn idx;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t// Don't get names, unless needed, and only get once if it is\n\t\t\t\t\t\tif (!names) {\n\t\t\t\t\t\t\tnames = _pluck( columns, 'sName' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\treturn names.map( function (name, i) {\n\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tcase 'title':\n\t\t\t\t\t\tif (!titles) {\n\t\t\t\t\t\t\ttitles = _pluck( columns, 'sTitle' );\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// match by column title\n\t\t\t\t\t\treturn titles.map( function (title, i) {\n\t\t\t\t\t\t\treturn title === match[1] ? i : null;\n\t\t\t\t\t\t} );\n\t\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Cell in the table body\n\t\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t\t}\n\t\n\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\tvar jqResult = $( nodes )\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn _fnColumnsFromHeader( this ); // `nodes` is column index complete and in order\n\t\t\t\t} )\n\t\t\t\t.toArray()\n\t\t\t\t.sort(function (a, b) {\n\t\t\t\t\treturn a - b;\n\t\t\t\t});\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t\t// a child or such an element\n\t\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\t\treturn host.length ?\n\t\t\t\t[ host.data('dt-column') ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\tvar selected = _selector_run( 'column', selector, run, settings, opts );\n\t\n\t\treturn opts.columnOrder && opts.columnOrder === 'index'\n\t\t\t? selected.sort(function (a, b) { return a - b; })\n\t\t\t: selected; // implied\n\t};\n\t\n\t\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\tcells, i, iLen, tr;\n\t\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\t\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn false;\n\t\t}\n\t\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = _pluck(cols, 'bVisible').indexOf(true, column+1);\n\t\n\t\t\tfor ( i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\tif (data[i]) {\n\t\t\t\t\ttr = data[i].nTr;\n\t\t\t\t\tcells = data[i].anCells;\n\t\n\t\t\t\t\tif ( tr ) {\n\t\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t\t}\n\t\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t\n\t\t_colGroup(settings);\n\t\t\n\t\treturn true;\n\t};\n\t\n\t\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\t\n\t\topts = _selector_opts( opts );\n\t\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t}, 1 );\n\t\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\t\n\t\treturn inst;\n\t} );\n\t\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( row ) {\n\t\treturn this.iterator( 'column', function (settings, column) {\n\t\t\treturn __column_header(settings, column, row);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( row ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar footer = settings.aoFooter;\n\t\n\t\t\tif (! footer.length) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\treturn settings.aoFooter[row !== undefined ? row : 0][column].cell;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', __columnData, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().render()', 'column().render()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn __columnData( settings, column, i, j, rows, type );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].mData;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().init()', 'column().init()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column];\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().names()', 'column().name()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].sName;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().titles()', 'column().title()', function (title, row) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t// Argument shifting\n\t\t\tif (typeof title === 'number') {\n\t\t\t\trow = title;\n\t\t\t\ttitle = undefined;\n\t\t\t}\n\t\n\t\t\tvar span = $('.dt-column-title', this.column(column).header(row));\n\t\n\t\t\tif (title !== undefined) {\n\t\t\t\tspan.html(title);\n\t\t\t\treturn this;\n\t\t\t}\n\t\n\t\t\treturn span.html();\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().types()', 'column().type()', function () {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar colObj = settings.aoColumns[column]\n\t\t\tvar type = colObj.sType;\n\t\n\t\t\t// If the type was invalidated, then resolve it. This actually does\n\t\t\t// all columns at the moment. Would only happen once if getting all\n\t\t\t// column's data types.\n\t\t\tif (! type) {\n\t\t\t\t_fnColumnTypes(settings);\n\t\n\t\t\t\ttype = colObj.sType;\n\t\t\t}\n\t\n\t\t\treturn type;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\t\tvar that = this;\n\t\tvar changed = [];\n\t\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\t\tif ( vis === undefined ) {\n\t\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t\t} // else\n\t\t\t\n\t\t\tif (__setColumnVis( settings, column, vis )) {\n\t\t\t\tchanged.push(column);\n\t\t\t}\n\t\t} );\n\t\n\t\t// Group the column visibility changes\n\t\tif ( vis !== undefined ) {\n\t\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t\t// Redraw the header after changes\n\t\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\t\n\t\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisibleColumns(settings));\n\t\t\t\t}\n\t\t\n\t\t\t\t_fnSaveState( settings );\n\t\n\t\t\t\t// Second loop once the first is done for events\n\t\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\t\tif (changed.includes(column)) {\n\t\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\n\t\t\t\tif ( changed.length && (calc === undefined || calc) ) {\n\t\t\t\t\tthat.columns.adjust();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\treturn ret;\n\t} );\n\t\n\t_api_registerPlural( 'columns().widths()', 'column().width()', function () {\n\t\t// Injects a fake row into the table for just a moment so the widths can\n\t\t// be read, regardless of colspan in the header and rows being present in\n\t\t// the body\n\t\tvar columns = this.columns(':visible').count();\n\t\tvar row = $('<tr>').html('<td>' + Array(columns).join('</td><td>') + '</td>');\n\t\n\t\t$(this.table().body()).append(row);\n\t\n\t\tvar widths = row.children().map(function () {\n\t\t\treturn $(this).outerWidth();\n\t\t});\n\t\n\t\trow.remove();\n\t\t\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar visIdx = _fnColumnIndexToVisible( settings, column );\n\t\n\t\t\treturn visIdx !== null ? widths[visIdx] : 0;\n\t\t}, 1);\n\t} );\n\t\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Force a column sizing to happen with a manual call - otherwise it can skip\n\t\t\t// if the size hasn't changed\n\t\t\tsettings.containerWidth = -1;\n\t\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}, 1 );\n\t} );\n\t\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\t\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\t\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\t\tvar allCells = $(_flatten( [], cells ));\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, iLen, j, o, host;\n\t\n\t\tvar run = function ( s ) {\n\t\t\tvar fnSelector = typeof s === 'function';\n\t\n\t\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t\t// All cells and function selectors\n\t\t\t\ta = [];\n\t\n\t\t\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\t\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\to = {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\t\thost = data[ row ];\n\t\n\t\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn a;\n\t\t\t}\n\t\t\t\n\t\t\t// Selector - index\n\t\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\t\treturn s.column !== undefined && s.row !== undefined && rows.indexOf(s.row) !== -1 ?\n\t\t\t\t\t[s] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\n\t\t\t// Selector - jQuery filtered cells\n\t\t\tvar jqResult = allCells\n\t\t\t\t.filter( s )\n\t\t\t\t.map( function (i, el) {\n\t\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t\t\t\t\t};\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\n\t\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\t\treturn jqResult;\n\t\t\t}\n\t\n\t\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t\t// data attributes\n\t\t\thost = $(s).closest('*[data-dt-row]');\n\t\t\treturn host.length ?\n\t\t\t\t[ {\n\t\t\t\t\trow: host.data('dt-row'),\n\t\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t\t} ] :\n\t\t\t\t[];\n\t\t};\n\t\n\t\treturn _selector_run( 'cell', selector, run, settings, opts );\n\t};\n\t\n\t\n\t\n\t\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\t// Indexes\n\t\t\tif ( rowSelector.row === undefined ) {\n\t\t\t\t// Selector options in first parameter\n\t\t\t\topts = rowSelector;\n\t\t\t\trowSelector = null;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Cell index objects in first parameter\n\t\t\t\topts = columnSelector;\n\t\t\t\tcolumnSelector = null;\n\t\t\t}\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\t\n\t\t// The default built in options need to apply to row and columns\n\t\tvar internalOpts = opts ? {\n\t\t\tpage: opts.page,\n\t\t\torder: opts.order,\n\t\t\tsearch: opts.search\n\t\t} : {};\n\t\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, internalOpts );\n\t\tvar rows = this.rows( rowSelector, internalOpts );\n\t\tvar i, iLen, j, jen;\n\t\n\t\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\t\tvar a = [];\n\t\n\t\t\tfor ( i=0, iLen=rows[idx].length ; i<iLen ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn a;\n\t\t}, 1 );\n\t\n\t\t// There is currently only one extension which uses a cell selector extension\n\t\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t\t// an extension specific check at the moment\n\t\tvar cells = opts && opts.selected ?\n\t\t\tthis.cells( cellsNoOpts, opts ) :\n\t\t\tcellsNoOpts;\n\t\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\t\n\t\treturn cells;\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\tvar data = settings.aoData[ row ];\n\t\n\t\t\treturn data && data.anCells ?\n\t\t\t\tdata.anCells[ column ] :\n\t\t\t\tundefined;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\t\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column, type );\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\t_fnInvalidate( settings, row, src, column );\n\t\t} );\n\t} );\n\t\n\t\n\t\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\t\n\t\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\t\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\t\n\t\treturn this;\n\t} );\n\t\n\t\n\t\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\t\tvar args = Array.prototype.slice.call( arguments );\n\t\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( args.length > 1 ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = args;\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar resolved = [];\n\t\t\t_fnSortResolve(settings, resolved, order);\n\t\n\t\t\tsettings.aaSorting = resolved;\n\t\t} );\n\t} );\n\t\n\t\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener(settings, node, {}, column, callback);\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'order.fixed()', function ( set ) {\n\t\tif ( ! set ) {\n\t\t\tvar ctx = this.context;\n\t\t\tvar fixed = ctx.length ?\n\t\t\t\tctx[0].aaSortingFixed :\n\t\t\t\tundefined;\n\t\n\t\t\treturn Array.isArray( fixed ) ?\n\t\t\t\t{ pre: fixed } :\n\t\t\t\tfixed;\n\t\t}\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t\t} );\n\t} );\n\t\n\t\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\t\n\t\tif ( ! dir ) {\n\t\t\treturn this.iterator( 'column', function ( settings, idx ) {\n\t\t\t\tvar sort = _fnSortFlatten( settings );\n\t\n\t\t\t\tfor ( var i=0, iLen=sort.length ; i<iLen ; i++ ) {\n\t\t\t\t\tif ( sort[i].col === idx ) {\n\t\t\t\t\t\treturn sort[i].dir;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn null;\n\t\t\t}, 1 );\n\t\t}\n\t\telse {\n\t\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\t\tsettings.aaSorting = that[i].map( function (col) {\n\t\t\t\t\treturn [ col, dir ];\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t} );\n\t\n\t_api_registerPlural('columns().orderable()', 'column().orderable()', function ( directions ) {\n\t\treturn this.iterator( 'column', function ( settings, idx ) {\n\t\t\tvar col = settings.aoColumns[idx];\n\t\n\t\t\treturn directions ?\n\t\t\t\tcol.asSorting :\n\t\t\t\tcol.bSortable;\n\t\t}, 1 );\n\t} );\n\t\n\t\n\t_api_register( 'processing()', function ( show ) {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t_fnProcessingDisplay( ctx, show );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\t\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.search :\n\t\t\t\tundefined;\n\t\t}\n\t\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif (typeof regex === 'object') {\n\t\t\t\t// New style options to pass to the search builder\n\t\t\t\t_fnFilterComplete( settings, $.extend( settings.oPreviousSearch, regex, {\n\t\t\t\t\tsearch: input\n\t\t\t\t} ) );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compat for the old options\n\t\t\t\t_fnFilterComplete( settings, $.extend( settings.oPreviousSearch, {\n\t\t\t\t\tsearch: input,\n\t\t\t\t\tregex:  regex === null ? false : regex,\n\t\t\t\t\tsmart:  smart === null ? true  : smart,\n\t\t\t\t\tcaseInsensitive: caseInsen === null ? true : caseInsen\n\t\t\t\t} ) );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t_api_register( 'search.fixed()', function ( name, search ) {\n\t\tvar ret = this.iterator( true, 'table', function ( settings ) {\n\t\t\tvar fixed = settings.searchFixed;\n\t\n\t\t\tif (! name) {\n\t\t\t\treturn Object.keys(fixed);\n\t\t\t}\n\t\t\telse if (search === undefined) {\n\t\t\t\treturn fixed[name];\n\t\t\t}\n\t\t\telse if (search === null) {\n\t\t\t\tdelete fixed[name];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfixed[name] = search;\n\t\t\t}\n\t\n\t\t\treturn this;\n\t\t} );\n\t\n\t\treturn name !== undefined && search === undefined\n\t\t\t? ret[0]\n\t\t\t: ret;\n\t} );\n\t\n\t_api_registerPlural(\n\t\t'columns().search()',\n\t\t'column().search()',\n\t\tfunction ( input, regex, smart, caseInsen ) {\n\t\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\t\tvar preSearch = settings.aoPreSearchCols;\n\t\n\t\t\t\tif ( input === undefined ) {\n\t\t\t\t\t// get\n\t\t\t\t\treturn preSearch[ column ].search;\n\t\t\t\t}\n\t\n\t\t\t\t// set\n\t\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tif (typeof regex === 'object') {\n\t\t\t\t\t// New style options to pass to the search builder\n\t\t\t\t\t$.extend( preSearch[ column ], regex, {\n\t\t\t\t\t\tsearch: input\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Old style (with not all options available)\n\t\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\t\tsearch: input,\n\t\t\t\t\t\tregex:  regex === null ? false : regex,\n\t\t\t\t\t\tsmart:  smart === null ? true  : smart,\n\t\t\t\t\t\tcaseInsensitive: caseInsen === null ? true : caseInsen\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\n\t\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t\t} );\n\t\t}\n\t);\n\t\n\t_api_register([\n\t\t\t'columns().search.fixed()',\n\t\t\t'column().search.fixed()'\n\t\t],\n\t\tfunction ( name, search ) {\n\t\t\tvar ret = this.iterator( true, 'column', function ( settings, colIdx ) {\n\t\t\t\tvar fixed = settings.aoColumns[colIdx].searchFixed;\n\t\n\t\t\t\tif (! name) {\n\t\t\t\t\treturn Object.keys(fixed);\n\t\t\t\t}\n\t\t\t\telse if (search === undefined) {\n\t\t\t\t\treturn fixed[name] || null;\n\t\t\t\t}\n\t\t\t\telse if (search === null) {\n\t\t\t\t\tdelete fixed[name];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfixed[name] = search;\n\t\t\t\t}\n\t\n\t\t\t\treturn this;\n\t\t\t} );\n\t\n\t\t\treturn name !== undefined && search === undefined\n\t\t\t\t? ret[0]\n\t\t\t\t: ret;\n\t\t}\n\t);\n\t/*\n\t * State API methods\n\t */\n\t\n\t_api_register( 'state()', function ( set, ignoreTime ) {\n\t\t// getter\n\t\tif ( ! set ) {\n\t\t\treturn this.context.length ?\n\t\t\t\tthis.context[0].oSavedState :\n\t\t\t\tnull;\n\t\t}\n\t\n\t\tvar setMutate = $.extend( true, {}, set );\n\t\n\t\t// setter\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ignoreTime !== false ) {\n\t\t\t\tsetMutate.time = +new Date() + 100;\n\t\t\t}\n\t\n\t\t\t_fnImplementState( settings, setMutate, function(){} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t// Save an empty object\n\t\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'state.loaded()', function () {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oLoadedState :\n\t\t\tnull;\n\t} );\n\t\n\t\n\t_api_register( 'state.save()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSaveState( settings );\n\t\t} );\n\t} );\n\t\n\t// Can be assigned in DateTable.use() - note luxon and moment vars are in helpers.js\n\tvar __bootstrap;\n\tvar __foundation;\n\t\n\t/**\n\t * Set the libraries that DataTables uses, or the global objects.\n\t * Note that the arguments can be either way around (legacy support)\n\t * and the second is optional. See docs.\n\t */\n\tDataTable.use = function (arg1, arg2) {\n\t\t// Reverse arguments for legacy support\n\t\tvar module = typeof arg1 === 'string'\n\t\t\t? arg2\n\t\t\t: arg1;\n\t\tvar type = typeof arg2 === 'string'\n\t\t\t? arg2\n\t\t\t: arg1;\n\t\n\t\t// Getter\n\t\tif (module === undefined && typeof type === 'string') {\n\t\t\tswitch (type) {\n\t\t\t\tcase 'lib':\n\t\t\t\tcase 'jq':\n\t\t\t\t\treturn $;\n\t\n\t\t\t\tcase 'win':\n\t\t\t\t\treturn window;\n\t\n\t\t\t\tcase 'datetime':\n\t\t\t\t\treturn DataTable.DateTime;\n\t\n\t\t\t\tcase 'luxon':\n\t\t\t\t\treturn __luxon;\n\t\n\t\t\t\tcase 'moment':\n\t\t\t\t\treturn __moment;\n\t\n\t\t\t\tcase 'bootstrap':\n\t\t\t\t\t// Use local if set, otherwise try window, which could be undefined\n\t\t\t\t\treturn __bootstrap || window.bootstrap;\n\t\n\t\t\t\tcase 'foundation':\n\t\t\t\t\t// Ditto\n\t\t\t\t\treturn __foundation || window.Foundation;\n\t\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\n\t\t// Setter\n\t\tif (type === 'lib' || type === 'jq' || (module && module.fn && module.fn.jquery)) {\n\t\t\t$ = module;\n\t\t}\n\t\telse if (type === 'win' || (module && module.document)) {\n\t\t\twindow = module;\n\t\t\tdocument = module.document;\n\t\t}\n\t\telse if (type === 'datetime' || (module && module.type === 'DateTime')) {\n\t\t\tDataTable.DateTime = module;\n\t\t}\n\t\telse if (type === 'luxon' || (module && module.FixedOffsetZone)) {\n\t\t\t__luxon = module;\n\t\t}\n\t\telse if (type === 'moment' || (module && module.isMoment)) {\n\t\t\t__moment = module;\n\t\t}\n\t\telse if (type === 'bootstrap' || (module && module.Modal && module.Modal.NAME === 'modal'))\n\t\t{\n\t\t\t// This is currently for BS5 only. BS3/4 attach to jQuery, so no need to use `.use()`\n\t\t\t__bootstrap = module;\n\t\t}\n\t\telse if (type === 'foundation' || (module && module.Reveal)) {\n\t\t\t__foundation = module;\n\t\t}\n\t}\n\t\n\t/**\n\t * CommonJS factory function pass through. This will check if the arguments\n\t * given are a window object or a jQuery object. If so they are set\n\t * accordingly.\n\t * @param {*} root Window\n\t * @param {*} jq jQUery\n\t * @returns {boolean} Indicator\n\t */\n\tDataTable.factory = function (root, jq) {\n\t\tvar is = false;\n\t\n\t\t// Test if the first parameter is a window object\n\t\tif (root && root.document) {\n\t\t\twindow = root;\n\t\t\tdocument = root.document;\n\t\t}\n\t\n\t\t// Test if the second parameter is a jQuery object\n\t\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t\t$ = jq;\n\t\t\tis = true;\n\t\t}\n\t\n\t\treturn is;\n\t}\n\t\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @param {string} [version2=current DataTables version] As above, but optional.\n\t *   If not given the current DataTables version will be used.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = function( version, version2 )\n\t{\n\t\tvar aThis = version2 ?\n\t\t\tversion2.split('.') :\n\t\t\tDataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\t\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\t\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\t\n\t\treturn true;\n\t};\n\t\n\t\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\t\n\t\tif ( table instanceof DataTable.Api ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\t\n\t\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\t\n\t\treturn is;\n\t};\n\t\n\t\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = function ( visible )\n\t{\n\t\tvar api = false;\n\t\n\t\tif ( $.isPlainObject( visible ) ) {\n\t\t\tapi = visible.api;\n\t\t\tvisible = visible.visible;\n\t\t}\n\t\n\t\tvar a = DataTable.settings\n\t\t\t.filter( function (o) {\n\t\t\t\treturn !visible || (visible && $(o.nTable).is(':visible')) \n\t\t\t\t\t? true\n\t\t\t\t\t: false;\n\t\t\t} )\n\t\t\t.map( function (o) {\n\t\t\t\treturn o.nTable;\n\t\t\t});\n\t\n\t\treturn api ?\n\t\t\tnew _Api( a ) :\n\t\t\ta;\n\t};\n\t\n\t\n\t/**\n\t * Convert from camel case parameters to Hungarian notation. This is made public\n\t * for the extensions to provide the same ability as DataTables core to accept\n\t * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n\t * parameters.\n\t *\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t */\n\tDataTable.camelToHungarian = _fnCamelToHungarian;\n\t\n\t\n\t\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\t\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\t\n\t\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\targs[0] = args[0].split( /\\s/ ).map( function ( e ) {\n\t\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\t\te+'.dt' :\n\t\t\t\t\te;\n\t\t\t\t} ).join( ' ' );\n\t\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'error()', function (msg) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLog( settings, 0, msg );\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\t\n\t\n\t_api_register( 'init()', function () {\n\t\tvar ctx = this.context;\n\t\treturn ctx.length ? ctx[0].oInit : null;\n\t} );\n\t\n\t\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'trigger()', function ( name, args, bubbles ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _fnCallbackFire( settings, null, name, args, bubbles );\n\t\t} ).flatten();\n\t} );\n\t\n\t\n\t_api_register( 'ready()', function ( fn ) {\n\t\tvar ctx = this.context;\n\t\n\t\t// Get status of first table\n\t\tif (! fn) {\n\t\t\treturn ctx.length\n\t\t\t\t? (ctx[0]._bInitComplete || false)\n\t\t\t\t: null;\n\t\t}\n\t\n\t\t// Function to run either once the table becomes ready or\n\t\t// immediately if it is already ready.\n\t\treturn this.tables().every(function () {\n\t\t\tvar api = this;\n\t\n\t\t\tif (this.context[0]._bInitComplete) {\n\t\t\t\tfn.call(api);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.on('init.dt.DT', function () {\n\t\t\t\t\tfn.call(api);\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\t\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = settings.aoData.map( function (r) { return r ? r.nTr : null; } );\n\t\t\tvar orderClasses = classes.order;\n\t\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\t\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings], true );\n\t\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\t\n\t\t\t// Container width change listener\n\t\t\tif (settings.resizeObserver) {\n\t\t\t\tsettings.resizeObserver.disconnect();\n\t\t\t}\n\t\n\t\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t\t// for removing them\n\t\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t\t$(window).off('.DT-'+settings.sInstance);\n\t\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').detach();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\t\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').detach();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\t\n\t\t\t// Clean up the header / footer\n\t\t\tcleanHeader(thead, 'header');\n\t\t\tcleanHeader(tfoot, 'footer');\n\t\t\tsettings.colgroup.remove();\n\t\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\t\n\t\t\t$(jqTable).find('th, td').removeClass(\n\t\t\t\t$.map(DataTable.ext.type.className, function (v) {\n\t\t\t\t\treturn v;\n\t\t\t\t}).join(' ')\n\t\t\t);\n\t\n\t\t\t$('th, td', thead)\n\t\t\t\t.removeClass(\n\t\t\t\t\torderClasses.none + ' ' +\n\t\t\t\t\torderClasses.canAsc + ' ' +\n\t\t\t\t\torderClasses.canDesc + ' ' +\n\t\t\t\t\torderClasses.isAsc + ' ' +\n\t\t\t\t\torderClasses.isDesc\n\t\t\t\t)\n\t\t\t\t.css('width', '')\n\t\t\t\t.removeAttr('aria-sort');\n\t\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\t\n\t\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\t\tvar insertBefore = settings.nTableWrapper.nextSibling;\n\t\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\t\tjqTable[ removedMethod ]();\n\t\t\tjqWrapper[ removedMethod ]();\n\t\n\t\t\t// If we need to reattach the table to the document\n\t\t\tif ( ! remove && orig ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, insertBefore );\n\t\n\t\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t\t// so we can restore directly to that\n\t\t\t\tjqTable\n\t\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t\t.removeClass( classes.table );\n\t\t\t}\n\t\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = DataTable.settings.indexOf(settings);\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\t\n\t\n\t// Add the `every()` method for rows, columns and cells in a compact form\n\t$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t\t_api_register( type+'s().every()', function ( fn ) {\n\t\t\tvar opts = this.selector.opts;\n\t\t\tvar api = this;\n\t\t\tvar inst;\n\t\t\tvar counter = 0;\n\t\n\t\t\treturn this.iterator( 'every', function ( settings, selectedIdx, tableIdx ) {\n\t\t\t\tinst = api[ type ](selectedIdx, opts);\n\t\n\t\t\t\tif (type === 'cell') {\n\t\t\t\t\tfn.call(inst, inst[0][0].row, inst[0][0].column, tableIdx, counter);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tfn.call(inst, selectedIdx, tableIdx, counter);\n\t\t\t\t}\n\t\n\t\t\t\tcounter++;\n\t\t\t} );\n\t\t} );\n\t} );\n\t\n\t\n\t// i18n method for extensions to be able to use the language object from the\n\t// DataTable\n\t_api_register( 'i18n()', function ( token, def, plural ) {\n\t\tvar ctx = this.context[0];\n\t\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\t\n\t\tif ( resolved === undefined ) {\n\t\t\tresolved = def;\n\t\t}\n\t\n\t\tif ( $.isPlainObject( resolved ) ) {\n\t\t\tresolved = plural !== undefined && resolved[ plural ] !== undefined\n\t\t\t\t? resolved[ plural ]\n\t\t\t\t: plural === false\n\t\t\t\t\t? resolved\n\t\t\t\t\t: resolved._;\n\t\t}\n\t\n\t\treturn typeof resolved === 'string'\n\t\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t\t: resolved;\n\t} );\n\t\n\t// Needed for header and footer, so pulled into its own function\n\tfunction cleanHeader(node, className) {\n\t\t$(node).find('.dt-column-order').remove();\n\t\t$(node).find('.dt-column-title').each(function () {\n\t\t\tvar title = $(this).html();\n\t\t\t$(this).parent().parent().append(title);\n\t\t\t$(this).remove();\n\t\t});\n\t\t$(node).find('div.dt-column-' + className).remove();\n\t\n\t\t$('th, td', node).removeAttr('data-dt-column');\n\t}\n\t\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See https://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"2.3.8\";\n\t\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\t\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to whether or not the filtering should be case-insensitive\n\t\t */\n\t\t\"caseInsensitive\": true,\n\t\n\t\t/**\n\t\t * Applied search term\n\t\t */\n\t\t\"search\": \"\",\n\t\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t */\n\t\t\"regex\": false,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t */\n\t\t\"smart\": true,\n\t\n\t\t/**\n\t\t * Flag to indicate if DataTables should only trigger a search when\n\t\t * the return key is pressed.\n\t\t */\n\t\t\"return\": false\n\t};\n\t\n\t\n\t\n\t\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t */\n\t\t\"nTr\": null,\n\t\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t */\n\t\t\"anCells\": null,\n\t\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t */\n\t\t\"_aData\": [],\n\t\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t */\n\t\t\"_aSortData\": null,\n\t\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t */\n\t\t\"_aFilterData\": null,\n\t\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t */\n\t\t\"_sFilterRow\": null,\n\t\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t */\n\t\t\"src\": null,\n\t\n\t\t/**\n\t\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t\t * object, but want to know the index\n\t\t */\n\t\t\"idx\": -1,\n\t\n\t\t/**\n\t\t * Cached display value\n\t\t */\n\t\tdisplayData: null\n\t};\n\t\n\t\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * Column index.\n\t\t */\n\t\t\"idx\": null,\n\t\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t */\n\t\t\"aDataSort\": null,\n\t\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t */\n\t\t\"asSorting\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t */\n\t\t\"bSearchable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t */\n\t\t\"bSortable\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t */\n\t\t\"bVisible\": null,\n\t\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t */\n\t\t\"_sManualType\": null,\n\t\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t */\n\t\t\"fnGetData\": null,\n\t\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t */\n\t\t\"fnSetData\": null,\n\t\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t */\n\t\t\"sClass\": null,\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t */\n\t\t\"sContentPadding\": null,\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t */\n\t\t\"sName\": null,\n\t\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\t\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t */\n\t\t\"sSortingClass\": null,\n\t\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\t/**\n\t\t * Width of the column\n\t\t */\n\t\t\"sWidth\": null,\n\t\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t */\n\t\t\"sWidthOrig\": null,\n\t\n\t\t/** Cached longest strings from a column */\n\t\twideStrings: null,\n\t\n\t\t/**\n\t\t * Store for named searches\n\t\t */\n\t\tsearchFixed: null\n\t};\n\t\n\t\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a JavaScript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would add around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit).\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\t\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in JavaScript, for\n\t\t * example with a custom Ajax call.\n\t\t */\n\t\t\"aaData\": null,\n\t\n\t\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\t\n\t\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use JavaScript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t */\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\t\n\t\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t */\n\t\t\"aoColumns\": null,\n\t\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\t\n\t\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t */\n\t\t\"aoSearchCols\": [],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t */\n\t\t\"bAutoWidth\": true,\n\t\n\t\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t */\n\t\t\"bDeferRender\": true,\n\t\n\t\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t */\n\t\t\"bDestroy\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t */\n\t\t\"bFilter\": true,\n\t\n\t\t/**\n\t\t * Used only for compatibility with DT1\n\t\t * @deprecated\n\t\t */\n\t\t\"bInfo\": true,\n\t\n\t\t/**\n\t\t * Used only for compatibility with DT1\n\t\t * @deprecated\n\t\t */\n\t\t\"bLengthChange\": true,\n\t\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t */\n\t\t\"bPaginate\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t */\n\t\t\"bProcessing\": false,\n\t\n\t\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t */\n\t\t\"bRetrieve\": false,\n\t\n\t\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\t\n\t\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t */\n\t\t\"bServerSide\": false,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t */\n\t\t\"bSort\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t */\n\t\t\"bSortMulti\": true,\n\t\n\t\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\n\t\t/** Specify which row is the title row in the header. Replacement for bSortCellsTop */\n\t\ttitleRow: null,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t */\n\t\t\"bSortClasses\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display will match what thy had previously set up.\n\t\t */\n\t\t\"bStateSave\": false,\n\t\n\t\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sThousands\n\t\t\t);\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t */\n\t\t\"fnInitComplete\": null,\n\t\n\t\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t */\n\t\t\"fnRowCallback\": null,\n\t\n\t\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\t\n\t\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\t\tJSON.stringify( data )\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\t// noop\n\t\t\t}\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\t\n\t\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\t\n\t\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\t\n\t\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\t\n\t\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be sorted\n\t\t\t\t */\n\t\t\t\t\"orderable\": \": Activate to sort\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column is currently being sorted\n\t\t\t\t */\n\t\t\t\t\"orderableReverse\": \": Activate to invert sorting\",\n\t\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column is currently being \n\t\t\t\t * sorted and next step is to remove sorting\n\t\t\t\t */\n\t\t\t\t\"orderableRemove\": \": Activate to remove sorting\",\n\t\n\t\t\t\tpaginate: {\n\t\t\t\t\tfirst: 'First',\n\t\t\t\t\tlast: 'Last',\n\t\t\t\t\tnext: 'Next',\n\t\t\t\t\tprevious: 'Previous',\n\t\t\t\t\tnumber: ''\n\t\t\t\t}\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Label and character for first page button (\u00AB)\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"\\u00AB\",\n\t\n\t\t\t\t/**\n\t\t\t\t * Last page button (\u00BB)\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"\\u00BB\",\n\t\n\t\t\t\t/**\n\t\t\t\t * Next page button (\u203A)\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"\\u203A\",\n\t\n\t\t\t\t/**\n\t\t\t\t * Previous page button (\u2039)\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"\\u2039\",\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Plural object for the data type the table is showing\n\t\t\t */\n\t\t\tentries: {\n\t\t\t\t_: \"entries\",\n\t\t\t\t1: \"entry\"\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * Page length options\n\t\t\t */\n\t\t\tlengthLabels: {\n\t\t\t\t'-1': 'All'\n\t\t\t},\n\t\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"No data available in table\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t */\n\t\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ _ENTRIES-TOTAL_\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 _ENTRIES-TOTAL_\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total _ENTRIES-MAX_)\",\n\t\n\t\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * This decimal place operator is a little different from the other\n\t\t\t * language options since DataTables doesn't output floating point\n\t\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t\t * what this parameter does is modify the sort methods of the table so\n\t\t\t * that numbers which are in a format which has a character other than\n\t\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t\t *\n\t\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t\t * the same table and still be sortable, the table must be consistent.\n\t\t\t * However, multiple different tables on the page can use different\n\t\t\t * decimal place characters.\n\t\t\t */\n\t\t\t\"sDecimal\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t\t * used to format large numbers that are used in the table information.\n\t\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t */\n\t\t\t\"sThousands\": \",\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"_MENU_ _ENTRIES_ per page\",\n\t\n\t\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"Loading...\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t */\n\t\t\t\"sProcessing\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t */\n\t\t\t\"sSearch\": \"Search:\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t\t *  @type string\n\t\t\t *  @default \n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t\t */\n\t\t\t\"sSearchPlaceholder\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\t\n\t\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"No matching records found\"\n\t\t},\n\t\n\t\n\t\t/** The initial data order is reversed when `desc` ordering */\n\t\torderDescReverse: true,\n\t\n\t\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\t\n\t\n\t\t/**\n\t\t * Table and control layout. This replaces the legacy `dom` option.\n\t\t */\n\t\tlayout: {\n\t\t\ttopStart: 'pageLength',\n\t\t\ttopEnd: 'search',\n\t\t\tbottomStart: 'info',\n\t\t\tbottomEnd: 'paging'\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Legacy DOM layout option\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\n\t\t/**\n\t\t * Search delay option. This will throttle full table searches that use the\n\t\t * DataTables provided search input element (it does not effect calls to\n\t\t * `dt-api search()`, providing a delay before the search is made.\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\n\t\t/**\n\t\t * DataTables features six different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `numbers` - Page number buttons only\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t\t */\n\t\t\"sPaginationType\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t */\n\t\t\"sScrollX\": \"\",\n\t\n\t\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t */\n\t\t\"sScrollY\": \"\",\n\t\n\t\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\t\n\t\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t */\n\t\t\"renderer\": null,\n\t\n\t\n\t\t/**\n\t\t * Set the data property name that DataTables should use to get a row's id\n\t\t * to set as the `id` property in the node.\n\t\t */\n\t\t\"rowId\": \"DT_RowId\",\n\t\n\t\n\t\t/**\n\t\t * Caption value\n\t\t */\n\t\t\"caption\": null,\n\t\n\t\n\t\t/**\n\t\t * For server-side processing - use the data from the DOM for the first draw\n\t\t */\n\t\tiDeferLoading: null,\n\t\n\t\t/** Event listeners */\n\t\ton: null,\n\t\n\t\t/** Title wrapper element type */\n\t\tcolumnTitleTag: 'span'\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults );\n\t\n\t\n\t\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\t\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\t\n\t\tariaTitle: '',\n\t\n\t\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc', '' ],\n\t\n\t\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t */\n\t\t\"bSearchable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t */\n\t\t\"bSortable\": true,\n\t\n\t\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t */\n\t\t\"bVisible\": true,\n\t\n\t\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\t\n\t\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted JavaScript notation. Just as you use a `.` in\n\t\t *      JavaScript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t */\n\t\t\"mData\": null,\n\t\n\t\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted JavaScript notation. Just as you use a `.` in\n\t\t *      JavaScript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t */\n\t\t\"mRender\": null,\n\t\n\t\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t */\n\t\t\"sCellType\": \"td\",\n\t\n\t\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t */\n\t\t\"sClass\": \"\",\n\t\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t */\n\t\t\"sDefaultContent\": null,\n\t\n\t\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t */\n\t\t\"sName\": \"\",\n\t\n\t\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\t\n\t\n\t\t/**\n\t\t * The title of this column.\n\t\t */\n\t\t\"sTitle\": null,\n\t\n\t\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by JavaScript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t */\n\t\t\"sType\": null,\n\t\n\t\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\t\n\t_fnHungarianMap( DataTable.defaults.column );\n\t\n\t\n\t\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t */\n\t\t\"oFeatures\": {\n\t\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\t\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and JavaScript source data, but makes no\n\t\t\t * difference at all for DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\t\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\t\n\t\t\t/**\n\t\t\t * Used only for compatibility with DT1\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\t\"bInfo\": true,\n\t\n\t\t\t/**\n\t\t\t * Used only for compatibility with DT1\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\t\"bLengthChange\": true,\n\t\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\t\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\t\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\t\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bSort\": null,\n\t\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\t\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\t\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\t\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\t\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"sX\": null,\n\t\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\t\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Language information for the table.\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\t\n\t\t/**\n\t\t * Browser support parameters\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false,\n\t\n\t\t\t/**\n\t\t\t * Browser scrollbar width\n\t\t\t */\n\t\t\t\"barWidth\": 0\n\t\t},\n\t\n\t\n\t\t\"ajax\": null,\n\t\n\t\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t */\n\t\t\"aanFeatures\": [],\n\t\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t */\n\t\t\"aoData\": [],\n\t\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t */\n\t\t\"aiDisplay\": [],\n\t\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\t\n\t\t/**\n\t\t * Map of row ids to data indexes\n\t\t */\n\t\t\"aIds\": {},\n\t\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t */\n\t\t\"aoColumns\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's header\n\t\t */\n\t\t\"aoHeader\": [],\n\t\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t */\n\t\t\"aoFooter\": [],\n\t\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\t\n\t\t/**\n\t\t * Store for named searches\n\t\t */\n\t\tsearchFixed: {},\n\t\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\t\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"aaSorting\": null,\n\t\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\t\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\t\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t */\n\t\t\"aoRowCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\t\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\t\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t */\n\t\t\"aoInitComplete\": [],\n\t\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\t\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\t\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t */\n\t\t\"sTableId\": \"\",\n\t\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t */\n\t\t\"nTable\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t */\n\t\t\"nTHead\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t */\n\t\t\"nTFoot\": null,\n\t\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t */\n\t\t\"nTBody\": null,\n\t\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t */\n\t\t\"nTableWrapper\": null,\n\t\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t */\n\t\t\"bInitialised\": false,\n\t\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t */\n\t\t\"aoOpenRows\": [],\n\t\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"sDom\": null,\n\t\n\t\t/**\n\t\t * Search delay (in mS)\n\t\t */\n\t\t\"searchDelay\": null,\n\t\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\t\n\t\t/**\n\t\t * Number of paging controls on the page. Only used for backwards compatibility\n\t\t */\n\t\tpagingControls: 0,\n\t\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"iStateDuration\": 0,\n\t\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t */\n\t\t\"aoStateSave\": [],\n\t\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t */\n\t\t\"aoStateLoad\": [],\n\t\n\t\t/**\n\t\t * State that was saved. Useful for back reference\n\t\t */\n\t\t\"oSavedState\": null,\n\t\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t */\n\t\t\"oLoadedState\": null,\n\t\n\t\t/**\n\t\t * Note if draw should be blocked while getting data\n\t\t */\n\t\t\"bAjaxDataGet\": true,\n\t\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t */\n\t\t\"jqXHR\": null,\n\t\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t */\n\t\t\"json\": undefined,\n\t\n\t\t/**\n\t\t * Data submitted as part of the last Ajax request\n\t\t */\n\t\t\"oAjaxData\": undefined,\n\t\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"sServerMethod\": null,\n\t\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\t\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"aLengthMenu\": null,\n\t\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t */\n\t\t\"iDraw\": 0,\n\t\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t */\n\t\t\"bDrawing\": false,\n\t\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t */\n\t\t\"iDrawError\": -1,\n\t\n\t\t/**\n\t\t * Paging display length\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\t\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\t\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\t\n\t\t/**\n\t\t * The classes to use for the table\n\t\t */\n\t\t\"oClasses\": {},\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\t\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\t\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column. Replaced by titleRow\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\t\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t */\n\t\t\"oInit\": null,\n\t\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\t\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\t\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\t\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t */\n\t\t\"oInstance\": null,\n\t\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t */\n\t\t\"sInstance\": null,\n\t\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\t\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\t\n\t\t/**\n\t\t * Last applied sort\n\t\t */\n\t\t\"aLastSort\": [],\n\t\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t */\n\t\t\"oPlugins\": {},\n\t\n\t\t/**\n\t\t * Function used to get a row's id from the row's data\n\t\t */\n\t\t\"rowIdFn\": null,\n\t\n\t\t/**\n\t\t * Data location where to store a row's id\n\t\t */\n\t\t\"rowId\": null,\n\t\n\t\tcaption: '',\n\t\n\t\tcaptionNode: null,\n\t\n\t\tcolgroup: null,\n\t\n\t\t/** Delay loading of data */\n\t\tdeferLoading: null,\n\t\n\t\t/** Allow auto type detection */\n\t\ttypeDetect: true,\n\t\n\t\t/** ResizeObserver for the container div */\n\t\tresizeObserver: null,\n\t\n\t\t/** Keep a record of the last size of the container, so we can skip duplicates */\n\t\tcontainerWidth: -1,\n\t\n\t\t/** Reverse the initial order of the data set on desc ordering */\n\t\torderDescReverse: null,\n\t\n\t\t/** Show / hide ordering indicators in headers */\n\t\torderIndicators: true,\n\t\n\t\t/** Default ordering listener */\n\t\torderHandler: true,\n\t\n\t\t/** Title row indicator */\n\t\ttitleRow: null,\n\t\n\t\t/** Title wrapper element type */\n\t\tcolumnTitleTag: 'span'\n\t};\n\t\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\t\n\t\n\tvar extPagination = DataTable.ext.pager;\n\t\n\t// Paging buttons configuration\n\t$.extend( extPagination, {\n\t\tsimple: function () {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\t\n\t\tfull: function () {\n\t\t\treturn [ 'first', 'previous', 'next', 'last' ];\n\t\t},\n\t\n\t\tnumbers: function () {\n\t\t\treturn [ 'numbers' ];\n\t\t},\n\t\n\t\tsimple_numbers: function () {\n\t\t\treturn [ 'previous', 'numbers', 'next' ];\n\t\t},\n\t\n\t\tfull_numbers: function () {\n\t\t\treturn [ 'first', 'previous', 'numbers', 'next', 'last' ];\n\t\t},\n\t\n\t\tfirst_last: function () {\n\t\t\treturn ['first', 'last'];\n\t\t},\n\t\n\t\tfirst_last_numbers: function () {\n\t\t\treturn ['first', 'numbers', 'last'];\n\t\t},\n\t\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _pagingNumbers,\n\t\n\t\t// Number of number buttons - legacy, use `numbers` option for paging feature\n\t\tnumbers_length: 7\n\t} );\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpagingButton: {\n\t\t\t_: function (settings, buttonType, content, active, disabled) {\n\t\t\t\tvar classes = settings.oClasses.paging;\n\t\t\t\tvar btnClasses = [classes.button];\n\t\t\t\tvar btn;\n\t\n\t\t\t\tif (active) {\n\t\t\t\t\tbtnClasses.push(classes.active);\n\t\t\t\t}\n\t\n\t\t\t\tif (disabled) {\n\t\t\t\t\tbtnClasses.push(classes.disabled)\n\t\t\t\t}\n\t\n\t\t\t\tif (buttonType === 'ellipsis') {\n\t\t\t\t\tbtn = $('<span class=\"ellipsis\"></span>').html(content)[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tbtn = $('<button>', {\n\t\t\t\t\t\tclass: btnClasses.join(' '),\n\t\t\t\t\t\trole: 'link',\n\t\t\t\t\t\ttype: 'button'\n\t\t\t\t\t}).html(content);\n\t\t\t\t}\n\t\n\t\t\t\treturn {\n\t\t\t\t\tdisplay: btn,\n\t\t\t\t\tclicker: btn\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\tpagingContainer: {\n\t\t\t_: function (settings, buttons) {\n\t\t\t\t// No wrapping element - just append directly to the host\n\t\t\t\treturn buttons;\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t// Common function to remove new lines, strip HTML and diacritic control\n\tvar _filterString = function (stripHtml, normalize) {\n\t\treturn function (str) {\n\t\t\tif (_empty(str) || typeof str !== 'string') {\n\t\t\t\treturn str;\n\t\t\t}\n\t\n\t\t\tstr = str.replace( _re_new_lines, \" \" );\n\t\n\t\t\tif (stripHtml) {\n\t\t\t\tstr = _stripHtml(str);\n\t\t\t}\n\t\n\t\t\tif (normalize) {\n\t\t\t\tstr = _normalize(str, false);\n\t\t\t}\n\t\n\t\t\treturn str;\n\t\t};\n\t}\n\t\n\t/*\n\t * Public helper functions. These aren't used internally by DataTables, or\n\t * called by any of the options passed into DataTables, but they can be used\n\t * externally by developers working with DataTables. They are helper functions\n\t * to make working with DataTables a little bit easier.\n\t */\n\t\n\t/**\n\t * Common logic for moment, luxon or a date action.\n\t *\n\t * Happens after __mldObj, so don't need to call `resolveWindowsLibs` again\n\t */\n\tfunction __mld( dtLib, momentFn, luxonFn, dateFn, arg1 ) {\n\t\tif (__moment) {\n\t\t\treturn dtLib[momentFn]( arg1 );\n\t\t}\n\t\telse if (__luxon) {\n\t\t\treturn dtLib[luxonFn]( arg1 );\n\t\t}\n\t\t\n\t\treturn dateFn ? dtLib[dateFn]( arg1 ) : dtLib;\n\t}\n\t\n\t\n\tvar __mlWarning = false;\n\tvar __luxon; // Can be assigned in DateTable.use()\n\tvar __moment; // Can be assigned in DateTable.use()\n\tvar __reIsoTimezone = /[T\\s]\\d{2}.*?(Z|[+-]\\d{2}(?::?\\d{2})?)$/;\n\t\n\t/**\n\t * \n\t */\n\tfunction resolveWindowLibs() {\n\t\tif (window.luxon && ! __luxon) {\n\t\t\t__luxon = window.luxon;\n\t\t}\n\t\t\n\t\tif (window.moment && ! __moment) {\n\t\t\t__moment = window.moment;\n\t\t}\n\t}\n\t\n\tfunction __mldObj (d, format, locale) {\n\t\tvar dt;\n\t\n\t\tresolveWindowLibs();\n\t\n\t\tif (__moment) {\n\t\t\tdt = __moment( d, format, locale, true );\n\t\n\t\t\tif (! dt.isValid()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\telse if (__luxon) {\n\t\t\tdt = format && typeof d === 'string'\n\t\t\t\t? __luxon.DateTime.fromFormat( d, format )\n\t\t\t\t: __luxon.DateTime.fromISO( d );\n\t\n\t\t\tif (! dt.isValid) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\n\t\t\tdt = dt.setLocale(locale);\n\t\t}\n\t\telse if (! format) {\n\t\t\t// No format given, must be ISO\n\t\t\tdt = new Date(d);\n\t\t}\n\t\telse {\n\t\t\tif (! __mlWarning) {\n\t\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t\t}\n\t\n\t\t\t__mlWarning = true;\n\t\t}\n\t\n\t\treturn dt;\n\t}\n\t\n\t// Wrapper for date, datetime and time which all operate the same way with the exception of\n\t// the output string for auto locale support\n\tfunction __mlHelper (localeString) {\n\t\treturn function ( from, to, locale, def ) {\n\t\t\t// Luxon and Moment support\n\t\t\t// Argument shifting\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = null; // means toLocaleString\n\t\t\t\tfrom = null; // means iso8601\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 ) {\n\t\t\t\tlocale = 'en';\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\t\telse if ( arguments.length === 2 ) {\n\t\t\t\tlocale = to;\n\t\t\t\tto = from;\n\t\t\t\tfrom = null;\n\t\t\t}\n\t\n\t\t\tvar typeName = 'datetime' + (to ? '-' + to : '');\n\t\n\t\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\t\tif (! DataTable.ext.type.order[typeName + '-pre']) {\n\t\t\t\tDataTable.type(typeName, {\n\t\t\t\t\tdetect: function (d) {\n\t\t\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t\t},\n\t\t\t\t\torder: {\n\t\t\t\t\t\tpre: function (d) {\n\t\t\t\t\t\t\t// The renderer gives us Moment, Luxon or Date objects for the sorting, all of which have a\n\t\t\t\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\t\t\t\treturn d.valueOf();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tclassName: 'dt-right'\n\t\t\t\t});\n\t\t\t}\n\t\t\n\t\t\treturn function ( d, type ) {\n\t\t\t\t// Allow for a default value\n\t\t\t\tif (d === null || d === undefined) {\n\t\t\t\t\tif (def === '--now') {\n\t\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t\t// UTC\n\t\t\t\t\t\tvar local = new Date();\n\t\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\td = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'type') {\n\t\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\t\treturn typeName;\n\t\t\t\t}\n\t\n\t\t\t\tif (d === '') {\n\t\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t\t}\n\t\n\t\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\t// Determine if there is a timezone. If there is, we want to reuse\n\t\t\t\t// it for the output, so the timezone doesn't change between the\n\t\t\t\t// input and output.\n\t\t\t\tlet options = {};\n\t\t\t\tlet tzMatch = typeof d === 'string' ? d.match(__reIsoTimezone) : null;\n\t\n\t\t\t\tif (tzMatch) {\n\t\t\t\t\toptions.timeZone = tzMatch[1] === 'Z' ? 'UTC' : tzMatch[1];\n\t\t\t\t}\n\t\n\t\t\t\tvar dt = __mldObj(d, from, locale);\n\t\n\t\t\t\tif (dt === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\t\n\t\t\t\tif (type === 'sort') {\n\t\t\t\t\treturn dt;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar formatted = to === null\n\t\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString](\n\t\t\t\t\t\tnavigator.language,\n\t\t\t\t\t\toptions\n\t\t\t\t\t)\n\t\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\t\n\t\t\t\t// XSS protection\n\t\t\t\treturn type === 'display' ?\n\t\t\t\t\t_escapeHtml( formatted ) :\n\t\t\t\t\tformatted;\n\t\t\t};\n\t\t}\n\t}\n\t\n\t// Based on locale, determine standard number formatting\n\t// Fallback for legacy browsers is US English\n\tvar __thousands = ',';\n\tvar __decimal = '.';\n\t\n\tif (window.Intl !== undefined) {\n\t\ttry {\n\t\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\t\n\t\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\t\tif (num[i].type === 'group') {\n\t\t\t\t\t__thousands = num[i].value;\n\t\t\t\t}\n\t\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t\t__decimal = num[i].value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {\n\t\t\t// noop\n\t\t}\n\t}\n\t\n\t// Formatted date time detection - use by declaring the formats you are going to use\n\tDataTable.datetime = function ( format, locale ) {\n\t\tvar typeName = 'datetime-' + format;\n\t\n\t\tif (! locale) {\n\t\t\tlocale = 'en';\n\t\t}\n\t\n\t\tif (! DataTable.ext.type.order[typeName]) {\n\t\t\tDataTable.type(typeName, {\n\t\t\t\tdetect: function (d) {\n\t\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t\t},\n\t\t\t\torder: {\n\t\t\t\t\tpre: function (d) {\n\t\t\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclassName: 'dt-right'\n\t\t\t});\n\t\t}\n\t}\n\t\n\t/**\n\t * Helpers for `columns.render`.\n\t *\n\t * The options defined here can be used with the `columns.render` initialisation\n\t * option to provide a display renderer. The following functions are defined:\n\t *\n\t * * `moment` - Uses the MomentJS library to convert from a given format into another.\n\t * This renderer has three overloads:\n\t *   * 1 parameter:\n\t *     * `string` - Format to convert to (assumes input is ISO8601 and locale is `en`)\n\t *   * 2 parameters:\n\t *     * `string` - Format to convert from\n\t *     * `string` - Format to convert to. Assumes `en` locale\n\t *   * 3 parameters:\n\t *     * `string` - Format to convert from\n\t *     * `string` - Format to convert to\n\t *     * `string` - Locale\n\t * * `number` - Will format numeric data (defined by `columns.data`) for\n\t *   display, retaining the original unformatted data for sorting and filtering.\n\t *   It takes 5 parameters:\n\t *   * `string` - Thousands grouping separator\n\t *   * `string` - Decimal point indicator\n\t *   * `integer` - Number of decimal points to show\n\t *   * `string` (optional) - Prefix.\n\t *   * `string` (optional) - Postfix (/suffix).\n\t * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n\t *   parameters.\n\t *\n\t * @example\n\t *   // Column definition using the number renderer\n\t *   {\n\t *     data: \"salary\",\n\t *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n\t *   }\n\t *\n\t * @namespace\n\t */\n\tDataTable.render = {\n\t\tdate: __mlHelper('toLocaleDateString'),\n\t\tdatetime: __mlHelper('toLocaleString'),\n\t\ttime: __mlHelper('toLocaleTimeString'),\n\t\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t\t// Auto locale detection\n\t\t\tif (thousands === null || thousands === undefined) {\n\t\t\t\tthousands = __thousands;\n\t\t\t}\n\t\n\t\t\tif (decimal === null || decimal === undefined) {\n\t\t\t\tdecimal = __decimal;\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tdisplay: function ( d ) {\n\t\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\t\tvar flo = parseFloat( d );\n\t\t\t\t\tvar abs = Math.abs(flo);\n\t\n\t\t\t\t\t// Scientific notation for large and small numbers\n\t\t\t\t\tif (abs >= 100000000000 || (abs < 0.0001 && abs !== 0) ) {\n\t\t\t\t\t\tvar exp = flo.toExponential(precision).split(/e\\+?/);\n\t\t\t\t\t\treturn exp[0] + ' x 10<sup>' + exp[1] + '</sup>';\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t\t// be a number after all)\n\t\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\t\treturn _escapeHtml( d );\n\t\t\t\t\t}\n\t\n\t\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\t\td = Math.abs( flo );\n\t\n\t\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t\t'';\n\t\n\t\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\t\tnegative = '';\n\t\t\t\t\t}\n\t\n\t\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t\t) +\n\t\t\t\t\t\tfloatPart +\n\t\t\t\t\t\t(postfix||'');\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\n\t\ttext: function () {\n\t\t\treturn {\n\t\t\t\tdisplay: _escapeHtml,\n\t\t\t\tfilter: _escapeHtml\n\t\t\t};\n\t\t}\n\t};\n\t\n\t\n\tvar _extTypes = DataTable.ext.type;\n\t\n\t// Get / set type\n\tDataTable.type = function (name, prop, val) {\n\t\tif (! prop) {\n\t\t\treturn {\n\t\t\t\tclassName: _extTypes.className[name],\n\t\t\t\tdetect: _extTypes.detect.find(function (fn) {\n\t\t\t\t\treturn fn._name === name;\n\t\t\t\t}),\n\t\t\t\torder: {\n\t\t\t\t\tpre: _extTypes.order[name + '-pre'],\n\t\t\t\t\tasc: _extTypes.order[name + '-asc'],\n\t\t\t\t\tdesc: _extTypes.order[name + '-desc']\n\t\t\t\t},\n\t\t\t\trender: _extTypes.render[name],\n\t\t\t\tsearch: _extTypes.search[name]\n\t\t\t};\n\t\t}\n\t\n\t\tvar setProp = function(prop, propVal) {\n\t\t\t_extTypes[prop][name] = propVal;\n\t\t};\n\t\tvar setDetect = function (detect) {\n\t\t\t// `detect` can be a function or an object - we set a name\n\t\t\t// property for either - that is used for the detection\n\t\t\tObject.defineProperty(detect, \"_name\", {value: name});\n\t\n\t\t\tvar idx = _extTypes.detect.findIndex(function (item) {\n\t\t\t\treturn item._name === name;\n\t\t\t});\n\t\n\t\t\tif (idx === -1) {\n\t\t\t\t_extTypes.detect.unshift(detect);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_extTypes.detect.splice(idx, 1, detect);\n\t\t\t}\n\t\t};\n\t\tvar setOrder = function (obj) {\n\t\t\t_extTypes.order[name + '-pre'] = obj.pre; // can be undefined\n\t\t\t_extTypes.order[name + '-asc'] = obj.asc; // can be undefined\n\t\t\t_extTypes.order[name + '-desc'] = obj.desc; // can be undefined\n\t\t};\n\t\n\t\t// prop is optional\n\t\tif (val === undefined) {\n\t\t\tval = prop;\n\t\t\tprop = null;\n\t\t}\n\t\n\t\tif (prop === 'className') {\n\t\t\tsetProp('className', val);\n\t\t}\n\t\telse if (prop === 'detect') {\n\t\t\tsetDetect(val);\n\t\t}\n\t\telse if (prop === 'order') {\n\t\t\tsetOrder(val);\n\t\t}\n\t\telse if (prop === 'render') {\n\t\t\tsetProp('render', val);\n\t\t}\n\t\telse if (prop === 'search') {\n\t\t\tsetProp('search', val);\n\t\t}\n\t\telse if (! prop) {\n\t\t\tif (val.className) {\n\t\t\t\tsetProp('className', val.className);\n\t\t\t}\n\t\n\t\t\tif (val.detect !== undefined) {\n\t\t\t\tsetDetect(val.detect);\n\t\t\t}\n\t\n\t\t\tif (val.order) {\n\t\t\t\tsetOrder(val.order);\n\t\t\t}\n\t\n\t\t\tif (val.render !== undefined) {\n\t\t\t\tsetProp('render', val.render);\n\t\t\t}\n\t\n\t\t\tif (val.search !== undefined) {\n\t\t\t\tsetProp('search', val.search);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t// Get a list of types\n\tDataTable.types = function () {\n\t\treturn _extTypes.detect.map(function (fn) {\n\t\t\treturn fn._name;\n\t\t});\n\t};\n\t\n\tvar __diacriticSort = function (a, b) {\n\t\ta = a !== null && a !== undefined ? a.toString().toLowerCase() : '';\n\t\tb = b !== null && b !== undefined ? b.toString().toLowerCase() : '';\n\t\n\t\t// Checked for `navigator.languages` support in `oneOf` so this code can't execute in old\n\t\t// Safari and thus can disable this check\n\t\t// eslint-disable-next-line compat/compat\n\t\treturn a.localeCompare(b, navigator.languages[0] || navigator.language, {\n\t\t\tnumeric: true,\n\t\t\tignorePunctuation: true,\n\t\t});\n\t}\n\t\n\tvar __diacriticHtmlSort = function (a, b) {\n\t\ta = _stripHtml(a);\n\t\tb = _stripHtml(b);\n\t\n\t\treturn __diacriticSort(a, b);\n\t}\n\t\n\t//\n\t// Built in data types\n\t//\n\t\n\tDataTable.type('string', {\n\t\tdetect: function () {\n\t\t\treturn 'string';\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( a ) {\n\t\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t\t// http://jsperf.com/tostring-v-check\n\t\t\t\treturn _empty(a) && typeof a !== 'boolean' ?\n\t\t\t\t\t'' :\n\t\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t\t'' :\n\t\t\t\t\t\t\ta.toString();\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(false, true)\n\t});\n\t\n\tDataTable.type('string-utf8', {\n\t\tdetect: {\n\t\t\tallOf: function ( d ) {\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\toneOf: function ( d ) {\n\t\t\t\t// At least one data point must contain a non-ASCII character\n\t\t\t\t// This line will also check if navigator.languages is supported or not. If not (Safari 10.0-)\n\t\t\t\t// this data type won't be supported.\n\t\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t\treturn ! _empty( d ) && navigator.languages && typeof d === 'string' && d.match(/[^\\x00-\\x7F]/);\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tasc: __diacriticSort,\n\t\t\tdesc: function (a, b) {\n\t\t\t\treturn __diacriticSort(a, b) * -1;\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(false, true)\n\t});\n\t\n\t\n\tDataTable.type('html', {\n\t\tdetect: {\n\t\t\tallOf: function ( d ) {\n\t\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1);\n\t\t\t},\n\t\t\toneOf: function ( d ) {\n\t\t\t\t// At least one data point must contain a `<`\n\t\t\t\treturn ! _empty( d ) && typeof d === 'string' && d.indexOf('<') !== -1;\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( a ) {\n\t\t\t\treturn _empty(a) ?\n\t\t\t\t\t'' :\n\t\t\t\t\ta.replace ?\n\t\t\t\t\t\t_stripHtml(a).trim().toLowerCase() :\n\t\t\t\t\t\ta+'';\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(true, true)\n\t});\n\t\n\t\n\tDataTable.type('html-utf8', {\n\t\tdetect: {\n\t\t\tallOf: function ( d ) {\n\t\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1);\n\t\t\t},\n\t\t\toneOf: function ( d ) {\n\t\t\t\t// At least one data point must contain a `<` and a non-ASCII character\n\t\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t\treturn navigator.languages &&\n\t\t\t\t\t! _empty( d ) &&\n\t\t\t\t\ttypeof d === 'string' &&\n\t\t\t\t\td.indexOf('<') !== -1 &&\n\t\t\t\t\ttypeof d === 'string' && d.match(/[^\\x00-\\x7F]/);\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tasc: __diacriticHtmlSort,\n\t\t\tdesc: function (a, b) {\n\t\t\t\treturn __diacriticHtmlSort(a, b) * -1;\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(true, true)\n\t});\n\t\n\t\n\tDataTable.type('date', {\n\t\tclassName: 'dt-type-date',\n\t\tdetect: {\n\t\t\tallOf: function ( d ) {\n\t\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tvar parsed = Date.parse(d);\n\t\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d);\n\t\t\t},\n\t\t\toneOf: function ( d ) {\n\t\t\t\t// At least one entry must be a date or a string with a date\n\t\t\t\treturn (d instanceof Date) || (typeof d === 'string' && _re_date.test(d));\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( d ) {\n\t\t\t\tvar ts = Date.parse( d );\n\t\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t\t}\n\t\t}\n\t});\n\t\n\t\n\tDataTable.type('html-num-fmt', {\n\t\tclassName: 'dt-type-numeric',\n\t\tdetect: {\n\t\t\tallOf: function ( d, settings ) {\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _htmlNumeric( d, decimal, true, false );\n\t\t\t},\n\t\t\toneOf: function (d, settings) {\n\t\t\t\t// At least one data point must contain a numeric value\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _htmlNumeric( d, decimal, true, false );\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( d, s ) {\n\t\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\t\treturn __numericReplace( d, dp, _re_html, _re_formatted_numeric );\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(true, true)\n\t});\n\t\n\t\n\tDataTable.type('html-num', {\n\t\tclassName: 'dt-type-numeric',\n\t\tdetect: {\n\t\t\tallOf: function ( d, settings ) {\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _htmlNumeric( d, decimal, false, true );\n\t\t\t},\n\t\t\toneOf: function (d, settings) {\n\t\t\t\t// At least one data point must contain a numeric value\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _htmlNumeric( d, decimal, false, false );\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( d, s ) {\n\t\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\t\treturn __numericReplace( d, dp, _re_html );\n\t\t\t}\n\t\t},\n\t\tsearch: _filterString(true, true)\n\t});\n\t\n\t\n\tDataTable.type('num-fmt', {\n\t\tclassName: 'dt-type-numeric',\n\t\tdetect: {\n\t\t\tallOf: function ( d, settings ) {\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _isNumber( d, decimal, true, true );\n\t\t\t},\n\t\t\toneOf: function (d, settings) {\n\t\t\t\t// At least one data point must contain a numeric value\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _isNumber( d, decimal, true, false );\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function ( d, s ) {\n\t\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\t\treturn __numericReplace( d, dp, _re_formatted_numeric );\n\t\t\t}\n\t\t}\n\t});\n\t\n\t\n\tDataTable.type('num', {\n\t\tclassName: 'dt-type-numeric',\n\t\tdetect: {\n\t\t\tallOf: function ( d, settings ) {\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _isNumber( d, decimal, false, true );\n\t\t\t},\n\t\t\toneOf: function (d, settings) {\n\t\t\t\t// At least one data point must contain a numeric value\n\t\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\t\treturn _isNumber( d, decimal, false, false );\n\t\t\t}\n\t\t},\n\t\torder: {\n\t\t\tpre: function (d, s) {\n\t\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\t\treturn __numericReplace( d, dp );\n\t\t\t}\n\t\t}\n\t});\n\t\n\t\n\t\n\t\n\tvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\t\tif ( d !== 0 && (!d || d === '-') ) {\n\t\t\treturn -Infinity;\n\t\t}\n\t\t\n\t\tvar type = typeof d;\n\t\n\t\tif (type === 'number' || type === 'bigint') {\n\t\t\treturn d;\n\t\t}\n\t\n\t\t// If a decimal place other than `.` is used, it needs to be given to the\n\t\t// function so we can detect it and replace with a `.` which is the only\n\t\t// decimal place JavaScript recognises - it is not locale aware.\n\t\tif ( decimalPlace ) {\n\t\t\td = _numToDecimal( d, decimalPlace );\n\t\t}\n\t\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\t\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\t\n\t\treturn d * 1;\n\t};\n\t\n\t\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tfooter: {\n\t\t\t_: function ( settings, cell, classes ) {\n\t\t\t\tcell.addClass(classes.tfoot.cell);\n\t\t\t}\n\t\t},\n\t\n\t\theader: {\n\t\t\t_: function ( settings, cell, classes ) {\n\t\t\t\tcell.addClass(classes.thead.cell);\n\t\n\t\t\t\tif (! settings.oFeatures.bSort) {\n\t\t\t\t\tcell.addClass(classes.order.none);\n\t\t\t\t}\n\t\n\t\t\t\tvar titleRow = settings.titleRow;\n\t\t\t\tvar headerRows = cell.closest('thead').find('tr');\n\t\t\t\tvar rowIdx = cell.parent().index();\n\t\n\t\t\t\t// Conditions to not apply the ordering icons\n\t\t\t\tif (\n\t\t\t\t\t// Cells and rows which have the attribute to disable the icons\n\t\t\t\t\tcell.attr('data-dt-order') === 'disable' ||\n\t\t\t\t\tcell.parent().attr('data-dt-order') === 'disable' ||\n\t\n\t\t\t\t\t// titleRow support, for defining a specific row in the header\n\t\t\t\t\t(titleRow === true && rowIdx !== 0) ||\n\t\t\t\t\t(titleRow === false && rowIdx !== headerRows.length - 1) ||\n\t\t\t\t\t(typeof titleRow === 'number' && rowIdx !== titleRow)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// No additional mark-up required\n\t\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t\t// listening for\n\t\t\t\t$(settings.nTable).on( 'order.dt.DT column-visibility.dt.DT', function ( e, ctx, column ) {\n\t\t\t\t\tif ( settings !== ctx ) { // need to check if this is the host\n\t\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar sorting = ctx.sortDetails;\n\t\n\t\t\t\t\tif (! sorting) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar orderedColumns = _pluck(sorting, 'col');\n\t\n\t\t\t\t\t// This handler is only needed on column visibility if the column is part of the\n\t\t\t\t\t// ordering. If it isn't, then we can bail out to save performance. It could be a\n\t\t\t\t\t// separate event handler, but this is a balance between code reuse / size and performance\n\t\t\t\t\t// console.log(e, e.name, column, orderedColumns, orderedColumns.includes(column))\n\t\t\t\t\tif (e.type === 'column-visibility' && ! orderedColumns.includes(column)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar i;\n\t\t\t\t\tvar orderClasses = classes.order;\n\t\t\t\t\tvar columns = ctx.api.columns( cell );\n\t\t\t\t\tvar col = settings.aoColumns[columns.flatten()[0]];\n\t\t\t\t\tvar orderable = columns.orderable().includes(true);\n\t\t\t\t\tvar ariaType = '';\n\t\t\t\t\tvar indexes = columns.indexes();\n\t\t\t\t\tvar sortDirs = columns.orderable(true).flatten();\n\t\t\t\t\tvar tabIndex = settings.iTabIndex;\n\t\t\t\t\tvar canOrder = ctx.orderHandler && orderable;\n\t\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\torderClasses.isAsc +' '+\n\t\t\t\t\t\t\torderClasses.isDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.toggleClass( orderClasses.none, ! orderable )\n\t\t\t\t\t\t.toggleClass( orderClasses.canAsc, canOrder && sortDirs.includes('asc') )\n\t\t\t\t\t\t.toggleClass( orderClasses.canDesc, canOrder && sortDirs.includes('desc') );\n\t\n\t\t\t\t\t// Determine if all of the columns that this cell covers are included in the\n\t\t\t\t\t// current ordering\n\t\t\t\t\tvar isOrdering = true;\n\t\t\t\t\t\n\t\t\t\t\tfor (i=0; i<indexes.length; i++) {\n\t\t\t\t\t\tif (! orderedColumns.includes(indexes[i])) {\n\t\t\t\t\t\t\tisOrdering = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif ( isOrdering ) {\n\t\t\t\t\t\t// Get the ordering direction for the columns under this cell\n\t\t\t\t\t\t// Note that it is possible for a cell to be asc and desc sorting\n\t\t\t\t\t\t// (column spanning cells)\n\t\t\t\t\t\tvar orderDirs = columns.order();\n\t\n\t\t\t\t\t\tcell.addClass(\n\t\t\t\t\t\t\torderDirs.includes('asc') ? orderClasses.isAsc : '' +\n\t\t\t\t\t\t\torderDirs.includes('desc') ? orderClasses.isDesc : ''\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Find the first visible column that has ordering applied to it - it get's\n\t\t\t\t\t// the aria information, as the ARIA spec says that only one column should\n\t\t\t\t\t// be marked with aria-sort\n\t\t\t\t\tvar firstVis = -1; // column index\n\t\n\t\t\t\t\tfor (i=0; i<orderedColumns.length; i++) {\n\t\t\t\t\t\tif (settings.aoColumns[orderedColumns[i]].bVisible) {\n\t\t\t\t\t\t\tfirstVis = orderedColumns[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (indexes[0] == firstVis) {\n\t\t\t\t\t\tvar firstSort = sorting[0];\n\t\t\t\t\t\tvar sortOrder = col.asSorting;\n\t\n\t\t\t\t\t\tcell.attr('aria-sort', firstSort.dir === 'asc' ? 'ascending' : 'descending');\n\t\n\t\t\t\t\t\t// Determine if the next click will remove sorting or change the sort\n\t\t\t\t\t\tariaType = ! sortOrder[firstSort.index + 1] ? 'Remove' : 'Reverse';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcell.removeAttr('aria-sort');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Make the headers tab-able for keyboard navigation\n\t\t\t\t\tif (orderable) {\n\t\t\t\t\t\tvar orderSpan = cell.find('.dt-column-order');\n\t\t\t\t\t\t\n\t\t\t\t\t\torderSpan\n\t\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t\t.attr('aria-label', orderable\n\t\t\t\t\t\t\t\t? col.ariaTitle + ctx.api.i18n('oAria.orderable' + ariaType)\n\t\t\t\t\t\t\t\t: col.ariaTitle\n\t\t\t\t\t\t\t);\n\t\n\t\t\t\t\t\tif (tabIndex !== -1) {\n\t\t\t\t\t\t\torderSpan.attr('tabindex', tabIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\n\t\tlayout: {\n\t\t\t_: function ( settings, container, items ) {\n\t\t\t\tvar classes = settings.oClasses.layout;\n\t\t\t\tvar row = $('<div/>')\n\t\t\t\t\t.attr('id', items.id || null)\n\t\t\t\t\t.addClass(items.className || classes.row)\n\t\t\t\t\t.appendTo( container );\n\t\n\t\t\t\tDataTable.ext.renderer.layout._forLayoutRow(items, function (key, val) {\n\t\t\t\t\tif (key === 'id' || key === 'className') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tvar klass = '';\n\t\n\t\t\t\t\tif (val.table) {\n\t\t\t\t\t\trow.addClass(classes.tableRow);\n\t\t\t\t\t\tklass += classes.tableCell + ' ';\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (key === 'start') {\n\t\t\t\t\t\tklass += classes.start;\n\t\t\t\t\t}\n\t\t\t\t\telse if (key === 'end') {\n\t\t\t\t\t\tklass += classes.end;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tklass += classes.full;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\tid: val.id || null,\n\t\t\t\t\t\t\t\"class\": val.className\n\t\t\t\t\t\t\t\t? val.className\n\t\t\t\t\t\t\t\t: classes.cell + ' ' + klass\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.append( val.contents )\n\t\t\t\t\t\t.appendTo( row );\n\t\t\t\t});\n\t\t\t},\n\t\n\t\t\t// Shared for use by the styling frameworks\n\t\t\t_forLayoutRow: function (items, fn) {\n\t\t\t\t// As we are inserting dom elements, we need start / end in a\n\t\t\t\t// specific order, this function is used for sorting the layout\n\t\t\t\t// keys.\n\t\t\t\tvar layoutEnum = function (x) {\n\t\t\t\t\tswitch (x) {\n\t\t\t\t\t\tcase '': return 0;\n\t\t\t\t\t\tcase 'start': return 1;\n\t\t\t\t\t\tcase 'end': return 2;\n\t\t\t\t\t\tdefault: return 3;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\n\t\t\t\tObject\n\t\t\t\t\t.keys(items)\n\t\t\t\t\t.sort(function (a, b) {\n\t\t\t\t\t\treturn layoutEnum(a) - layoutEnum(b);\n\t\t\t\t\t})\n\t\t\t\t\t.forEach(function (key) {\n\t\t\t\t\t\tfn(key, items[key]);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} );\n\t\n\t\n\tDataTable.feature = {};\n\t\n\t// Third parameter is internal only!\n\tDataTable.feature.register = function ( name, cb, legacy ) {\n\t\tDataTable.ext.features[ name ] = cb;\n\t\n\t\tif (legacy) {\n\t\t\t_ext.feature.push({\n\t\t\t\tcFeature: legacy,\n\t\t\t\tfnInit: cb\n\t\t\t});\n\t\t}\n\t};\n\t\n\tfunction _divProp(el, prop, val) {\n\t\tif (val) {\n\t\t\tel[prop] = val;\n\t\t}\n\t}\n\t\n\tDataTable.feature.register( 'div', function ( settings, opts ) {\n\t\tvar n = $('<div>')[0];\n\t\n\t\tif (opts) {\n\t\t\t_divProp(n, 'className', opts.className);\n\t\t\t_divProp(n, 'id', opts.id);\n\t\t\t_divProp(n, 'innerHTML', opts.html);\n\t\t\t_divProp(n, 'textContent', opts.text);\n\t\t}\n\t\n\t\treturn n;\n\t} );\n\t\n\tDataTable.feature.register( 'info', function ( settings, opts ) {\n\t\t// For compatibility with the legacy `info` top level option\n\t\tif (! settings.oFeatures.bInfo) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\ttid = settings.sTableId,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.info.container,\n\t\t\t} );\n\t\n\t\topts = $.extend({\n\t\t\tcallback: lang.fnInfoCallback,\n\t\t\tempty: lang.sInfoEmpty,\n\t\t\tpostfix: lang.sInfoPostFix,\n\t\t\tsearch: lang.sInfoFiltered,\n\t\t\ttext: lang.sInfo,\n\t\t}, opts);\n\t\n\t\n\t\t// Update display on each draw\n\t\tsettings.aoDrawCallback.push(function (s) {\n\t\t\t_fnUpdateInfo(s, opts, n);\n\t\t});\n\t\n\t\t// For the first info display in the table, we add a callback and aria information.\n\t\tif (! settings._infoEl) {\n\t\t\tn.attr({\n\t\t\t\t'aria-live': 'polite',\n\t\t\t\tid: tid+'_info',\n\t\t\t\trole: 'status'\n\t\t\t});\n\t\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\n\t\t\tsettings._infoEl = n;\n\t\t}\n\t\n\t\treturn n;\n\t}, 'i' );\n\t\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings, opts, node )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total\n\t\t\t\t? opts.text\n\t\t\t\t: opts.empty;\n\t\n\t\tif ( total !== max ) {\n\t\t\t// Record set after filtering\n\t\t\tout += ' ' + opts.search;\n\t\t}\n\t\n\t\t// Convert the macros\n\t\tout += opts.postfix;\n\t\tout = _fnMacros( settings, out );\n\t\n\t\tif ( opts.callback ) {\n\t\t\tout = opts.callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\t\n\t\tnode.html( out );\n\t\n\t\t_fnCallbackFire(settings, null, 'info', [settings, node[0], out]);\n\t}\n\t\n\tvar __searchCounter = 0;\n\t\n\t// opts\n\t// - text\n\t// - placeholder\n\tDataTable.feature.register( 'search', function ( settings, opts ) {\n\t\t// Don't show the input if filtering isn't available on the table\n\t\tif (! settings.oFeatures.bFilter) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\tvar classes = settings.oClasses.search;\n\t\tvar tableId = settings.sTableId;\n\t\tvar language = settings.oLanguage;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.input+'\"/>';\n\t\n\t\topts = $.extend({\n\t\t\tplaceholder: language.sSearchPlaceholder,\n\t\t\tprocessing: false,\n\t\t\ttext: language.sSearch\n\t\t}, opts);\n\t\n\t\t// The _INPUT_ is optional - is appended if not present\n\t\tif (opts.text.indexOf('_INPUT_') === -1) {\n\t\t\topts.text += '_INPUT_';\n\t\t}\n\t\n\t\topts.text = _fnMacros(settings, opts.text);\n\t\n\t\t// We can put the <input> outside of the label if it is at the start or end\n\t\t// which helps improve accessability (not all screen readers like implicit\n\t\t// for elements).\n\t\tvar end = opts.text.match(/_INPUT_$/);\n\t\tvar start = opts.text.match(/^_INPUT_/);\n\t\tvar removed = opts.text.replace(/_INPUT_/, '');\n\t\tvar str = '<label>' + opts.text + '</label>';\n\t\n\t\tif (start) {\n\t\t\tstr = '_INPUT_<label>' + removed + '</label>';\n\t\t}\n\t\telse if (end) {\n\t\t\tstr = '<label>' + removed + '</label>_INPUT_';\n\t\t}\n\t\n\t\tvar filter = $('<div>')\n\t\t\t.addClass(classes.container)\n\t\t\t.append(str.replace(/_INPUT_/, input));\n\t\n\t\t// add for and id to label and input\n\t\tfilter.find('label').attr('for', 'dt-search-' + __searchCounter);\n\t\tfilter.find('input').attr('id', 'dt-search-' + __searchCounter);\n\t\t__searchCounter++;\n\t\n\t\tvar searchFn = function(event) {\n\t\t\tvar val = this.value;\n\t\n\t\t\tif(previousSearch.return && event.key !== \"Enter\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t/* Now do the filter */\n\t\t\tif ( val != previousSearch.search ) {\n\t\t\t\t_fnProcessingRun(settings, opts.processing, function () {\n\t\t\t\t\tpreviousSearch.search = val;\n\t\t\t\n\t\t\t\t\t_fnFilterComplete( settings, previousSearch );\n\t\t\t\n\t\t\t\t\t// Need to redraw, without resorting\n\t\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t\t_fnDraw( settings );\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\n\t\tvar searchDelay = settings.searchDelay !== null ?\n\t\t\tsettings.searchDelay :\n\t\t\t0;\n\t\n\t\tvar jqFilter = $('input', filter)\n\t\t\t.val( previousSearch.search )\n\t\t\t.attr( 'placeholder', opts.placeholder )\n\t\t\t.on(\n\t\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\t\tsearchDelay ?\n\t\t\t\t\tDataTable.util.debounce( searchFn, searchDelay ) :\n\t\t\t\t\tsearchFn\n\t\t\t)\n\t\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t\t}, 10);\n\t\t\t} )\n\t\t\t.on( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\t\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\t\tif ( settings === s && jqFilter[0] !== document.activeElement ) {\n\t\t\t\tjqFilter.val( typeof previousSearch.search !== 'function'\n\t\t\t\t\t? previousSearch.search\n\t\t\t\t\t: ''\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t\n\t\treturn filter;\n\t}, 'f' );\n\t\n\t// opts\n\t// - type - button configuration\n\t// - buttons - number of buttons to show - must be odd\n\tDataTable.feature.register( 'paging', function ( settings, opts ) {\n\t\t// Don't show the paging input if the table doesn't have paging enabled\n\t\tif (! settings.oFeatures.bPaginate) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\topts = $.extend({\n\t\t\tbuttons: DataTable.ext.pager.numbers_length,\n\t\t\ttype: settings.sPaginationType,\n\t\t\tboundaryNumbers: true,\n\t\t\tfirstLast: true,\n\t\t\tpreviousNext: true,\n\t\t\tnumbers: true\n\t\t}, opts);\n\t\n\t\tvar host = $('<div/>')\n\t\t\t.addClass(settings.oClasses.paging.container + (opts.type ? ' paging_' + opts.type : ''))\n\t\t\t.append(\n\t\t\t\t$('<nav>')\n\t\t\t\t\t.attr('aria-label', 'pagination')\n\t\t\t\t\t.addClass(settings.oClasses.paging.nav)\n\t\t\t);\n\t\tvar draw = function () {\n\t\t\t_pagingDraw(settings, host.children(), opts);\n\t\t};\n\t\n\t\tsettings.aoDrawCallback.push(draw);\n\t\n\t\t// Responsive redraw of paging control\n\t\t$(settings.nTable).on('column-sizing.dt.DT', draw);\n\t\n\t\treturn host;\n\t}, 'p' );\n\t\n\t/**\n\t * Dynamically create the button type array based on the configuration options.\n\t * This will only happen if the paging type is not defined.\n\t */\n\tfunction _pagingDynamic(opts) {\n\t\tvar out = [];\n\t\n\t\tif (opts.numbers) {\n\t\t\tout.push('numbers');\n\t\t}\n\t\n\t\tif (opts.previousNext) {\n\t\t\tout.unshift('previous');\n\t\t\tout.push('next');\n\t\t}\n\t\n\t\tif (opts.firstLast) {\n\t\t\tout.unshift('first');\n\t\t\tout.push('last');\n\t\t}\n\t\n\t\treturn out;\n\t}\n\t\n\tfunction _pagingDraw(settings, host, opts) {\n\t\tif (! settings._bInitComplete) {\n\t\t\treturn;\n\t\t}\n\t\n\t\tvar\n\t\t\tplugin = opts.type\n\t\t\t\t? DataTable.ext.pager[ opts.type ]\n\t\t\t\t: _pagingDynamic,\n\t\t\taria = settings.oLanguage.oAria.paginate || {},\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1,\n\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\tbuttons = [],\n\t\t\tbuttonEls = [],\n\t\t\tbuttonsNested = plugin(opts)\n\t\t\t\t.map(function (val) {\n\t\t\t\t\treturn val === 'numbers'\n\t\t\t\t\t\t? _pagingNumbers(page, pages, opts.buttons, opts.boundaryNumbers)\n\t\t\t\t\t\t: val;\n\t\t\t\t});\n\t\n\t\t// .flat() would be better, but not supported in old Safari\n\t\tbuttons = buttons.concat.apply(buttons, buttonsNested);\n\t\n\t\tfor (var i=0 ; i<buttons.length ; i++) {\n\t\t\tvar button = buttons[i];\n\t\n\t\t\tvar btnInfo = _pagingButtonInfo(settings, button, page, pages);\n\t\t\tvar btn = _fnRenderer( settings, 'pagingButton' )(\n\t\t\t\tsettings,\n\t\t\t\tbutton,\n\t\t\t\tbtnInfo.display,\n\t\t\t\tbtnInfo.active,\n\t\t\t\tbtnInfo.disabled\n\t\t\t);\n\t\n\t\t\tvar ariaLabel = typeof button === 'string'\n\t\t\t\t? aria[ button ]\n\t\t\t\t: aria.number\n\t\t\t\t\t? aria.number + (button+1)\n\t\t\t\t\t: null;\n\t\n\t\t\t// Common attributes\n\t\t\t$(btn.clicker).attr({\n\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t'aria-disabled': btnInfo.disabled ? 'true' : null,\n\t\t\t\t'aria-current': btnInfo.active ? 'page' : null,\n\t\t\t\t'aria-label': ariaLabel,\n\t\t\t\t'data-dt-idx': button,\n\t\t\t\t'tabIndex': btnInfo.disabled\n\t\t\t\t\t? -1\n\t\t\t\t\t: settings.iTabIndex && btn.clicker[0].nodeName.toLowerCase() !== 'span'\n\t\t\t\t\t\t? settings.iTabIndex\n\t\t\t\t\t\t: null, // `0` doesn't need a tabIndex since it is the default\n\t\t\t});\n\t\n\t\t\tif (typeof button !== 'number') {\n\t\t\t\t$(btn.clicker).addClass(button);\n\t\t\t}\n\t\n\t\t\t_fnBindAction(\n\t\t\t\tbtn.clicker, {action: button}, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\n\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t}\n\t\t\t);\n\t\n\t\t\tbuttonEls.push(btn.display);\n\t\t}\n\t\n\t\tvar wrapped = _fnRenderer(settings, 'pagingContainer')(\n\t\t\tsettings, buttonEls\n\t\t);\n\t\n\t\tvar activeEl = host.find(document.activeElement).data('dt-idx');\n\t\n\t\thost.empty().append(wrapped);\n\t\n\t\tif ( activeEl !== undefined ) {\n\t\t\thost.find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t\t}\n\t\n\t\t// Responsive - check if the buttons are over two lines based on the\n\t\t// height of the buttons and the container.\n\t\tif (buttonEls.length) {\n\t\t\tvar outerHeight = $(buttonEls[0]).outerHeight();\n\t\t\n\t\t\tif (\n\t\t\t\topts.buttons > 1 && // prevent infinite\n\t\t\t\touterHeight > 0 && // will be 0 if hidden\n\t\t\t\t$(host).height() >= (outerHeight * 2) - 10\n\t\t\t) {\n\t\t\t\t_pagingDraw(settings, host, $.extend({}, opts, { buttons: opts.buttons - 2 }));\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Get properties for a button based on the current paging state of the table\n\t *\n\t * @param {*} settings DT settings object\n\t * @param {*} button The button type in question\n\t * @param {*} page Table's current page\n\t * @param {*} pages Number of pages\n\t * @returns Info object\n\t */\n\tfunction _pagingButtonInfo(settings, button, page, pages) {\n\t\tvar lang = settings.oLanguage.oPaginate;\n\t\tvar o = {\n\t\t\tdisplay: '',\n\t\t\tactive: false,\n\t\t\tdisabled: false\n\t\t};\n\t\n\t\tswitch ( button ) {\n\t\t\tcase 'ellipsis':\n\t\t\t\to.display = '&#x2026;';\n\t\t\t\tbreak;\n\t\n\t\t\tcase 'first':\n\t\t\t\to.display = lang.sFirst;\n\t\n\t\t\t\tif (page === 0) {\n\t\t\t\t\to.disabled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\n\t\t\tcase 'previous':\n\t\t\t\to.display = lang.sPrevious;\n\t\n\t\t\t\tif ( page === 0 ) {\n\t\t\t\t\to.disabled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\n\t\t\tcase 'next':\n\t\t\t\to.display = lang.sNext;\n\t\n\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\to.disabled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\n\t\t\tcase 'last':\n\t\t\t\to.display = lang.sLast;\n\t\n\t\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\t\to.disabled = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\n\t\t\tdefault:\n\t\t\t\tif ( typeof button === 'number' ) {\n\t\t\t\t\to.display = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\t\n\t\t\t\t\tif (page === button) {\n\t\t\t\t\t\to.active = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\n\t\treturn o;\n\t}\n\t\n\t/**\n\t * Compute what number buttons to show in the paging control\n\t *\n\t * @param {*} page Current page\n\t * @param {*} pages Total number of pages\n\t * @param {*} buttons Target number of number buttons\n\t * @param {boolean} addFirstLast Indicate if page 1 and end should be included\n\t * @returns Buttons to show\n\t */\n\tfunction _pagingNumbers ( page, pages, buttons, addFirstLast ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\thalf = Math.floor(buttons / 2),\n\t\t\tbefore = addFirstLast ? 2 : 1,\n\t\t\tafter = addFirstLast ? 1 : 0;\n\t\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range(0, pages);\n\t\t}\n\t\telse if (buttons === 1) {\n\t\t\t// Single button - current page only\n\t\t\tnumbers = [page];\n\t\t}\n\t\telse if (buttons === 3) {\n\t\t\t// Special logic for just three buttons\n\t\t\tif (page <= 1) {\n\t\t\t\tnumbers = [0, 1, 'ellipsis'];\n\t\t\t}\n\t\t\telse if (page >= pages - 2) {\n\t\t\t\tnumbers = _range(pages-2, pages);\n\t\t\t\tnumbers.unshift('ellipsis');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnumbers = ['ellipsis', page, 'ellipsis'];\n\t\t\t}\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range(0, buttons-before);\n\t\t\tnumbers.push('ellipsis');\n\t\n\t\t\tif (addFirstLast) {\n\t\t\t\tnumbers.push(pages-1);\n\t\t\t}\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range(pages-(buttons-before), pages);\n\t\t\tnumbers.unshift('ellipsis');\n\t\n\t\t\tif (addFirstLast) {\n\t\t\t\tnumbers.unshift(0);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range(page-half+before, page+half-after);\n\t\t\tnumbers.push('ellipsis');\n\t\t\tnumbers.unshift('ellipsis');\n\t\n\t\t\tif (addFirstLast) {\n\t\t\t\tnumbers.push(pages-1);\n\t\t\t\tnumbers.unshift(0);\n\t\t\t}\n\t\t}\n\t\n\t\treturn numbers;\n\t}\n\t\n\tvar __lengthCounter = 0;\n\t\n\t// opts\n\t// - menu\n\t// - text\n\tDataTable.feature.register( 'pageLength', function ( settings, opts ) {\n\t\tvar features = settings.oFeatures;\n\t\n\t\t// For compatibility with the legacy `pageLength` top level option\n\t\tif (! features.bPaginate || ! features.bLengthChange) {\n\t\t\treturn null;\n\t\t}\n\t\n\t\topts = $.extend({\n\t\t\tmenu: settings.aLengthMenu,\n\t\t\ttext: settings.oLanguage.sLengthMenu\n\t\t}, opts);\n\t\n\t\tvar\n\t\t\tclasses  = settings.oClasses.length,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = opts.menu,\n\t\t\tlengths  = [],\n\t\t\tlanguage = [],\n\t\t\ti;\n\t\n\t\t// Options can be given in a number of ways\n\t\tif (Array.isArray( menu[0] )) {\n\t\t\t// Old 1.x style - 2D array\n\t\t\tlengths = menu[0];\n\t\t\tlanguage = menu[1];\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0 ; i<menu.length ; i++ ) {\n\t\t\t\t// An object with different label and value\n\t\t\t\tif ($.isPlainObject(menu[i])) {\n\t\t\t\t\tlengths.push(menu[i].value);\n\t\t\t\t\tlanguage.push(menu[i].label);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Or just a number to display and use\n\t\t\t\t\tlengths.push(menu[i]);\n\t\t\t\t\tlanguage.push(menu[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\t// We can put the <select> outside of the label if it is at the start or\n\t\t// end which helps improve accessability (not all screen readers like\n\t\t// implicit for elements).\n\t\tvar end = opts.text.match(/_MENU_$/);\n\t\tvar start = opts.text.match(/^_MENU_/);\n\t\tvar removed = opts.text.replace(/_MENU_/, '');\n\t\tvar str = '<label>' + opts.text + '</label>';\n\t\n\t\tif (start) {\n\t\t\tstr = '_MENU_<label>' + removed + '</label>';\n\t\t}\n\t\telse if (end) {\n\t\t\tstr = '<label>' + removed + '</label>_MENU_';\n\t\t}\n\t\n\t\t// Wrapper element - use a span as a holder for where the select will go\n\t\tvar tmpId = 'tmp-' + (+new Date())\n\t\tvar div = $('<div/>')\n\t\t\t.addClass( classes.container )\n\t\t\t.append(\n\t\t\t\tstr.replace( '_MENU_', '<span id=\"'+tmpId+'\"></span>' )\n\t\t\t);\n\t\n\t\t// Save text node content for macro updating\n\t\tvar textNodes = [];\n\t\tArray.prototype.slice.call(div.find('label')[0].childNodes).forEach(function (el) {\n\t\t\tif (el.nodeType === Node.TEXT_NODE) {\n\t\t\t\ttextNodes.push({\n\t\t\t\t\tel: el,\n\t\t\t\t\ttext: el.textContent\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\n\t\t// Update the label text in case it has an entries value\n\t\tvar updateEntries = function (len) {\n\t\t\ttextNodes.forEach(function (node) {\n\t\t\t\tnode.el.textContent = _fnMacros(settings, node.text, len);\n\t\t\t});\n\t\t}\n\t\n\t\t// Next, the select itself, along with the options\n\t\tvar select = $('<select/>', {\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.select\n\t\t} );\n\t\n\t\tfor ( i=0 ; i<lengths.length ; i++ ) {\n\t\t\t// Attempt to look up the length from the i18n options\n\t\t\tvar label = settings.api.i18n('lengthLabels.' + lengths[i], null);\n\t\n\t\t\tif (label === null) {\n\t\t\t\t// If not present, fallback to old style\n\t\t\t\tlabel = typeof language[i] === 'number' ?\n\t\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\t\tlanguage[i];\n\t\t\t}\n\t\n\t\t\tselect[0][ i ] = new Option(label, lengths[i]);\n\t\t}\n\t\n\t\t// add for and id to label and input\n\t\tdiv.find('label').attr('for', 'dt-length-' + __lengthCounter);\n\t\tselect.attr('id', 'dt-length-' + __lengthCounter);\n\t\t__lengthCounter++;\n\t\n\t\t// Swap in the select list\n\t\tdiv.find('#' + tmpId).replaceWith(select);\n\t\n\t\t// Can't use `select` variable as user might provide their own and the\n\t\t// reference is broken by the use of outerHTML\n\t\t$('select', div)\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.on( 'change.DT', function() {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\t\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\t\tif ( settings === s ) {\n\t\t\t\t$('select', div).val( len );\n\t\n\t\t\t\t// Resolve plurals in the text for the new length\n\t\t\t\tupdateEntries(len);\n\t\t\t}\n\t\t} );\n\t\n\t\tupdateEntries(settings._iDisplayLength);\n\t\n\t\treturn div;\n\t}, 'l' );\n\t\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\t\n\t// Provide access to the host jQuery object (circular reference)\n\tDataTable.$ = $;\n\t\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\t\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\t\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\treturn DataTable;\n}));\n", "/*! Scroller 2.4.3\n * \u00A9 SpryMedia Ltd - datatables.net/license\n */\n\n(function( factory ){\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// AMD\n\t\tdefine( ['jquery', 'datatables.net'], function ( $ ) {\n\t\t\treturn factory( $, window, document );\n\t\t} );\n\t}\n\telse if ( typeof exports === 'object' ) {\n\t\t// CommonJS\n\t\tvar jq = require('jquery');\n\t\tvar cjsRequires = function (root, $) {\n\t\t\tif ( ! $.fn.dataTable ) {\n\t\t\t\trequire('datatables.net')(root, $);\n\t\t\t}\n\t\t};\n\n\t\tif (typeof window === 'undefined') {\n\t\t\tmodule.exports = function (root, $) {\n\t\t\t\tif ( ! root ) {\n\t\t\t\t\t// CommonJS environments without a window global must pass a\n\t\t\t\t\t// root. This will give an error otherwise\n\t\t\t\t\troot = window;\n\t\t\t\t}\n\n\t\t\t\tif ( ! $ ) {\n\t\t\t\t\t$ = jq( root );\n\t\t\t\t}\n\n\t\t\t\tcjsRequires( root, $ );\n\t\t\t\treturn factory( $, root, root.document );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tcjsRequires( window, jq );\n\t\t\tmodule.exports = factory( jq, window, window.document );\n\t\t}\n\t}\n\telse {\n\t\t// Browser\n\t\tfactory( jQuery, window, document );\n\t}\n}(function( $, window, document ) {\n'use strict';\nvar DataTable = $.fn.dataTable;\n\n\n\n/**\n * @summary     Scroller\n * @description Virtual rendering for DataTables\n * @version     2.4.3\n * @copyright   SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license/mit\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/**\n * Scroller is a virtual rendering plug-in for DataTables which allows large\n * datasets to be drawn on screen very quickly. What the virtual rendering means\n * is that only the visible portion of the table (and a bit to either side to make\n * the scrolling smooth) is drawn, while the scrolling container gives the\n * visual impression that the whole table is visible. This is done by making use\n * of the pagination abilities of DataTables and moving the table around in the\n * scrolling container DataTables adds to the page. The scrolling container is\n * forced to the height it would be for the full table display using an extra\n * element.\n *\n * Note that rows in the table MUST all be the same height. Information in a cell\n * which expands on to multiple lines will cause some odd behaviour in the scrolling.\n *\n * Scroller is initialised by simply including the letter 'S' in the sDom for the\n * table you want to have this feature enabled on. Note that the 'S' must come\n * AFTER the 't' parameter in `dom`.\n *\n * Key features include:\n *   <ul class=\"limit_length\">\n *     <li>Speed! The aim of Scroller for DataTables is to make rendering large data sets fast</li>\n *     <li>Full compatibility with deferred rendering in DataTables for maximum speed</li>\n *     <li>Display millions of rows</li>\n *     <li>Integration with state saving in DataTables (scrolling position is saved)</li>\n *     <li>Easy to use</li>\n *   </ul>\n *\n *  @class\n *  @constructor\n *  @global\n *  @param {object} dt DataTables settings object or API instance\n *  @param {object} [opts={}] Configuration object for Scroller. Options\n *    are defined by {@link Scroller.defaults}\n *\n *  @requires jQuery 1.7+\n *  @requires DataTables 1.11.0+\n */\nvar Scroller = function (dt, opts) {\n\t/* Sanity check - you just know it will happen */\n\tif (!(this instanceof Scroller)) {\n\t\talert(\n\t\t\t\"Scroller warning: Scroller must be initialised with the 'new' keyword.\"\n\t\t);\n\t\treturn;\n\t}\n\n\tif (opts === undefined) {\n\t\topts = {};\n\t}\n\n\tvar dtApi = $.fn.dataTable.Api(dt);\n\n\t/**\n\t * Settings object which contains customisable information for the Scroller instance\n\t * @namespace\n\t * @private\n\t * @extends Scroller.defaults\n\t */\n\tthis.s = {\n\t\t/**\n\t\t * DataTables settings object\n\t\t *  @type     object\n\t\t *  @default  Passed in as first parameter to constructor\n\t\t */\n\t\tdt: dtApi.settings()[0],\n\n\t\t/**\n\t\t * DataTables API instance\n\t\t *  @type     DataTable.Api\n\t\t */\n\t\tdtApi: dtApi,\n\n\t\t/**\n\t\t * Pixel location of the top of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the bottom of the drawn table in the viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\ttableBottom: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling up the way.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawTop: 0,\n\n\t\t/**\n\t\t * Pixel location of the boundary for when the next data set should be loaded and drawn\n\t\t * when scrolling down the way. Note that this is actually calculated as the offset from\n\t\t * the top.\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t *  @private\n\t\t */\n\t\tredrawBottom: 0,\n\n\t\t/**\n\t\t * Auto row height or not indicator\n\t\t *  @type     bool\n\t\t *  @default  0\n\t\t */\n\t\tautoHeight: true,\n\n\t\t/**\n\t\t * Number of rows calculated as visible in the visible viewport\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tviewportRows: 0,\n\n\t\t/**\n\t\t * setTimeout reference for state saving, used when state saving is enabled in the DataTable\n\t\t * and when the user scrolls the viewport in order to stop the cookie set taking too much\n\t\t * CPU!\n\t\t *  @type     int\n\t\t *  @default  0\n\t\t */\n\t\tstateTO: null,\n\n\t\tstateSaveThrottle: function () {},\n\n\t\t/**\n\t\t * setTimeout reference for the redraw, used when server-side processing is enabled in the\n\t\t * DataTables in order to prevent DoSing the server\n\t\t *  @type     int\n\t\t *  @default  null\n\t\t */\n\t\tdrawTO: null,\n\n\t\theights: {\n\t\t\tjump: null,\n\t\t\tpage: null,\n\t\t\tvirtual: null,\n\t\t\tscroll: null,\n\n\t\t\t/**\n\t\t\t * Height of rows in the table\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\trow: null,\n\n\t\t\t/**\n\t\t\t * Pixel height of the viewport\n\t\t\t *  @type     int\n\t\t\t *  @default  0\n\t\t\t */\n\t\t\tviewport: null,\n\t\t\tlabelHeight: 0,\n\t\t\txbar: 0\n\t\t},\n\n\t\ttopRowFloat: 0,\n\t\tscrollDrawDiff: null,\n\t\tloaderVisible: false,\n\t\tforceReposition: false,\n\t\tbaseRowTop: 0,\n\t\tbaseScrollTop: 0,\n\t\tmousedown: false,\n\t\tlastScrollTop: 0\n\t};\n\n\t// @todo The defaults should extend a `c` property and the internal settings\n\t// only held in the `s` property. At the moment they are mixed\n\tthis.s = $.extend(this.s, Scroller.oDefaults, opts);\n\n\t// Workaround for row height being read from height object (see above comment)\n\tthis.s.heights.row = this.s.rowHeight;\n\n\t/**\n\t * DOM elements used by the class instance\n\t * @private\n\t * @namespace\n\t *\n\t */\n\tthis.dom = {\n\t\tforce: document.createElement('div'),\n\t\tlabel: $('<div class=\"dts_label\">0</div>'),\n\t\tscroller: null,\n\t\ttable: null,\n\t\tloader: null\n\t};\n\n\t// Attach the instance to the DataTables instance so it can be accessed in\n\t// future. Don't initialise Scroller twice on the same table\n\tif (this.s.dt.oScroller) {\n\t\treturn;\n\t}\n\n\tthis.s.dt.oScroller = this;\n\n\t/* Let's do it */\n\tthis.construct();\n};\n\n$.extend(Scroller.prototype, {\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Public methods - to be exposed via the DataTables API\n\t */\n\n\t/**\n\t * Calculate and store information about how many rows are to be displayed\n\t * in the scrolling viewport, based on current dimensions in the browser's\n\t * rendering. This can be particularly useful if the table is initially\n\t * drawn in a hidden element - for example in a tab.\n\t *  @param {bool} [redraw=true] Redraw the table automatically after the recalculation, with\n\t *    the new dimensions forming the basis for the draw.\n\t *  @returns {void}\n\t */\n\tmeasure: function (redraw) {\n\t\tif (this.s.autoHeight) {\n\t\t\tthis._calcRowHeight();\n\t\t}\n\n\t\tvar heights = this.s.heights;\n\n\t\tif (heights.row) {\n\t\t\theights.viewport = this._parseHeight(\n\t\t\t\t$(this.dom.scroller).css('max-height')\n\t\t\t);\n\n\t\t\tthis.s.viewportRows =\n\t\t\t\tparseInt(heights.viewport / heights.row, 10) + 1;\n\t\t\tthis.s.dt._iDisplayLength =\n\t\t\t\tthis.s.viewportRows * this.s.displayBuffer;\n\t\t}\n\n\t\tvar label = this.dom.label.outerHeight();\n\n\t\theights.xbar =\n\t\t\tthis.dom.scroller.offsetHeight - this.dom.scroller.clientHeight;\n\t\theights.labelHeight = label;\n\n\t\tif (redraw === undefined || redraw) {\n\t\t\tthis.s.dtApi.draw(false);\n\t\t}\n\t},\n\n\t/**\n\t * Get information about current displayed record range. This corresponds to\n\t * the information usually displayed in the \"Info\" block of the table.\n\t *\n\t * @returns {object} info as an object:\n\t *  {\n\t *      start: {int}, // the 0-indexed record at the top of the viewport\n\t *      end:   {int}, // the 0-indexed record at the bottom of the viewport\n\t *  }\n\t */\n\tpageInfo: function () {\n\t\tvar dt = this.s.dt,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTotal = dt.fnRecordsDisplay(),\n\t\t\tiPossibleEnd = Math.ceil(\n\t\t\t\tthis.pixelsToRow(\n\t\t\t\t\tiScrollTop + this.s.heights.viewport,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.s.ani\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn {\n\t\t\tstart: Math.floor(this.pixelsToRow(iScrollTop, false, this.s.ani)),\n\t\t\tend: iTotal < iPossibleEnd ? iTotal - 1 : iPossibleEnd - 1\n\t\t};\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position\n\t * (y-scroll).\n\t *\n\t * Please note that when the height of the full table exceeds 1 million\n\t * pixels, Scroller switches into a non-linear mode for the scrollbar to fit\n\t * all of the records into a finite area, but this function returns a linear\n\t * value (relative to the last non-linear positioning).\n\t *  @param {int} pixels Offset from top to calculate the row number of\n\t *  @param {int} [intParse=true] If an integer value should be returned\n\t *  @param {int} [virtual=false] Perform the calculations in the virtual domain\n\t *  @returns {int} Row index\n\t */\n\tpixelsToRow: function (pixels, intParse, virtual) {\n\t\tvar diff = pixels - this.s.baseScrollTop;\n\t\tvar row = virtual\n\t\t\t? (this._domain('physicalToVirtual', this.s.baseScrollTop) + diff) /\n\t\t\t\tthis.s.heights.row\n\t\t\t: diff / this.s.heights.row + this.s.baseRowTop;\n\n\t\treturn intParse || intParse === undefined ? parseInt(row, 10) : row;\n\t},\n\n\t/**\n\t * Calculate the pixel position from the top of the scrolling container for\n\t * a given row\n\t *  @param {int} iRow Row number to calculate the position of\n\t *  @returns {int} Pixels\n\t */\n\trowToPixels: function (rowIdx, intParse, virtual) {\n\t\tvar pixels;\n\t\tvar diff = rowIdx - this.s.baseRowTop;\n\n\t\tif (virtual) {\n\t\t\tpixels = this._domain('virtualToPhysical', this.s.baseScrollTop);\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\t\telse {\n\t\t\tpixels = this.s.baseScrollTop;\n\t\t\tpixels += diff * this.s.heights.row;\n\t\t}\n\n\t\treturn intParse || intParse === undefined\n\t\t\t? parseInt(pixels, 10)\n\t\t\t: pixels;\n\t},\n\n\t/**\n\t * Calculate the row number that will be found at the given pixel position (y-scroll)\n\t *  @param {int} row Row index to scroll to\n\t *  @param {bool} [animate=true] Animate the transition or not\n\t *  @returns {void}\n\t */\n\tscrollToRow: function (row, animate) {\n\t\tvar that = this;\n\t\tvar ani = false;\n\t\tvar px = this.rowToPixels(row);\n\n\t\t// We need to know if the table will redraw or not before doing the\n\t\t// scroll. If it will not redraw, then we need to use the currently\n\t\t// displayed table, and scroll with the physical pixels. Otherwise, we\n\t\t// need to calculate the table's new position from the virtual\n\t\t// transform.\n\t\tvar preRows = ((this.s.displayBuffer - 1) / 2) * this.s.viewportRows;\n\t\tvar drawRow = row - preRows;\n\t\tif (drawRow < 0) {\n\t\t\tdrawRow = 0;\n\t\t}\n\n\t\tif (\n\t\t\t(px > this.s.redrawBottom || px < this.s.redrawTop) &&\n\t\t\tthis.s.dt._iDisplayStart !== drawRow\n\t\t) {\n\t\t\tani = true;\n\t\t\tpx = this._domain('virtualToPhysical', row * this.s.heights.row);\n\n\t\t\t// If we need records outside the current draw region, but the new\n\t\t\t// scrolling position is inside that (due to the non-linear nature\n\t\t\t// for larger numbers of records), we need to force position update.\n\t\t\tif (this.s.redrawTop < px && px < this.s.redrawBottom) {\n\t\t\t\tthis.s.forceReposition = true;\n\t\t\t\tanimate = false;\n\t\t\t}\n\t\t}\n\n\t\tif (animate === undefined || animate) {\n\t\t\tthis.s.ani = ani;\n\t\t\t$(this.dom.scroller).animate(\n\t\t\t\t{\n\t\t\t\t\tscrollTop: px\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\t// This needs to happen after the animation has completed and\n\t\t\t\t\t// the final scroll event fired\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tthat.s.ani = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\t$(this.dom.scroller).scrollTop(px);\n\t\t}\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Constructor\n\t */\n\n\t/**\n\t * Initialisation for Scroller\n\t *  @returns {void}\n\t *  @private\n\t */\n\tconstruct: function () {\n\t\tvar that = this;\n\t\tvar dt = this.s.dtApi;\n\n\t\t/* Sanity check */\n\t\tif (!this.s.dt.oFeatures.bPaginate) {\n\t\t\tthrow new Error(\n\t\t\t\t'Pagination must be enabled for Scroller to operate'\n\t\t\t);\n\t\t}\n\n\t\t/* Insert a div element that we can use to force the DT scrolling container to\n\t\t * the height that would be required if the whole table was being displayed\n\t\t */\n\t\tthis.dom.force.style.position = 'relative';\n\t\tthis.dom.force.style.top = '0px';\n\t\tthis.dom.force.style.left = '0px';\n\t\tthis.dom.force.style.width = '1px';\n\n\t\tthis.dom.scroller = dt.table().node().parentNode;\n\t\tthis.dom.scroller.appendChild(this.dom.force);\n\t\tthis.dom.scroller.style.position = 'relative';\n\n\t\tthis.dom.table = $('>table', this.dom.scroller)[0];\n\t\tthis.dom.table.style.position = 'absolute';\n\t\tthis.dom.table.style.top = '0px';\n\t\tthis.dom.table.style.left = '0px';\n\n\t\t// Add class to 'announce' that we are a Scroller table\n\t\t$(dt.table().container()).addClass('dts DTS');\n\n\t\tthis.dom.label.appendTo(this.dom.scroller);\n\n\t\t/* Initial size calculations */\n\t\tif (this.s.heights.row && this.s.heights.row != 'auto') {\n\t\t\tthis.s.autoHeight = false;\n\t\t}\n\n\t\t// Scrolling callback to see if a page change is needed\n\t\tthis.s.ingnoreScroll = true;\n\t\t$(this.dom.scroller).on('scroll.dt-scroller', function (e) {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t// In iOS we catch the touchstart event in case the user tries to scroll\n\t\t// while the display is already scrolling\n\t\t$(this.dom.scroller).on('touchstart.dt-scroller', function () {\n\t\t\tthat._scroll.call(that);\n\t\t});\n\n\t\t$(this.dom.scroller)\n\t\t\t.on('mousedown.dt-scroller', function () {\n\t\t\t\tthat.s.mousedown = true;\n\t\t\t})\n\t\t\t.on('mouseup.dt-scroller', function () {\n\t\t\t\tthat.s.labelVisible = false;\n\t\t\t\tthat.s.mousedown = false;\n\t\t\t\tthat.dom.label.css('display', 'none');\n\t\t\t});\n\n\t\t// On resize, update the information element, since the number of rows shown might change\n\t\t$(window).on('resize.dt-scroller', function () {\n\t\t\tthat.measure(false);\n\t\t\tthat._info();\n\t\t});\n\n\t\t// Add a state saving parameter to the DT state saving so we can restore the exact\n\t\t// position of the scrolling.\n\t\tvar initialStateSave = true;\n\t\tvar loadedState = dt.state.loaded();\n\n\t\tdt.on('stateSaveParams.scroller', function (e, settings, data) {\n\t\t\tif (initialStateSave && loadedState) {\n\t\t\t\tdata.scroller = loadedState.scroller;\n\t\t\t\tinitialStateSave = false;\n\n\t\t\t\tif (data.scroller) {\n\t\t\t\t\tthat.s.lastScrollTop = data.scroller.scrollTop;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Need to used the saved position on init\n\t\t\t\tdata.scroller = {\n\t\t\t\t\ttopRow: that.s.topRowFloat,\n\t\t\t\t\tbaseRowTop: that.s.baseRowTop\n\t\t\t\t};\n\t\t\t}\n\t\t});\n\n\t\tdt.on('stateLoadParams.scroller', function (e, settings, data) {\n\t\t\tif (data.scroller !== undefined) {\n\t\t\t\tthat.scrollToRow(data.scroller.topRow);\n\t\t\t}\n\t\t});\n\n\t\tthis.measure(false);\n\n\t\tif (loadedState && loadedState.scroller) {\n\t\t\tthis.s.topRowFloat = loadedState.scroller.topRow;\n\t\t\tthis.s.baseRowTop = loadedState.scroller.baseRowTop;\n\n\t\t\t// Reconstruct the scroll positions from the rows - it is possible the\n\t\t\t// row height has changed e.g. if the styling framework has changed.\n\t\t\t// The scroll top is used in `_draw` further down.\n\t\t\tthis.s.baseScrollTop = this.s.baseRowTop * this.s.heights.row;\t\t\t\n\t\t\tloadedState.scroller.scrollTop = this._domain('physicalToVirtual', this.s.topRowFloat * this.s.heights.row);\n\t\t}\n\n\t\tthat.s.stateSaveThrottle = DataTable.util.throttle(function () {\n\t\t\tthat.s.dtApi.state.save();\n\t\t}, 500);\n\n\t\tdt.on('init.scroller', function () {\n\t\t\tthat.measure(false);\n\n\t\t\t// Setting to `jump` will instruct _draw to calculate the scroll top\n\t\t\t// position\n\t\t\tthat.s.scrollType = 'jump';\n\t\t\tthat._draw();\n\n\t\t\t// Update the scroller when the DataTable is redrawn\n\t\t\tdt.on('draw.scroller', function () {\n\t\t\t\tthat._draw();\n\t\t\t});\n\t\t});\n\n\t\t// Set height before the draw happens, allowing everything else to update\n\t\t// on draw complete without worry for roder.\n\t\tdt.on('preDraw.dt.scroller', function () {\n\t\t\tthat._scrollForce();\n\t\t});\n\n\t\t// Destructor\n\t\tdt.on('destroy.scroller', function () {\n\t\t\t$(window).off('resize.dt-scroller');\n\t\t\t$(that.dom.scroller).off('.dt-scroller');\n\t\t\t$(that.s.dt.nTable).off('.scroller');\n\n\t\t\t$(that.s.dt.nTableWrapper).removeClass('DTS');\n\t\t\t$('div.DTS_Loading', that.dom.scroller.parentNode).remove();\n\n\t\t\tthat.dom.table.style.position = '';\n\t\t\tthat.dom.table.style.top = '';\n\t\t\tthat.dom.table.style.left = '';\n\t\t});\n\t},\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Private methods\n\t */\n\n\t/**\n\t * Automatic calculation of table row height. This is just a little tricky here as using\n\t * initialisation DataTables has tale the table out of the document, so we need to create\n\t * a new table and insert it into the document, calculate the row height and then whip the\n\t * table out.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_calcRowHeight: function () {\n\t\tvar dt = this.s.dt;\n\t\tvar origTable = dt.nTable;\n\t\tvar nTable = origTable.cloneNode(false);\n\t\tvar tbody = $('<tbody/>').appendTo(nTable);\n\t\tvar dtClasses = dt.oClasses;\n\n\t\t// Different locations for classes in DT2\n\t\tvar classes = DataTable.versionCheck('2')\n\t\t\t? {\n\t\t\t\t\tcontainer: dtClasses.container,\n\t\t\t\t\tscroller: dtClasses.scrolling.container,\n\t\t\t\t\tbody: dtClasses.scrolling.body\n\t\t\t}\n\t\t\t: {\n\t\t\t\t\tcontainer: dtClasses.sWrapper,\n\t\t\t\t\tscroller: dtClasses.sScrollWrapper,\n\t\t\t\t\tbody: dtClasses.sScrollBody\n\t\t\t};\n\n\t\tvar container = $(\n\t\t\t'<div class=\"' +\n\t\t\t\tclasses.container +\n\t\t\t\t' DTS\"><div class=\"' +\n\t\t\t\tclasses.scroller +\n\t\t\t\t'\"><div class=\"' +\n\t\t\t\tclasses.body +\n\t\t\t\t'\"></div></div></div>'\n\t\t);\n\n\t\t// Want 3 rows in the sizing table so :first-child and :last-child\n\t\t// CSS styles don't come into play - take the size of the middle row\n\t\t$('tbody tr:lt(4)', origTable).clone().appendTo(tbody);\n\t\tvar rowsCount = $('tr', tbody).length;\n\n\t\tif (rowsCount === 1) {\n\t\t\ttbody.prepend('<tr><td>&#160;</td></tr>');\n\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t}\n\t\telse {\n\t\t\tfor (; rowsCount < 3; rowsCount++) {\n\t\t\t\ttbody.append('<tr><td>&#160;</td></tr>');\n\t\t\t}\n\t\t}\n\n\t\t$('div.' + classes.body, container).append(nTable);\n\n\t\t// If initialised using `dom`, use the holding element as the insert point\n\t\tvar insertEl = this.s.dt.nHolding || origTable.parentNode;\n\n\t\tif (!$(insertEl).is(':visible')) {\n\t\t\tinsertEl = 'body';\n\t\t}\n\n\t\t// Remove form element links as they might select over others (particularly radio and checkboxes)\n\t\tcontainer.find('input').removeAttr('name');\n\n\t\tcontainer.appendTo(insertEl);\n\t\tthis.s.heights.row = $('tr', tbody).eq(1).outerHeight();\n\n\t\tcontainer.remove();\n\t},\n\n\t/**\n\t * Draw callback function which is fired when the DataTable is redrawn. The main function of\n\t * this method is to position the drawn table correctly the scrolling container for the rows\n\t * that is displays as a result of the scrolling position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_draw: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTableHeight = $(this.s.dt.nTable).height(),\n\t\t\tdisplayStart = this.s.dt._iDisplayStart,\n\t\t\tdisplayLen = this.s.dt._iDisplayLength,\n\t\t\tdisplayEnd = this.s.dt.fnRecordsDisplay(),\n\t\t\tviewportEndY = iScrollTop + heights.viewport;\n\n\t\t// Disable the scroll event listener while we are updating the DOM\n\t\tthis.s.skip = true;\n\n\t\t// If paging is reset\n\t\tif (\n\t\t\t(this.s.dt.bSorted || this.s.dt.bFiltered) &&\n\t\t\tdisplayStart === 0 &&\n\t\t\t!this.s.dt._drawHold\n\t\t) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\tiScrollTop =\n\t\t\tthis.s.scrollType === 'jump'\n\t\t\t\t? this._domain(\n\t\t\t\t\t'virtualToPhysical',\n\t\t\t\t\tthis.s.topRowFloat * heights.row\n\t\t\t\t)\n\t\t\t\t: iScrollTop;\n\n\t\t// Store positional information so positional calculations can be based\n\t\t// upon the current table draw position\n\t\tthis.s.baseScrollTop = iScrollTop;\n\t\tthis.s.baseRowTop = this.s.topRowFloat;\n\n\t\t// Position the table in the virtual scroller\n\t\tvar tableTop =\n\t\t\tiScrollTop - (this.s.topRowFloat - displayStart) * heights.row;\n\t\tif (displayStart === 0) {\n\t\t\ttableTop = 0;\n\t\t}\n\t\telse if (displayStart + displayLen >= displayEnd) {\n\t\t\ttableTop = heights.scroll - iTableHeight;\n\t\t}\n\t\telse {\n\t\t\tvar iTableBottomY = tableTop + iTableHeight;\n\t\t\tif (iTableBottomY < viewportEndY) {\n\t\t\t\t// The last row of the data is above the end of the viewport.\n\t\t\t\t// This means the background is visible, which is not what the user expects.\n\t\t\t\tvar newTableTop = viewportEndY - iTableHeight;\n\t\t\t\tvar diffPx = newTableTop - tableTop;\n\t\t\t\tthis.s.baseScrollTop += diffPx + 1; // Update start row number in footer.\n\t\t\t\ttableTop = newTableTop; // Move table so last line of data is at the bottom of the viewport.\n\t\t\t}\n\t\t}\n\n\t\tthis.dom.table.style.top = tableTop + 'px';\n\n\t\t/* Cache some information for the scroller */\n\t\tthis.s.tableTop = tableTop;\n\t\tthis.s.tableBottom = iTableHeight + this.s.tableTop;\n\n\t\t// Calculate the boundaries for where a redraw will be triggered by the\n\t\t// scroll event listener\n\t\tvar boundaryPx = (iScrollTop - this.s.tableTop) * this.s.boundaryScale;\n\t\tthis.s.redrawTop = iScrollTop - boundaryPx;\n\t\tthis.s.redrawBottom =\n\t\t\tiScrollTop + boundaryPx >\n\t\t\theights.scroll - heights.viewport - heights.row\n\t\t\t\t? heights.scroll - heights.viewport - heights.row\n\t\t\t\t: iScrollTop + boundaryPx;\n\n\t\tthis.s.skip = false;\n\n\t\tif (that.s.ingnoreScroll) {\n\t\t\t// Restore the scrolling position that was saved by DataTable's state\n\t\t\t// saving Note that this is done on the second draw when data is Ajax\n\t\t\t// sourced, and the first draw when DOM soured\n\t\t\tif (\n\t\t\t\tthis.s.dt.oFeatures.bStateSave &&\n\t\t\t\tthis.s.dt.oLoadedState !== null &&\n\t\t\t\ttypeof this.s.dt.oLoadedState.scroller != 'undefined'\n\t\t\t) {\n\t\t\t\t// A quirk of DataTables is that the draw callback will occur on an\n\t\t\t\t// empty set if Ajax sourced, but not if server-side processing.\n\t\t\t\tvar ajaxSourced =\n\t\t\t\t\t(this.s.dt.sAjaxSource || that.s.dt.ajax) &&\n\t\t\t\t\t!this.s.dt.oFeatures.bServerSide\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: false;\n\n\t\t\t\tif (\n\t\t\t\t\t(ajaxSourced && this.s.dt.iDraw >= 2) ||\n\t\t\t\t\t(!ajaxSourced && this.s.dt.iDraw >= 1)\n\t\t\t\t) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t$(that.dom.scroller).scrollTop(\n\t\t\t\t\t\t\tthat.s.dt.oLoadedState.scroller.scrollTop\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// In order to prevent layout thrashing we need another\n\t\t\t\t\t\t// small delay\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthat.s.ingnoreScroll = false;\n\t\t\t}\n\t\t}\n\n\t\t// Because of the order of the DT callbacks, the info update will\n\t\t// take precedence over the one we want here. So a 'thread' break is\n\t\t// needed.  Only add the thread break if bInfo is set\n\t\tif (this.s.dt.oFeatures.bInfo) {\n\t\t\tsetTimeout(function () {\n\t\t\t\tthat._info.call(that);\n\t\t\t}, 0);\n\t\t}\n\n\t\t$(this.s.dt.nTable).triggerHandler('position.dts.dt', tableTop);\n\t},\n\n\t/**\n\t * Convert from one domain to another. The physical domain is the actual\n\t * pixel count on the screen, while the virtual is if we had browsers which\n\t * had scrolling containers of infinite height (i.e. the absolute value)\n\t *\n\t *  @param {string} dir Domain transform direction, `virtualToPhysical` or\n\t *    `physicalToVirtual`\n\t *  @returns {number} Calculated transform\n\t *  @private\n\t */\n\t_domain: function (dir, val) {\n\t\tvar heights = this.s.heights;\n\t\tvar diff;\n\t\tvar magic = 10000; // the point at which the non-linear calculations start to happen\n\n\t\t// If the virtual and physical height match, then we use a linear\n\t\t// transform between the two, allowing the scrollbar to be linear\n\t\tif (heights.virtual === heights.scroll) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// In the first 10k pixels and the last 10k pixels, we want the scrolling\n\t\t// to be linear. After that it can be non-linear. It would be unusual for\n\t\t// anyone to mouse wheel through that much.\n\t\tif (val < magic) {\n\t\t\treturn val;\n\t\t}\n\t\telse if (\n\t\t\tdir === 'virtualToPhysical' &&\n\t\t\tval >= heights.virtual - magic\n\t\t) {\n\t\t\tdiff = heights.virtual - val;\n\t\t\treturn heights.scroll - diff;\n\t\t}\n\t\telse if (dir === 'physicalToVirtual' && val >= heights.scroll - magic) {\n\t\t\tdiff = heights.scroll - val;\n\t\t\treturn heights.virtual - diff;\n\t\t}\n\n\t\t// Otherwise, we want a non-linear scrollbar to take account of the\n\t\t// redrawing regions at the start and end of the table, otherwise these\n\t\t// can stutter badly - on large tables 30px (for example) scroll might\n\t\t// be hundreds of rows, so the table would be redrawing every few px at\n\t\t// the start and end. Use a simple linear eq. to stop this, effectively\n\t\t// causing a kink in the scrolling ratio. It does mean the scrollbar is\n\t\t// non-linear, but with such massive data sets, the scrollbar is going\n\t\t// to be a best guess anyway\n\t\tvar m =\n\t\t\t(heights.virtual - magic - magic) /\n\t\t\t(heights.scroll - magic - magic);\n\t\tvar c = magic - m * magic;\n\n\t\treturn dir === 'virtualToPhysical' ? (val - c) / m : m * val + c;\n\t},\n\n\t/**\n\t * Update any information elements that are controlled by the DataTable based on the scrolling\n\t * viewport and what rows are visible in it. This function basically acts in the same way as\n\t * _fnUpdateInfo in DataTables, and effectively replaces that function.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_info: function () {\n\t\tif (!this.s.dt.oFeatures.bInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dt = this.s.dt,\n\t\t\tdtApi = this.s.dtApi,\n\t\t\tlanguage = dt.oLanguage,\n\t\t\tinfo = dtApi.page.info(),\n\t\t\ttotal = info.recordsDisplay,\n\t\t\tmax = info.recordsTotal;\n\n\t\t// If the scroll type is `cont` (continuous) we need to use `baseRowTop`, which\n\t\t// also means we need to work out the difference between the current scroll position\n\t\t// and the \"base\" for when it was required\n\t\tvar diffRows = (this.s.lastScrollTop - this.s.baseScrollTop) / this.s.heights.row;\n\t\tvar start = Math.floor(this.s.baseRowTop + diffRows) + 1;\n\n\t\t// For a jump scroll type, we just use the straightforward calculation based on\n\t\t// `topRowFloat`\n\t\tif (this.s.scrollType === 'jump') {\n\t\t\tstart = Math.floor(this.s.topRowFloat) + 1;\n\t\t}\n\n\t\tvar\n\t\t\tpossibleEnd = start + Math.floor(this.s.heights.viewport / this.s.heights.row),\n\t\t\tend = possibleEnd > total ? total : possibleEnd,\n\t\t\tresult;\n\n\t\tif (total === 0 && total == max) {\n\t\t\t/* Empty record set */\n\t\t\tresult = language.sInfoEmpty + language.sInfoPostFix;\n\t\t}\n\t\telse if (total === 0) {\n\t\t\t// Empty record set after filtering\n\t\t\tresult =\n\t\t\t\tlanguage.sInfoEmpty +\n\t\t\t\t' ' +\n\t\t\t\tlanguage.sInfoFiltered +\n\t\t\t\tlanguage.sInfoPostFix;\n\t\t}\n\t\telse if (total == max) {\n\t\t\t// Normal record set\n\t\t\tresult = language.sInfo + language.sInfoPostFix;\n\t\t}\n\t\telse {\n\t\t\t// Record set after filtering\n\t\t\tresult = language.sInfo + ' ' + language.sInfoFiltered + language.sInfoPostFix;\n\t\t}\n\n\t\tresult = this._macros(result, start, end, max, total);\n\n\t\tvar callback = language.fnInfoCallback;\n\t\tif (callback) {\n\t\t\tresult = callback.call(\n\t\t\t\tdt.oInstance,\n\t\t\t\tdt,\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tmax,\n\t\t\t\ttotal,\n\t\t\t\tresult\n\t\t\t);\n\t\t}\n\n\t\t// DT 1.x features\n\t\tvar n = dt.aanFeatures.i;\n\t\tif (typeof n != 'undefined') {\n\t\t\tfor (var i = 0, iLen = n.length; i < iLen; i++) {\n\t\t\t\t$(n[i]).html(result);\n\t\t\t}\n\n\t\t\t$(dt.nTable).triggerHandler('info.dt');\n\t\t}\n\n\t\t// DT 2.x features\n\t\t$('div.dt-info', dtApi.table().container()).each(function () {\n\t\t\t$(this).html(result);\n\t\t\tdtApi.trigger('info', [dtApi.settings()[0], this, result]);\n\t\t});\n\t},\n\n\t/**\n\t * String replacement for info display. Basically the same as what DataTables does.\n\t *\n\t * @param {*} str\n\t * @param {*} start\n\t * @param {*} end\n\t * @param {*} max\n\t * @param {*} total\n\t * @returns Formatted string\n\t */\n\t_macros: function (str, start, end, max, total) {\n\t\tvar api = this.s.dtApi;\n\t\tvar settings = this.s.dt;\n\t\tvar formatter = settings.fnFormatNumber;\n\n\t\treturn str\n\t\t\t.replace(/_START_/g, formatter.call(settings, start))\n\t\t\t.replace(/_END_/g, formatter.call(settings, end))\n\t\t\t.replace(/_MAX_/g, formatter.call(settings, max))\n\t\t\t.replace(/_TOTAL_/g, formatter.call(settings, total))\n\t\t\t.replace(/_ENTRIES_/g, api.i18n('entries', ''))\n\t\t\t.replace(/_ENTRIES-MAX_/g, api.i18n('entries', '', max))\n\t\t\t.replace(/_ENTRIES-TOTAL_/g, api.i18n('entries', '', total));\n\t},\n\n\t/**\n\t * Parse CSS height property string as number\n\t *\n\t * An attempt is made to parse the string as a number. Currently supported units are 'px',\n\t * 'vh', and 'rem'. 'em' is partially supported; it works as long as the parent element's\n\t * font size matches the body element. Zero is returned for unrecognized strings.\n\t *  @param {string} cssHeight CSS height property string\n\t *  @returns {number} height\n\t *  @private\n\t */\n\t_parseHeight: function (cssHeight) {\n\t\tvar height;\n\t\tvar matches = /^([+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+))(px|em|rem|vh)$/.exec(\n\t\t\tcssHeight\n\t\t);\n\n\t\tif (matches === null) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar value = parseFloat(matches[1]);\n\t\tvar unit = matches[2];\n\n\t\tif (unit === 'px') {\n\t\t\theight = value;\n\t\t}\n\t\telse if (unit === 'vh') {\n\t\t\theight = (value / 100) * $(window).height();\n\t\t}\n\t\telse if (unit === 'rem') {\n\t\t\theight = value * parseFloat($(':root').css('font-size'));\n\t\t}\n\t\telse if (unit === 'em') {\n\t\t\theight = value * parseFloat($('body').css('font-size'));\n\t\t}\n\n\t\treturn height ? height : 0;\n\t},\n\n\t/**\n\t * Scrolling function - fired whenever the scrolling position is changed.\n\t * This method needs to use the stored values to see if the table should be\n\t * redrawn as we are moving towards the end of the information that is\n\t * currently drawn or not. If needed, then it will redraw the table based on\n\t * the new position.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scroll: function () {\n\t\tvar that = this,\n\t\t\theights = this.s.heights,\n\t\t\tiScrollTop = this.dom.scroller.scrollTop,\n\t\t\tiTopRow;\n\n\t\tif (this.s.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.s.ingnoreScroll) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (iScrollTop === this.s.lastScrollTop) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* If the table has been sorted or filtered, then we use the redraw that\n\t\t * DataTables as done, rather than performing our own\n\t\t */\n\t\tif (this.s.dt.bFiltered || this.s.dt.bSorted) {\n\t\t\tthis.s.lastScrollTop = 0;\n\t\t\treturn;\n\t\t}\n\n\t\t/* We don't want to state save on every scroll event - that's heavy\n\t\t * handed, so use a timeout to update the state saving only when the\n\t\t * scrolling has finished\n\t\t */\n\t\tclearTimeout(this.s.stateTO);\n\t\tthis.s.stateTO = setTimeout(function () {\n\t\t\tthat.s.dtApi.state.save();\n\n\t\t\t// We can also use this to ensure that the `info` element is correct\n\t\t\t// since there can be a little scroll after the last scroll event!\n\t\t\tthat._info();\n\t\t}, 250);\n\n\t\tthis.s.scrollType =\n\t\t\tMath.abs(iScrollTop - this.s.lastScrollTop) > heights.viewport\n\t\t\t\t? 'jump'\n\t\t\t\t: 'cont';\n\n\t\tthis.s.topRowFloat =\n\t\t\tthis.s.scrollType === 'cont'\n\t\t\t\t? this.pixelsToRow(iScrollTop, false, false)\n\t\t\t\t: this._domain('physicalToVirtual', iScrollTop) / heights.row;\n\n\t\tif (this.s.topRowFloat < 0) {\n\t\t\tthis.s.topRowFloat = 0;\n\t\t}\n\n\t\t/* Check if the scroll point is outside the trigger boundary which would required\n\t\t * a DataTables redraw\n\t\t */\n\t\tif (\n\t\t\tthis.s.forceReposition ||\n\t\t\tiScrollTop < this.s.redrawTop ||\n\t\t\tiScrollTop > this.s.redrawBottom\n\t\t) {\n\t\t\tvar preRows = Math.ceil(\n\t\t\t\t((this.s.displayBuffer - 1) / 2) * this.s.viewportRows\n\t\t\t);\n\n\t\t\tiTopRow = parseInt(this.s.topRowFloat, 10) - preRows;\n\t\t\tthis.s.forceReposition = false;\n\n\t\t\tif (iTopRow <= 0) {\n\t\t\t\t/* At the start of the table */\n\t\t\t\tiTopRow = 0;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\tiTopRow + this.s.dt._iDisplayLength >\n\t\t\t\tthis.s.dt.fnRecordsDisplay()\n\t\t\t) {\n\t\t\t\t/* At the end of the table */\n\t\t\t\tiTopRow =\n\t\t\t\t\tthis.s.dt.fnRecordsDisplay() - this.s.dt._iDisplayLength;\n\t\t\t\tif (iTopRow < 0) {\n\t\t\t\t\tiTopRow = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (iTopRow % 2 !== 0) {\n\t\t\t\t// For the row-striping classes (odd/even) we want only to start\n\t\t\t\t// on evens otherwise the stripes will change between draws and\n\t\t\t\t// look rubbish\n\t\t\t\tiTopRow++;\n\t\t\t}\n\n\t\t\t// Store calcuated value, in case the following condition is not met, but so\n\t\t\t// that the draw function will still use it.\n\t\t\tthis.s.targetTop = iTopRow;\n\n\t\t\tif (iTopRow != this.s.dt._iDisplayStart) {\n\t\t\t\t/* Cache the new table position for quick lookups */\n\t\t\t\tthis.s.tableTop = $(this.s.dt.nTable).offset().top;\n\t\t\t\tthis.s.tableBottom =\n\t\t\t\t\t$(this.s.dt.nTable).height() + this.s.tableTop;\n\n\t\t\t\tvar draw = function () {\n\t\t\t\t\tthat.s.dt._iDisplayStart = that.s.targetTop;\n\t\t\t\t\tthat.s.dtApi.draw('page');\n\t\t\t\t};\n\n\t\t\t\t/* Do the DataTables redraw based on the calculated start point - note that when\n\t\t\t\t * using server-side processing we introduce a small delay to not DoS the server...\n\t\t\t\t */\n\t\t\t\tif (this.s.dt.oFeatures.bServerSide) {\n\t\t\t\t\tthis.s.forceReposition = true;\n\n\t\t\t\t\t// This is used only for KeyTable and is not currently publicly\n\t\t\t\t\t// documented. Open question - is it useful for anything else?\n\t\t\t\t\t$(this.s.dt.nTable).triggerHandler('scroller-will-draw.dt');\n\n\t\t\t\t\tif (DataTable.versionCheck('2')) {\n\t\t\t\t\t\tthat.s.dtApi.processing(true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.s.dt.oApi._fnProcessingDisplay(this.s.dt, true);\n\t\t\t\t\t}\n\n\t\t\t\t\tclearTimeout(this.s.drawTO);\n\t\t\t\t\tthis.s.drawTO = setTimeout(draw, this.s.serverWait);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.s.topRowFloat = this.pixelsToRow(iScrollTop, false, true);\n\t\t}\n\n\t\t/* Update the table's information display for what is now in the viewport */\n\t\tthis._info();\n\n\t\tthis.s.lastScrollTop = iScrollTop;\n\t\tthis.s.stateSaveThrottle();\n\n\t\tif (this.s.scrollType === 'jump' && this.s.mousedown) {\n\t\t\tthis.s.labelVisible = true;\n\t\t}\n\t\tif (this.s.labelVisible) {\n\t\t\tvar labelFactor =\n\t\t\t\t(heights.viewport - heights.labelHeight - heights.xbar) /\n\t\t\t\theights.scroll;\n\n\t\t\tthis.dom.label\n\t\t\t\t.html(\n\t\t\t\t\tthis.s.dt.fnFormatNumber(\n\t\t\t\t\t\tparseInt(this.s.topRowFloat, 10) + 1\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.css('top', iScrollTop + iScrollTop * labelFactor)\n\t\t\t\t.css('display', 'block');\n\t\t}\n\t},\n\n\t/**\n\t * Force the scrolling container to have height beyond that of just the\n\t * table that has been drawn so the user can scroll the whole data set.\n\t *\n\t * Note that if the calculated required scrolling height exceeds a maximum\n\t * value (1 million pixels - hard-coded) the forcing element will be set\n\t * only to that maximum value and virtual / physical domain transforms will\n\t * be used to allow Scroller to display tables of any number of records.\n\t *  @returns {void}\n\t *  @private\n\t */\n\t_scrollForce: function () {\n\t\tvar heights = this.s.heights;\n\t\tvar max = 1000000;\n\n\t\theights.virtual = heights.row * this.s.dt.fnRecordsDisplay();\n\t\theights.scroll = heights.virtual;\n\n\t\tif (heights.scroll > max) {\n\t\t\theights.scroll = max;\n\t\t}\n\n\t\t// Minimum height so there is always a row visible (the 'no rows found'\n\t\t// if reduced to zero filtering)\n\t\tthis.dom.force.style.height =\n\t\t\theights.scroll > this.s.heights.row\n\t\t\t\t? heights.scroll + 'px'\n\t\t\t\t: this.s.heights.row + 'px';\n\t}\n});\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Statics\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller default settings for initialisation\n *  @namespace\n *  @name Scroller.defaults\n *  @static\n */\nScroller.defaults = {\n\t/**\n\t * Scroller uses the boundary scaling factor to decide when to redraw the table - which it\n\t * typically does before you reach the end of the currently loaded data set (in order to\n\t * allow the data to look continuous to a user scrolling through the data). If given as 0\n\t * then the table will be redrawn whenever the viewport is scrolled, while 1 would not\n\t * redraw the table until the currently loaded data has all been shown. You will want\n\t * something in the middle - the default factor of 0.5 is usually suitable.\n\t *  @type     float\n\t *  @default  0.5\n\t *  @static\n\t */\n\tboundaryScale: 0.5,\n\n\t/**\n\t * The display buffer is what Scroller uses to calculate how many rows it should pre-fetch\n\t * for scrolling. Scroller automatically adjusts DataTables' display length to pre-fetch\n\t * rows that will be shown in \"near scrolling\" (i.e. just beyond the current display area).\n\t * The value is based upon the number of rows that can be displayed in the viewport (i.e.\n\t * a value of 1), and will apply the display range to records before before and after the\n\t * current viewport - i.e. a factor of 3 will allow Scroller to pre-fetch 1 viewport's worth\n\t * of rows before the current viewport, the current viewport's rows and 1 viewport's worth\n\t * of rows after the current viewport. Adjusting this value can be useful for ensuring\n\t * smooth scrolling based on your data set.\n\t *  @type     int\n\t *  @default  9\n\t *  @static\n\t */\n\tdisplayBuffer: 9,\n\n\t/**\n\t * Scroller will attempt to automatically calculate the height of rows for it's internal\n\t * calculations. However the height that is used can be overridden using this parameter.\n\t *  @type     int|string\n\t *  @default  auto\n\t *  @static\n\t */\n\trowHeight: 'auto',\n\n\t/**\n\t * When using server-side processing, Scroller will wait a small amount of time to allow\n\t * the scrolling to finish before requesting more data from the server. This prevents\n\t * you from DoSing your own server! The wait time can be configured by this parameter.\n\t *  @type     int\n\t *  @default  200\n\t *  @static\n\t */\n\tserverWait: 200\n};\n\nScroller.oDefaults = Scroller.defaults;\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Constants\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n/**\n * Scroller version\n *  @type      String\n *  @default   See code\n *  @name      Scroller.version\n *  @static\n */\nScroller.version = '2.4.3';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Initialisation\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\n// Attach a listener to the document which listens for DataTables initialisation\n// events so we can automatically initialise\n$(document).on('preInit.dt.dtscroller', function (e, settings) {\n\tif (e.namespace !== 'dt') {\n\t\treturn;\n\t}\n\n\tvar init = settings.oInit.scroller;\n\tvar defaults = DataTable.defaults.scroller;\n\n\tif (init || defaults) {\n\t\tvar opts = $.extend({}, init, defaults);\n\n\t\tif (init !== false) {\n\t\t\tnew Scroller(settings, opts);\n\t\t}\n\t}\n});\n\n// Attach Scroller to DataTables so it can be accessed as an 'extra'\n$.fn.dataTable.Scroller = Scroller;\n$.fn.DataTable.Scroller = Scroller;\n\n// DataTables 1.10 API method aliases\nvar Api = $.fn.dataTable.Api;\n\nApi.register('scroller()', function () {\n\treturn this;\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().rowToPixels()', function (rowIdx, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.rowToPixels(rowIdx, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// Undocumented and deprecated - is it actually useful at all?\nApi.register('scroller().pixelsToRow()', function (pixels, intParse, virtual) {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pixelsToRow(pixels, intParse, virtual);\n\t}\n\t// undefined\n});\n\n// `scroller().scrollToRow()` is undocumented and deprecated. Use `scroller.toPosition()\nApi.register(\n\t['scroller().scrollToRow()', 'scroller.toPosition()'],\n\tfunction (idx, ani) {\n\t\tthis.iterator('table', function (ctx) {\n\t\t\tif (ctx.oScroller) {\n\t\t\t\tctx.oScroller.scrollToRow(idx, ani);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n);\n\nApi.register('row().scrollTo()', function (ani) {\n\tvar that = this;\n\n\tthis.iterator('row', function (ctx, rowIdx) {\n\t\tif (ctx.oScroller) {\n\t\t\tvar displayIdx = that\n\t\t\t\t.rows({ order: 'applied', search: 'applied' })\n\t\t\t\t.indexes()\n\t\t\t\t.indexOf(rowIdx);\n\n\t\t\tctx.oScroller.scrollToRow(displayIdx, ani);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.measure()', function (redraw) {\n\tthis.iterator('table', function (ctx) {\n\t\tif (ctx.oScroller) {\n\t\t\tctx.oScroller.measure(redraw);\n\t\t}\n\t});\n\n\treturn this;\n});\n\nApi.register('scroller.page()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && ctx[0].oScroller) {\n\t\treturn ctx[0].oScroller.pageInfo();\n\t}\n\t// undefined\n});\n\n\nreturn DataTable;\n}));\n", "(function(global, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : (global = typeof globalThis !== \"undefined\" ? globalThis : global || self, \n  factory(global.ActiveStorage = {}));\n})(this, (function(exports) {\n  \"use strict\";\n  var sparkMd5 = {\n    exports: {}\n  };\n  (function(module, exports) {\n    (function(factory) {\n      {\n        module.exports = factory();\n      }\n    })((function(undefined$1) {\n      var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n      function md5cycle(x, k) {\n        var a = x[0], b = x[1], c = x[2], d = x[3];\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n      }\n      function md5blk(s) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n      }\n      function md5blk_array(a) {\n        var md5blks = [], i;\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n      }\n      function md51(s) {\n        var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function md51_array(a) {\n        var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n        length = a.length;\n        tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= a[i] << (i % 4 << 3);\n        }\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(state, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n      function rhex(n) {\n        var s = \"\", j;\n        for (j = 0; j < 4; j += 1) {\n          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n        }\n        return s;\n      }\n      function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n          x[i] = rhex(x[i]);\n        }\n        return x.join(\"\");\n      }\n      if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n      if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n        (function() {\n          function clamp(val, length) {\n            val = val | 0 || 0;\n            if (val < 0) {\n              return Math.max(val + length, 0);\n            }\n            return Math.min(val, length);\n          }\n          ArrayBuffer.prototype.slice = function(from, to) {\n            var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n            if (to !== undefined$1) {\n              end = clamp(to, length);\n            }\n            if (begin > end) {\n              return new ArrayBuffer(0);\n            }\n            num = end - begin;\n            target = new ArrayBuffer(num);\n            targetArray = new Uint8Array(target);\n            sourceArray = new Uint8Array(this, begin, num);\n            targetArray.set(sourceArray);\n            return target;\n          };\n        })();\n      }\n      function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n          str = unescape(encodeURIComponent(str));\n        }\n        return str;\n      }\n      function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n        for (i = 0; i < length; i += 1) {\n          arr[i] = str.charCodeAt(i);\n        }\n        return returnUInt8Array ? arr : buff;\n      }\n      function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n      }\n      function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n        return returnUInt8Array ? result : result.buffer;\n      }\n      function hexToBinaryString(hex) {\n        var bytes = [], length = hex.length, x;\n        for (x = 0; x < length - 1; x += 2) {\n          bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n        return String.fromCharCode.apply(String, bytes);\n      }\n      function SparkMD5() {\n        this.reset();\n      }\n      SparkMD5.prototype.append = function(str) {\n        this.appendBinary(toUtf8(str));\n        return this;\n      };\n      SparkMD5.prototype.appendBinary = function(contents) {\n        this._buff += contents;\n        this._length += contents.length;\n        var length = this._buff.length, i;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n        this._buff = this._buff.substring(i - 64);\n        return this;\n      };\n      SparkMD5.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.prototype.reset = function() {\n        this._buff = \"\";\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.prototype.getState = function() {\n        return {\n          buff: this._buff,\n          length: this._length,\n          hash: this._hash.slice()\n        };\n      };\n      SparkMD5.prototype.setState = function(state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n        return this;\n      };\n      SparkMD5.prototype.destroy = function() {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n      };\n      SparkMD5.prototype._finish = function(tail, length) {\n        var i = length, tmp, lo, hi;\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n        if (i > 55) {\n          md5cycle(this._hash, tail);\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n      };\n      SparkMD5.hash = function(str, raw) {\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n      };\n      SparkMD5.hashBinary = function(content, raw) {\n        var hash = md51(content), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      SparkMD5.ArrayBuffer = function() {\n        this.reset();\n      };\n      SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n        this._length += arr.byteLength;\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n        var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff[i] << (i % 4 << 3);\n        }\n        this._finish(tail, length);\n        ret = hex(this._hash);\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n        this.reset();\n        return ret;\n      };\n      SparkMD5.ArrayBuffer.prototype.reset = function() {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n        return this;\n      };\n      SparkMD5.ArrayBuffer.prototype.getState = function() {\n        var state = SparkMD5.prototype.getState.call(this);\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n        return state;\n      };\n      SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n        return SparkMD5.prototype.setState.call(this, state);\n      };\n      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n      SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n      return SparkMD5;\n    }));\n  })(sparkMd5);\n  var SparkMD5 = sparkMd5.exports;\n  const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n  class FileChecksum {\n    static create(file, callback) {\n      const instance = new FileChecksum(file);\n      instance.create(callback);\n    }\n    constructor(file) {\n      this.file = file;\n      this.chunkSize = 2097152;\n      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n      this.chunkIndex = 0;\n    }\n    create(callback) {\n      this.callback = callback;\n      this.md5Buffer = new SparkMD5.ArrayBuffer;\n      this.fileReader = new FileReader;\n      this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n      this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n      this.readNextChunk();\n    }\n    fileReaderDidLoad(event) {\n      this.md5Buffer.append(event.target.result);\n      if (!this.readNextChunk()) {\n        const binaryDigest = this.md5Buffer.end(true);\n        const base64digest = btoa(binaryDigest);\n        this.callback(null, base64digest);\n      }\n    }\n    fileReaderDidError(event) {\n      this.callback(`Error reading ${this.file.name}`);\n    }\n    readNextChunk() {\n      if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n        const start = this.chunkIndex * this.chunkSize;\n        const end = Math.min(start + this.chunkSize, this.file.size);\n        const bytes = fileSlice.call(this.file, start, end);\n        this.fileReader.readAsArrayBuffer(bytes);\n        this.chunkIndex++;\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }\n  function getMetaValue(name) {\n    const element = findElement(document.head, `meta[name=\"${name}\"]`);\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n  function findElements(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    const elements = root.querySelectorAll(selector);\n    return toArray(elements);\n  }\n  function findElement(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n    return root.querySelector(selector);\n  }\n  function dispatchEvent(element, type, eventInit = {}) {\n    const {disabled: disabled} = element;\n    const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n    const event = document.createEvent(\"Event\");\n    event.initEvent(type, bubbles || true, cancelable || true);\n    event.detail = detail || {};\n    try {\n      element.disabled = false;\n      element.dispatchEvent(event);\n    } finally {\n      element.disabled = disabled;\n    }\n    return event;\n  }\n  function toArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    } else if (Array.from) {\n      return Array.from(value);\n    } else {\n      return [].slice.call(value);\n    }\n  }\n  class BlobRecord {\n    constructor(file, checksum, url, customHeaders = {}) {\n      this.file = file;\n      this.attributes = {\n        filename: file.name,\n        content_type: file.type || \"application/octet-stream\",\n        byte_size: file.size,\n        checksum: checksum\n      };\n      this.xhr = new XMLHttpRequest;\n      this.xhr.open(\"POST\", url, true);\n      this.xhr.responseType = \"json\";\n      this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n      this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      Object.keys(customHeaders).forEach((headerKey => {\n        this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n      }));\n      const csrfToken = getMetaValue(\"csrf-token\");\n      if (csrfToken != undefined) {\n        this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n      }\n      this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n      this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n    }\n    get status() {\n      return this.xhr.status;\n    }\n    get response() {\n      const {responseType: responseType, response: response} = this.xhr;\n      if (responseType == \"json\") {\n        return response;\n      } else {\n        return JSON.parse(response);\n      }\n    }\n    create(callback) {\n      this.callback = callback;\n      this.xhr.send(JSON.stringify({\n        blob: this.attributes\n      }));\n    }\n    requestDidLoad(event) {\n      if (this.status >= 200 && this.status < 300) {\n        const {response: response} = this;\n        const {direct_upload: direct_upload} = response;\n        delete response.direct_upload;\n        this.attributes = response;\n        this.directUploadData = direct_upload;\n        this.callback(null, this.toJSON());\n      } else {\n        this.requestDidError(event);\n      }\n    }\n    requestDidError(event) {\n      this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n    }\n    toJSON() {\n      const result = {};\n      for (const key in this.attributes) {\n        result[key] = this.attributes[key];\n      }\n      return result;\n    }\n  }\n  class BlobUpload {\n    constructor(blob) {\n      this.blob = blob;\n      this.file = blob.file;\n      const {url: url, headers: headers} = blob.directUploadData;\n      this.xhr = new XMLHttpRequest;\n      this.xhr.open(\"PUT\", url, true);\n      this.xhr.responseType = \"text\";\n      for (const key in headers) {\n        this.xhr.setRequestHeader(key, headers[key]);\n      }\n      this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n      this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n    }\n    create(callback) {\n      this.callback = callback;\n      this.xhr.send(this.file.slice());\n    }\n    requestDidLoad(event) {\n      const {status: status, response: response} = this.xhr;\n      if (status >= 200 && status < 300) {\n        this.callback(null, response);\n      } else {\n        this.requestDidError(event);\n      }\n    }\n    requestDidError(event) {\n      this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n    }\n  }\n  let id = 0;\n  class DirectUpload {\n    constructor(file, url, delegate, customHeaders = {}) {\n      this.id = ++id;\n      this.file = file;\n      this.url = url;\n      this.delegate = delegate;\n      this.customHeaders = customHeaders;\n    }\n    create(callback) {\n      FileChecksum.create(this.file, ((error, checksum) => {\n        if (error) {\n          callback(error);\n          return;\n        }\n        const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n        notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n        blob.create((error => {\n          if (error) {\n            callback(error);\n          } else {\n            const upload = new BlobUpload(blob);\n            notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n            upload.create((error => {\n              if (error) {\n                callback(error);\n              } else {\n                callback(null, blob.toJSON());\n              }\n            }));\n          }\n        }));\n      }));\n    }\n  }\n  function notify(object, methodName, ...messages) {\n    if (object && typeof object[methodName] == \"function\") {\n      return object[methodName](...messages);\n    }\n  }\n  class DirectUploadController {\n    constructor(input, file) {\n      this.input = input;\n      this.file = file;\n      this.directUpload = new DirectUpload(this.file, this.url, this);\n      this.dispatch(\"initialize\");\n    }\n    start(callback) {\n      const hiddenInput = document.createElement(\"input\");\n      hiddenInput.type = \"hidden\";\n      hiddenInput.name = this.input.name;\n      this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n      this.dispatch(\"start\");\n      this.directUpload.create(((error, attributes) => {\n        if (error) {\n          hiddenInput.parentNode.removeChild(hiddenInput);\n          this.dispatchError(error);\n        } else {\n          hiddenInput.value = attributes.signed_id;\n        }\n        this.dispatch(\"end\");\n        callback(error);\n      }));\n    }\n    uploadRequestDidProgress(event) {\n      const progress = event.loaded / event.total * 90;\n      if (progress) {\n        this.dispatch(\"progress\", {\n          progress: progress\n        });\n      }\n    }\n    get url() {\n      return this.input.getAttribute(\"data-direct-upload-url\");\n    }\n    dispatch(name, detail = {}) {\n      detail.file = this.file;\n      detail.id = this.directUpload.id;\n      return dispatchEvent(this.input, `direct-upload:${name}`, {\n        detail: detail\n      });\n    }\n    dispatchError(error) {\n      const event = this.dispatch(\"error\", {\n        error: error\n      });\n      if (!event.defaultPrevented) {\n        alert(error);\n      }\n    }\n    directUploadWillCreateBlobWithXHR(xhr) {\n      this.dispatch(\"before-blob-request\", {\n        xhr: xhr\n      });\n    }\n    directUploadWillStoreFileWithXHR(xhr) {\n      this.dispatch(\"before-storage-request\", {\n        xhr: xhr\n      });\n      xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n      xhr.upload.addEventListener(\"loadend\", (() => {\n        this.simulateResponseProgress(xhr);\n      }));\n    }\n    simulateResponseProgress(xhr) {\n      let progress = 90;\n      const startTime = Date.now();\n      const updateProgress = () => {\n        const elapsed = Date.now() - startTime;\n        const estimatedResponseTime = this.estimateResponseTime();\n        const responseProgress = Math.min(elapsed / estimatedResponseTime, 1);\n        progress = 90 + responseProgress * 9;\n        this.dispatch(\"progress\", {\n          progress: progress\n        });\n        if (xhr.readyState !== XMLHttpRequest.DONE && progress < 99) {\n          requestAnimationFrame(updateProgress);\n        }\n      };\n      xhr.addEventListener(\"loadend\", (() => {\n        this.dispatch(\"progress\", {\n          progress: 100\n        });\n      }));\n      requestAnimationFrame(updateProgress);\n    }\n    estimateResponseTime() {\n      const fileSize = this.file.size;\n      const MB = 1024 * 1024;\n      if (fileSize < MB) {\n        return 1e3;\n      } else if (fileSize < 10 * MB) {\n        return 2e3;\n      } else {\n        return 3e3 + fileSize / MB * 50;\n      }\n    }\n  }\n  const inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n  class DirectUploadsController {\n    constructor(form) {\n      this.form = form;\n      this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n    }\n    start(callback) {\n      const controllers = this.createDirectUploadControllers();\n      const startNextController = () => {\n        const controller = controllers.shift();\n        if (controller) {\n          controller.start((error => {\n            if (error) {\n              callback(error);\n              this.dispatch(\"end\");\n            } else {\n              startNextController();\n            }\n          }));\n        } else {\n          callback();\n          this.dispatch(\"end\");\n        }\n      };\n      this.dispatch(\"start\");\n      startNextController();\n    }\n    createDirectUploadControllers() {\n      const controllers = [];\n      this.inputs.forEach((input => {\n        toArray(input.files).forEach((file => {\n          const controller = new DirectUploadController(input, file);\n          controllers.push(controller);\n        }));\n      }));\n      return controllers;\n    }\n    dispatch(name, detail = {}) {\n      return dispatchEvent(this.form, `direct-uploads:${name}`, {\n        detail: detail\n      });\n    }\n  }\n  const processingAttribute = \"data-direct-uploads-processing\";\n  const submitButtonsByForm = new WeakMap;\n  let started = false;\n  function start() {\n    if (!started) {\n      started = true;\n      document.addEventListener(\"click\", didClick, true);\n      document.addEventListener(\"submit\", didSubmitForm, true);\n      document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n    }\n  }\n  function didClick(event) {\n    const button = event.target.closest(\"button, input\");\n    if (button && button.type === \"submit\" && button.form) {\n      submitButtonsByForm.set(button.form, button);\n    }\n  }\n  function didSubmitForm(event) {\n    handleFormSubmissionEvent(event);\n  }\n  function didSubmitRemoteElement(event) {\n    if (event.target.tagName == \"FORM\") {\n      handleFormSubmissionEvent(event);\n    }\n  }\n  function handleFormSubmissionEvent(event) {\n    const form = event.target;\n    if (form.hasAttribute(processingAttribute)) {\n      event.preventDefault();\n      return;\n    }\n    const controller = new DirectUploadsController(form);\n    const {inputs: inputs} = controller;\n    if (inputs.length) {\n      event.preventDefault();\n      form.setAttribute(processingAttribute, \"\");\n      inputs.forEach(disable);\n      controller.start((error => {\n        form.removeAttribute(processingAttribute);\n        if (error) {\n          inputs.forEach(enable);\n        } else {\n          submitForm(form);\n        }\n      }));\n    }\n  }\n  function submitForm(form) {\n    let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n    if (button) {\n      const {disabled: disabled} = button;\n      button.disabled = false;\n      button.focus();\n      button.click();\n      button.disabled = disabled;\n    } else {\n      button = document.createElement(\"input\");\n      button.type = \"submit\";\n      button.style.display = \"none\";\n      form.appendChild(button);\n      button.click();\n      form.removeChild(button);\n    }\n    submitButtonsByForm.delete(form);\n  }\n  function disable(input) {\n    input.disabled = true;\n  }\n  function enable(input) {\n    input.disabled = false;\n  }\n  function autostart() {\n    if (window.ActiveStorage) {\n      start();\n    }\n  }\n  setTimeout(autostart, 1);\n  exports.DirectUpload = DirectUpload;\n  exports.DirectUploadController = DirectUploadController;\n  exports.DirectUploadsController = DirectUploadsController;\n  exports.dispatchEvent = dispatchEvent;\n  exports.start = start;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n}));\n", "/*!\nTurbo 8.0.23\nCopyright \u00A9 2026 37signals LLC\n */\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 16).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  const link = findClosestRecursively(target, \"a[href], a[xlink\\\\:href]\");\n\n  if (!link) return null\n  if (link.href.startsWith(\"#\")) return null\n  if (link.hasAttribute(\"download\")) return null\n\n  const linkTarget = link.getAttribute(\"target\");\n  if (linkTarget && linkTarget !== \"_self\") return null\n\n  return link\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = addTrailingSlash(url.origin + url.pathname);\n  return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return window.fetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst identity = key => key;\n\nclass LRUCache {\n  keys = []\n  entries = {}\n  #toCacheKey\n\n  constructor(size, toCacheKey = identity) {\n    this.size = size;\n    this.#toCacheKey = toCacheKey;\n  }\n\n  has(key) {\n    return this.#toCacheKey(key) in this.entries\n  }\n\n  get(key) {\n    if (this.has(key)) {\n      const entry = this.read(key);\n      this.touch(key);\n      return entry\n    }\n  }\n\n  put(key, entry) {\n    this.write(key, entry);\n    this.touch(key);\n    return entry\n  }\n\n  clear() {\n    for (const key of Object.keys(this.entries)) {\n      this.evict(key);\n    }\n  }\n\n  // Private\n\n  read(key) {\n    return this.entries[this.#toCacheKey(key)]\n  }\n\n  write(key, entry) {\n    this.entries[this.#toCacheKey(key)] = entry;\n  }\n\n  touch(key) {\n    key = this.#toCacheKey(key);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      this.evict(key);\n    }\n  }\n\n  evict(key) {\n    delete this.entries[key];\n  }\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache extends LRUCache {\n  #prefetchTimeout = null\n  #maxAges = {}\n\n  constructor(size = 1, prefetchDelay = PREFETCH_DELAY) {\n    super(size, toCacheKey);\n    this.prefetchDelay = prefetchDelay;\n  }\n\n  putLater(url, request, ttl) {\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.put(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, this.prefetchDelay);\n  }\n\n  put(url, request, ttl = cacheTtl) {\n    super.put(url, request);\n    this.#maxAges[toCacheKey(url)] = new Date(new Date().getTime() + ttl);\n  }\n\n  clear() {\n    super.clear();\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n  }\n\n  evict(key) {\n    super.evict(key);\n    delete this.#maxAges[key];\n  }\n\n  has(key) {\n    if (super.has(key)) {\n      const maxAge = this.#maxAges[toCacheKey(key)];\n\n      return maxAge && maxAge > Date.now()\n    } else {\n      return false\n    }\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.focusElement(element);\n      this.scrollToElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n/**\n * @typedef {object} ConfigHead\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} [style]\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {function(Element): boolean} [shouldPreserve]\n * @property {function(Element): boolean} [shouldReAppend]\n * @property {function(Element): boolean} [shouldRemove]\n * @property {function(Element, {added: Node[], kept: Element[], removed: Element[]}): void} [afterHeadMorphed]\n */\n\n/**\n * @typedef {object} ConfigCallbacks\n *\n * @property {function(Node): boolean} [beforeNodeAdded]\n * @property {function(Node): void} [afterNodeAdded]\n * @property {function(Element, Node): boolean} [beforeNodeMorphed]\n * @property {function(Element, Node): void} [afterNodeMorphed]\n * @property {function(Element): boolean} [beforeNodeRemoved]\n * @property {function(Element): void} [afterNodeRemoved]\n * @property {function(string, Element, \"update\" | \"remove\"): boolean} [beforeAttributeUpdated]\n */\n\n/**\n * @typedef {object} Config\n *\n * @property {'outerHTML' | 'innerHTML'} [morphStyle]\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacks} [callbacks]\n * @property {ConfigHead} [head]\n */\n\n/**\n * @typedef {function} NoOp\n *\n * @returns {void}\n */\n\n/**\n * @typedef {object} ConfigHeadInternal\n *\n * @property {'merge' | 'append' | 'morph' | 'none'} style\n * @property {boolean} [block]\n * @property {boolean} [ignore]\n * @property {(function(Element): boolean) | NoOp} shouldPreserve\n * @property {(function(Element): boolean) | NoOp} shouldReAppend\n * @property {(function(Element): boolean) | NoOp} shouldRemove\n * @property {(function(Element, {added: Node[], kept: Element[], removed: Element[]}): void) | NoOp} afterHeadMorphed\n */\n\n/**\n * @typedef {object} ConfigCallbacksInternal\n *\n * @property {(function(Node): boolean) | NoOp} beforeNodeAdded\n * @property {(function(Node): void) | NoOp} afterNodeAdded\n * @property {(function(Node, Node): boolean) | NoOp} beforeNodeMorphed\n * @property {(function(Node, Node): void) | NoOp} afterNodeMorphed\n * @property {(function(Node): boolean) | NoOp} beforeNodeRemoved\n * @property {(function(Node): void) | NoOp} afterNodeRemoved\n * @property {(function(string, Element, \"update\" | \"remove\"): boolean) | NoOp} beforeAttributeUpdated\n */\n\n/**\n * @typedef {object} ConfigInternal\n *\n * @property {'outerHTML' | 'innerHTML'} morphStyle\n * @property {boolean} [ignoreActive]\n * @property {boolean} [ignoreActiveValue]\n * @property {boolean} [restoreFocus]\n * @property {ConfigCallbacksInternal} callbacks\n * @property {ConfigHeadInternal} head\n */\n\n/**\n * @typedef {Object} IdSets\n * @property {Set<string>} persistentIds\n * @property {Map<Node, Set<string>>} idMap\n */\n\n/**\n * @typedef {Function} Morph\n *\n * @param {Element | Document} oldNode\n * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n * @param {Config} [config]\n * @returns {undefined | Node[]}\n */\n\n// base IIFE to define idiomorph\n/**\n *\n * @type {{defaults: ConfigInternal, morph: Morph}}\n */\nvar Idiomorph = (function () {\n\n  /**\n   * @typedef {object} MorphContext\n   *\n   * @property {Element} target\n   * @property {Element} newContent\n   * @property {ConfigInternal} config\n   * @property {ConfigInternal['morphStyle']} morphStyle\n   * @property {ConfigInternal['ignoreActive']} ignoreActive\n   * @property {ConfigInternal['ignoreActiveValue']} ignoreActiveValue\n   * @property {ConfigInternal['restoreFocus']} restoreFocus\n   * @property {Map<Node, Set<string>>} idMap\n   * @property {Set<string>} persistentIds\n   * @property {ConfigInternal['callbacks']} callbacks\n   * @property {ConfigInternal['head']} head\n   * @property {HTMLDivElement} pantry\n   * @property {Element[]} activeElementAndParents\n   */\n\n  //=============================================================================\n  // AND NOW IT BEGINS...\n  //=============================================================================\n\n  const noOp = () => {};\n  /**\n   * Default configuration values, updatable by users now\n   * @type {ConfigInternal}\n   */\n  const defaults = {\n    morphStyle: \"outerHTML\",\n    callbacks: {\n      beforeNodeAdded: noOp,\n      afterNodeAdded: noOp,\n      beforeNodeMorphed: noOp,\n      afterNodeMorphed: noOp,\n      beforeNodeRemoved: noOp,\n      afterNodeRemoved: noOp,\n      beforeAttributeUpdated: noOp,\n    },\n    head: {\n      style: \"merge\",\n      shouldPreserve: (elt) => elt.getAttribute(\"im-preserve\") === \"true\",\n      shouldReAppend: (elt) => elt.getAttribute(\"im-re-append\") === \"true\",\n      shouldRemove: noOp,\n      afterHeadMorphed: noOp,\n    },\n    restoreFocus: true,\n  };\n\n  /**\n   * Core idiomorph function for morphing one DOM tree to another\n   *\n   * @param {Element | Document} oldNode\n   * @param {Element | Node | HTMLCollection | Node[] | string | null} newContent\n   * @param {Config} [config]\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function morph(oldNode, newContent, config = {}) {\n    oldNode = normalizeElement(oldNode);\n    const newNode = normalizeParent(newContent);\n    const ctx = createMorphContext(oldNode, newNode, config);\n\n    const morphedNodes = saveAndRestoreFocus(ctx, () => {\n      return withHeadBlocking(\n        ctx,\n        oldNode,\n        newNode,\n        /** @param {MorphContext} ctx */ (ctx) => {\n          if (ctx.morphStyle === \"innerHTML\") {\n            morphChildren(ctx, oldNode, newNode);\n            return Array.from(oldNode.childNodes);\n          } else {\n            return morphOuterHTML(ctx, oldNode, newNode);\n          }\n        },\n      );\n    });\n\n    ctx.pantry.remove();\n    return morphedNodes;\n  }\n\n  /**\n   * Morph just the outerHTML of the oldNode to the newContent\n   * We have to be careful because the oldNode could have siblings which need to be untouched\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @returns {Node[]}\n   */\n  function morphOuterHTML(ctx, oldNode, newNode) {\n    const oldParent = normalizeParent(oldNode);\n    morphChildren(\n      ctx,\n      oldParent,\n      newNode,\n      // these two optional params are the secret sauce\n      oldNode, // start point for iteration\n      oldNode.nextSibling, // end point for iteration\n    );\n    // this is safe even with siblings, because normalizeParent returns a SlicedParentNode if needed.\n    return Array.from(oldParent.childNodes);\n  }\n\n  /**\n   * @param {MorphContext} ctx\n   * @param {Function} fn\n   * @returns {Promise<Node[]> | Node[]}\n   */\n  function saveAndRestoreFocus(ctx, fn) {\n    if (!ctx.config.restoreFocus) return fn();\n    let activeElement =\n      /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ (\n        document.activeElement\n      );\n\n    // don't bother if the active element is not an input or textarea\n    if (\n      !(\n        activeElement instanceof HTMLInputElement ||\n        activeElement instanceof HTMLTextAreaElement\n      )\n    ) {\n      return fn();\n    }\n\n    const { id: activeElementId, selectionStart, selectionEnd } = activeElement;\n\n    const results = fn();\n\n    if (\n      activeElementId &&\n      activeElementId !== document.activeElement?.getAttribute(\"id\")\n    ) {\n      activeElement = ctx.target.querySelector(`[id=\"${activeElementId}\"]`);\n      activeElement?.focus();\n    }\n    if (activeElement && !activeElement.selectionEnd && selectionEnd) {\n      activeElement.setSelectionRange(selectionStart, selectionEnd);\n    }\n\n    return results;\n  }\n\n  const morphChildren = (function () {\n    /**\n     * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n     * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n     * by using id sets, we are able to better match up with content deeper in the DOM.\n     *\n     * Basic algorithm:\n     * - for each node in the new content:\n     *   - search self and siblings for an id set match, falling back to a soft match\n     *   - if match found\n     *     - remove any nodes up to the match:\n     *       - pantry persistent nodes\n     *       - delete the rest\n     *     - morph the match\n     *   - elsif no match found, and node is persistent\n     *     - find its match by querying the old root (future) and pantry (past)\n     *     - move it and its children here\n     *     - morph it\n     *   - else\n     *     - create a new node from scratch as a last result\n     *\n     * @param {MorphContext} ctx the merge context\n     * @param {Element} oldParent the old content that we are merging the new content into\n     * @param {Element} newParent the parent element of the new content\n     * @param {Node|null} [insertionPoint] the point in the DOM we start morphing at (defaults to first child)\n     * @param {Node|null} [endPoint] the point in the DOM we stop morphing at (defaults to after last child)\n     */\n    function morphChildren(\n      ctx,\n      oldParent,\n      newParent,\n      insertionPoint = null,\n      endPoint = null,\n    ) {\n      // normalize\n      if (\n        oldParent instanceof HTMLTemplateElement &&\n        newParent instanceof HTMLTemplateElement\n      ) {\n        // @ts-ignore we can pretend the DocumentFragment is an Element\n        oldParent = oldParent.content;\n        // @ts-ignore ditto\n        newParent = newParent.content;\n      }\n      insertionPoint ||= oldParent.firstChild;\n\n      // run through all the new content\n      for (const newChild of newParent.childNodes) {\n        // once we reach the end of the old parent content skip to the end and insert the rest\n        if (insertionPoint && insertionPoint != endPoint) {\n          const bestMatch = findBestMatch(\n            ctx,\n            newChild,\n            insertionPoint,\n            endPoint,\n          );\n          if (bestMatch) {\n            // if the node to morph is not at the insertion point then remove/move up to it\n            if (bestMatch !== insertionPoint) {\n              removeNodesBetween(ctx, insertionPoint, bestMatch);\n            }\n            morphNode(bestMatch, newChild, ctx);\n            insertionPoint = bestMatch.nextSibling;\n            continue;\n          }\n        }\n\n        // if the matching node is elsewhere in the original content\n        if (newChild instanceof Element) {\n          // we can pretend the id is non-null because the next `.has` line will reject it if not\n          const newChildId = /** @type {String} */ (\n            newChild.getAttribute(\"id\")\n          );\n          if (ctx.persistentIds.has(newChildId)) {\n            // move it and all its children here and morph\n            const movedChild = moveBeforeById(\n              oldParent,\n              newChildId,\n              insertionPoint,\n              ctx,\n            );\n            morphNode(movedChild, newChild, ctx);\n            insertionPoint = movedChild.nextSibling;\n            continue;\n          }\n        }\n\n        // last resort: insert the new node from scratch\n        const insertedNode = createNode(\n          oldParent,\n          newChild,\n          insertionPoint,\n          ctx,\n        );\n        // could be null if beforeNodeAdded prevented insertion\n        if (insertedNode) {\n          insertionPoint = insertedNode.nextSibling;\n        }\n      }\n\n      // remove any remaining old nodes that didn't match up with new content\n      while (insertionPoint && insertionPoint != endPoint) {\n        const tempNode = insertionPoint;\n        insertionPoint = insertionPoint.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n    }\n\n    /**\n     * This performs the action of inserting a new node while handling situations where the node contains\n     * elements with persistent ids and possible state info we can still preserve by moving in and then morphing\n     *\n     * @param {Element} oldParent\n     * @param {Node} newChild\n     * @param {Node|null} insertionPoint\n     * @param {MorphContext} ctx\n     * @returns {Node|null}\n     */\n    function createNode(oldParent, newChild, insertionPoint, ctx) {\n      if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null;\n      if (ctx.idMap.has(newChild)) {\n        // node has children with ids with possible state so create a dummy elt of same type and apply full morph algorithm\n        const newEmptyChild = document.createElement(\n          /** @type {Element} */ (newChild).tagName,\n        );\n        oldParent.insertBefore(newEmptyChild, insertionPoint);\n        morphNode(newEmptyChild, newChild, ctx);\n        ctx.callbacks.afterNodeAdded(newEmptyChild);\n        return newEmptyChild;\n      } else {\n        // optimisation: no id state to preserve so we can just insert a clone of the newChild and its descendants\n        const newClonedChild = document.importNode(newChild, true); // importNode to not mutate newParent\n        oldParent.insertBefore(newClonedChild, insertionPoint);\n        ctx.callbacks.afterNodeAdded(newClonedChild);\n        return newClonedChild;\n      }\n    }\n\n    //=============================================================================\n    // Matching Functions\n    //=============================================================================\n    const findBestMatch = (function () {\n      /**\n       * Scans forward from the startPoint to the endPoint looking for a match\n       * for the node. It looks for an id set match first, then a soft match.\n       * We abort softmatching if we find two future soft matches, to reduce churn.\n       * @param {Node} node\n       * @param {MorphContext} ctx\n       * @param {Node | null} startPoint\n       * @param {Node | null} endPoint\n       * @returns {Node | null}\n       */\n      function findBestMatch(ctx, node, startPoint, endPoint) {\n        let softMatch = null;\n        let nextSibling = node.nextSibling;\n        let siblingSoftMatchCount = 0;\n\n        let cursor = startPoint;\n        while (cursor && cursor != endPoint) {\n          // soft matching is a prerequisite for id set matching\n          if (isSoftMatch(cursor, node)) {\n            if (isIdSetMatch(ctx, cursor, node)) {\n              return cursor; // found an id set match, we're done!\n            }\n\n            // we haven't yet saved a soft match fallback\n            if (softMatch === null) {\n              // the current soft match will hard match something else in the future, leave it\n              if (!ctx.idMap.has(cursor)) {\n                // save this as the fallback if we get through the loop without finding a hard match\n                softMatch = cursor;\n              }\n            }\n          }\n          if (\n            softMatch === null &&\n            nextSibling &&\n            isSoftMatch(cursor, nextSibling)\n          ) {\n            // The next new node has a soft match with this node, so\n            // increment the count of future soft matches\n            siblingSoftMatchCount++;\n            nextSibling = nextSibling.nextSibling;\n\n            // If there are two future soft matches, block soft matching for this node to allow\n            // future siblings to soft match. This is to reduce churn in the DOM when an element\n            // is prepended.\n            if (siblingSoftMatchCount >= 2) {\n              softMatch = undefined;\n            }\n          }\n\n          // if the current node contains active element, stop looking for better future matches,\n          // because if one is found, this node will be moved to the pantry, reparenting it and thus losing focus\n          // @ts-ignore pretend cursor is Element rather than Node, we're just testing for array inclusion\n          if (ctx.activeElementAndParents.includes(cursor)) break;\n\n          cursor = cursor.nextSibling;\n        }\n\n        return softMatch || null;\n      }\n\n      /**\n       *\n       * @param {MorphContext} ctx\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isIdSetMatch(ctx, oldNode, newNode) {\n        let oldSet = ctx.idMap.get(oldNode);\n        let newSet = ctx.idMap.get(newNode);\n\n        if (!newSet || !oldSet) return false;\n\n        for (const id of oldSet) {\n          // a potential match is an id in the new and old nodes that\n          // has not already been merged into the DOM\n          // But the newNode content we call this on has not been\n          // merged yet and we don't allow duplicate IDs so it is simple\n          if (newSet.has(id)) {\n            return true;\n          }\n        }\n        return false;\n      }\n\n      /**\n       *\n       * @param {Node} oldNode\n       * @param {Node} newNode\n       * @returns {boolean}\n       */\n      function isSoftMatch(oldNode, newNode) {\n        // ok to cast: if one is not element, `id` and `tagName` will be undefined and we'll just compare that.\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        return (\n          oldElt.nodeType === newElt.nodeType &&\n          oldElt.tagName === newElt.tagName &&\n          // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing.\n          // We'll still match an anonymous node with an IDed newElt, though, because if it got this far,\n          // its not persistent, and new nodes can't have any hidden state.\n          // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment\n          (!oldElt.getAttribute?.(\"id\") ||\n            oldElt.getAttribute?.(\"id\") === newElt.getAttribute?.(\"id\"))\n        );\n      }\n\n      return findBestMatch;\n    })();\n\n    //=============================================================================\n    // DOM Manipulation Functions\n    //=============================================================================\n\n    /**\n     * Gets rid of an unwanted DOM node; strategy depends on nature of its reuse:\n     * - Persistent nodes will be moved to the pantry for later reuse\n     * - Other nodes will have their hooks called, and then are removed\n     * @param {MorphContext} ctx\n     * @param {Node} node\n     */\n    function removeNode(ctx, node) {\n      // are we going to id set match this later?\n      if (ctx.idMap.has(node)) {\n        // skip callbacks and move to pantry\n        moveBefore(ctx.pantry, node, null);\n      } else {\n        // remove for realsies\n        if (ctx.callbacks.beforeNodeRemoved(node) === false) return;\n        node.parentNode?.removeChild(node);\n        ctx.callbacks.afterNodeRemoved(node);\n      }\n    }\n\n    /**\n     * Remove nodes between the start and end nodes\n     * @param {MorphContext} ctx\n     * @param {Node} startInclusive\n     * @param {Node} endExclusive\n     * @returns {Node|null}\n     */\n    function removeNodesBetween(ctx, startInclusive, endExclusive) {\n      /** @type {Node | null} */\n      let cursor = startInclusive;\n      // remove nodes until the endExclusive node\n      while (cursor && cursor !== endExclusive) {\n        let tempNode = /** @type {Node} */ (cursor);\n        cursor = cursor.nextSibling;\n        removeNode(ctx, tempNode);\n      }\n      return cursor;\n    }\n\n    /**\n     * Search for an element by id within the document and pantry, and move it using moveBefore.\n     *\n     * @param {Element} parentNode - The parent node to which the element will be moved.\n     * @param {string} id - The ID of the element to be moved.\n     * @param {Node | null} after - The reference node to insert the element before.\n     *                              If `null`, the element is appended as the last child.\n     * @param {MorphContext} ctx\n     * @returns {Element} The found element\n     */\n    function moveBeforeById(parentNode, id, after, ctx) {\n      const target =\n        /** @type {Element} - will always be found */\n        (\n          // ctx.target.id unsafe because of form input shadowing\n          // ctx.target could be a document fragment which doesn't have `getAttribute`\n          (ctx.target.getAttribute?.(\"id\") === id && ctx.target) ||\n            ctx.target.querySelector(`[id=\"${id}\"]`) ||\n            ctx.pantry.querySelector(`[id=\"${id}\"]`)\n        );\n      removeElementFromAncestorsIdMaps(target, ctx);\n      moveBefore(parentNode, target, after);\n      return target;\n    }\n\n    /**\n     * Removes an element from its ancestors' id maps. This is needed when an element is moved from the\n     * \"future\" via `moveBeforeId`. Otherwise, its erstwhile ancestors could be mistakenly moved to the\n     * pantry rather than being deleted, preventing their removal hooks from being called.\n     *\n     * @param {Element} element - element to remove from its ancestors' id maps\n     * @param {MorphContext} ctx\n     */\n    function removeElementFromAncestorsIdMaps(element, ctx) {\n      // we know id is non-null String, because this function is only called on elements with ids\n      const id = /** @type {String} */ (element.getAttribute(\"id\"));\n      /** @ts-ignore - safe to loop in this way **/\n      while ((element = element.parentNode)) {\n        let idSet = ctx.idMap.get(element);\n        if (idSet) {\n          idSet.delete(id);\n          if (!idSet.size) {\n            ctx.idMap.delete(element);\n          }\n        }\n      }\n    }\n\n    /**\n     * Moves an element before another element within the same parent.\n     * Uses the proposed `moveBefore` API if available (and working), otherwise falls back to `insertBefore`.\n     * This is essentialy a forward-compat wrapper.\n     *\n     * @param {Element} parentNode - The parent node containing the after element.\n     * @param {Node} element - The element to be moved.\n     * @param {Node | null} after - The reference node to insert `element` before.\n     *                              If `null`, `element` is appended as the last child.\n     */\n    function moveBefore(parentNode, element, after) {\n      // @ts-ignore - use proposed moveBefore feature\n      if (parentNode.moveBefore) {\n        try {\n          // @ts-ignore - use proposed moveBefore feature\n          parentNode.moveBefore(element, after);\n        } catch (e) {\n          // fall back to insertBefore as some browsers may fail on moveBefore when trying to move Dom disconnected nodes to pantry\n          parentNode.insertBefore(element, after);\n        }\n      } else {\n        parentNode.insertBefore(element, after);\n      }\n    }\n\n    return morphChildren;\n  })();\n\n  //=============================================================================\n  // Single Node Morphing Code\n  //=============================================================================\n  const morphNode = (function () {\n    /**\n     * @param {Node} oldNode root node to merge content into\n     * @param {Node} newContent new content to merge\n     * @param {MorphContext} ctx the merge context\n     * @returns {Node | null} the element that ended up in the DOM\n     */\n    function morphNode(oldNode, newContent, ctx) {\n      if (ctx.ignoreActive && oldNode === document.activeElement) {\n        // don't morph focused element\n        return null;\n      }\n\n      if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) {\n        return oldNode;\n      }\n\n      if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (\n        oldNode instanceof HTMLHeadElement &&\n        ctx.head.style !== \"morph\"\n      ) {\n        // ok to cast: if newContent wasn't also a <head>, it would've got caught in the `!isSoftMatch` branch above\n        handleHeadElement(\n          oldNode,\n          /** @type {HTMLHeadElement} */ (newContent),\n          ctx,\n        );\n      } else {\n        morphAttributes(oldNode, newContent, ctx);\n        if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n          // @ts-ignore newContent can be a node here because .firstChild will be null\n          morphChildren(ctx, oldNode, newContent);\n        }\n      }\n      ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n      return oldNode;\n    }\n\n    /**\n     * syncs the oldNode to the newNode, copying over all attributes and\n     * inner element state from the newNode to the oldNode\n     *\n     * @param {Node} oldNode the node to copy attributes & state to\n     * @param {Node} newNode the node to copy attributes & state from\n     * @param {MorphContext} ctx the merge context\n     */\n    function morphAttributes(oldNode, newNode, ctx) {\n      let type = newNode.nodeType;\n\n      // if is an element type, sync the attributes from the\n      // new node into the new node\n      if (type === 1 /* element type */) {\n        const oldElt = /** @type {Element} */ (oldNode);\n        const newElt = /** @type {Element} */ (newNode);\n\n        const oldAttributes = oldElt.attributes;\n        const newAttributes = newElt.attributes;\n        for (const newAttribute of newAttributes) {\n          if (ignoreAttribute(newAttribute.name, oldElt, \"update\", ctx)) {\n            continue;\n          }\n          if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) {\n            oldElt.setAttribute(newAttribute.name, newAttribute.value);\n          }\n        }\n        // iterate backwards to avoid skipping over items when a delete occurs\n        for (let i = oldAttributes.length - 1; 0 <= i; i--) {\n          const oldAttribute = oldAttributes[i];\n\n          // toAttributes is a live NamedNodeMap, so iteration+mutation is unsafe\n          // e.g. custom element attribute callbacks can remove other attributes\n          if (!oldAttribute) continue;\n\n          if (!newElt.hasAttribute(oldAttribute.name)) {\n            if (ignoreAttribute(oldAttribute.name, oldElt, \"remove\", ctx)) {\n              continue;\n            }\n            oldElt.removeAttribute(oldAttribute.name);\n          }\n        }\n\n        if (!ignoreValueOfActiveElement(oldElt, ctx)) {\n          syncInputValue(oldElt, newElt, ctx);\n        }\n      }\n\n      // sync text nodes\n      if (type === 8 /* comment */ || type === 3 /* text */) {\n        if (oldNode.nodeValue !== newNode.nodeValue) {\n          oldNode.nodeValue = newNode.nodeValue;\n        }\n      }\n    }\n\n    /**\n     * NB: many bothans died to bring us information:\n     *\n     *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n     *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n     *\n     * @param {Element} oldElement the element to sync the input value to\n     * @param {Element} newElement the element to sync the input value from\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncInputValue(oldElement, newElement, ctx) {\n      if (\n        oldElement instanceof HTMLInputElement &&\n        newElement instanceof HTMLInputElement &&\n        newElement.type !== \"file\"\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n\n        // sync boolean attributes\n        syncBooleanAttribute(oldElement, newElement, \"checked\", ctx);\n        syncBooleanAttribute(oldElement, newElement, \"disabled\", ctx);\n\n        if (!newElement.hasAttribute(\"value\")) {\n          if (!ignoreAttribute(\"value\", oldElement, \"remove\", ctx)) {\n            oldElement.value = \"\";\n            oldElement.removeAttribute(\"value\");\n          }\n        } else if (oldValue !== newValue) {\n          if (!ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n            oldElement.setAttribute(\"value\", newValue);\n            oldElement.value = newValue;\n          }\n        }\n        // TODO: QUESTION(1cg): this used to only check `newElement` unlike the other branches -- why?\n        // did I break something?\n      } else if (\n        oldElement instanceof HTMLOptionElement &&\n        newElement instanceof HTMLOptionElement\n      ) {\n        syncBooleanAttribute(oldElement, newElement, \"selected\", ctx);\n      } else if (\n        oldElement instanceof HTMLTextAreaElement &&\n        newElement instanceof HTMLTextAreaElement\n      ) {\n        let newValue = newElement.value;\n        let oldValue = oldElement.value;\n        if (ignoreAttribute(\"value\", oldElement, \"update\", ctx)) {\n          return;\n        }\n        if (newValue !== oldValue) {\n          oldElement.value = newValue;\n        }\n        if (\n          oldElement.firstChild &&\n          oldElement.firstChild.nodeValue !== newValue\n        ) {\n          oldElement.firstChild.nodeValue = newValue;\n        }\n      }\n    }\n\n    /**\n     * @param {Element} oldElement element to write the value to\n     * @param {Element} newElement element to read the value from\n     * @param {string} attributeName the attribute name\n     * @param {MorphContext} ctx the merge context\n     */\n    function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) {\n      // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n      const newLiveValue = newElement[attributeName],\n        // @ts-ignore ditto\n        oldLiveValue = oldElement[attributeName];\n      if (newLiveValue !== oldLiveValue) {\n        const ignoreUpdate = ignoreAttribute(\n          attributeName,\n          oldElement,\n          \"update\",\n          ctx,\n        );\n        if (!ignoreUpdate) {\n          // update attribute's associated DOM property\n          // @ts-ignore this function is only used on boolean attrs that are reflected as dom properties\n          oldElement[attributeName] = newElement[attributeName];\n        }\n        if (newLiveValue) {\n          if (!ignoreUpdate) {\n            // https://developer.mozilla.org/en-US/docs/Glossary/Boolean/HTML\n            // this is the correct way to set a boolean attribute to \"true\"\n            oldElement.setAttribute(attributeName, \"\");\n          }\n        } else {\n          if (!ignoreAttribute(attributeName, oldElement, \"remove\", ctx)) {\n            oldElement.removeAttribute(attributeName);\n          }\n        }\n      }\n    }\n\n    /**\n     * @param {string} attr the attribute to be mutated\n     * @param {Element} element the element that is going to be updated\n     * @param {\"update\" | \"remove\"} updateType\n     * @param {MorphContext} ctx the merge context\n     * @returns {boolean} true if the attribute should be ignored, false otherwise\n     */\n    function ignoreAttribute(attr, element, updateType, ctx) {\n      if (\n        attr === \"value\" &&\n        ctx.ignoreActiveValue &&\n        element === document.activeElement\n      ) {\n        return true;\n      }\n      return (\n        ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) ===\n        false\n      );\n    }\n\n    /**\n     * @param {Node} possibleActiveElement\n     * @param {MorphContext} ctx\n     * @returns {boolean}\n     */\n    function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n      return (\n        !!ctx.ignoreActiveValue &&\n        possibleActiveElement === document.activeElement &&\n        possibleActiveElement !== document.body\n      );\n    }\n\n    return morphNode;\n  })();\n\n  //=============================================================================\n  // Head Management Functions\n  //=============================================================================\n  /**\n   * @param {MorphContext} ctx\n   * @param {Element} oldNode\n   * @param {Element} newNode\n   * @param {function} callback\n   * @returns {Node[] | Promise<Node[]>}\n   */\n  function withHeadBlocking(ctx, oldNode, newNode, callback) {\n    if (ctx.head.block) {\n      const oldHead = oldNode.querySelector(\"head\");\n      const newHead = newNode.querySelector(\"head\");\n      if (oldHead && newHead) {\n        const promises = handleHeadElement(oldHead, newHead, ctx);\n        // when head promises resolve, proceed ignoring the head tag\n        return Promise.all(promises).then(() => {\n          const newCtx = Object.assign(ctx, {\n            head: {\n              block: false,\n              ignore: true,\n            },\n          });\n          return callback(newCtx);\n        });\n      }\n    }\n    // just proceed if we not head blocking\n    return callback(ctx);\n  }\n\n  /**\n   *  The HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n   *\n   * @param {Element} oldHead\n   * @param {Element} newHead\n   * @param {MorphContext} ctx\n   * @returns {Promise<void>[]}\n   */\n  function handleHeadElement(oldHead, newHead, ctx) {\n    let added = [];\n    let removed = [];\n    let preserved = [];\n    let nodesToAppend = [];\n\n    // put all new head elements into a Map, by their outerHTML\n    let srcToNewHeadNodes = new Map();\n    for (const newHeadChild of newHead.children) {\n      srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n    }\n\n    // for each elt in the current head\n    for (const currentHeadElt of oldHead.children) {\n      // If the current head element is in the map\n      let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n      let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n      let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n      if (inNewContent || isPreserved) {\n        if (isReAppended) {\n          // remove the current version and let the new version replace it and re-execute\n          removed.push(currentHeadElt);\n        } else {\n          // this element already exists and should not be re-appended, so remove it from\n          // the new content map, preserving it in the DOM\n          srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n          preserved.push(currentHeadElt);\n        }\n      } else {\n        if (ctx.head.style === \"append\") {\n          // we are appending and this existing element is not new content\n          // so if and only if it is marked for re-append do we do anything\n          if (isReAppended) {\n            removed.push(currentHeadElt);\n            nodesToAppend.push(currentHeadElt);\n          }\n        } else {\n          // if this is a merge, we remove this content since it is not in the new head\n          if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n            removed.push(currentHeadElt);\n          }\n        }\n      }\n    }\n\n    // Push the remaining new head elements in the Map into the\n    // nodes to append to the head tag\n    nodesToAppend.push(...srcToNewHeadNodes.values());\n\n    let promises = [];\n    for (const newNode of nodesToAppend) {\n      // TODO: This could theoretically be null, based on type\n      let newElt = /** @type {ChildNode} */ (\n        document.createRange().createContextualFragment(newNode.outerHTML)\n          .firstChild\n      );\n      if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n        if (\n          (\"href\" in newElt && newElt.href) ||\n          (\"src\" in newElt && newElt.src)\n        ) {\n          /** @type {(result?: any) => void} */ let resolve;\n          let promise = new Promise(function (_resolve) {\n            resolve = _resolve;\n          });\n          newElt.addEventListener(\"load\", function () {\n            resolve();\n          });\n          promises.push(promise);\n        }\n        oldHead.appendChild(newElt);\n        ctx.callbacks.afterNodeAdded(newElt);\n        added.push(newElt);\n      }\n    }\n\n    // remove all removed elements, after we have appended the new elements to avoid\n    // additional network requests for things like style sheets\n    for (const removedElement of removed) {\n      if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n        oldHead.removeChild(removedElement);\n        ctx.callbacks.afterNodeRemoved(removedElement);\n      }\n    }\n\n    ctx.head.afterHeadMorphed(oldHead, {\n      added: added,\n      kept: preserved,\n      removed: removed,\n    });\n    return promises;\n  }\n\n  //=============================================================================\n  // Create Morph Context Functions\n  //=============================================================================\n  const createMorphContext = (function () {\n    /**\n     *\n     * @param {Element} oldNode\n     * @param {Element} newContent\n     * @param {Config} config\n     * @returns {MorphContext}\n     */\n    function createMorphContext(oldNode, newContent, config) {\n      const { persistentIds, idMap } = createIdMaps(oldNode, newContent);\n\n      const mergedConfig = mergeDefaults(config);\n      const morphStyle = mergedConfig.morphStyle || \"outerHTML\";\n      if (![\"innerHTML\", \"outerHTML\"].includes(morphStyle)) {\n        throw `Do not understand how to morph style ${morphStyle}`;\n      }\n\n      return {\n        target: oldNode,\n        newContent: newContent,\n        config: mergedConfig,\n        morphStyle: morphStyle,\n        ignoreActive: mergedConfig.ignoreActive,\n        ignoreActiveValue: mergedConfig.ignoreActiveValue,\n        restoreFocus: mergedConfig.restoreFocus,\n        idMap: idMap,\n        persistentIds: persistentIds,\n        pantry: createPantry(),\n        activeElementAndParents: createActiveElementAndParents(oldNode),\n        callbacks: mergedConfig.callbacks,\n        head: mergedConfig.head,\n      };\n    }\n\n    /**\n     * Deep merges the config object and the Idiomorph.defaults object to\n     * produce a final configuration object\n     * @param {Config} config\n     * @returns {ConfigInternal}\n     */\n    function mergeDefaults(config) {\n      let finalConfig = Object.assign({}, defaults);\n\n      // copy top level stuff into final config\n      Object.assign(finalConfig, config);\n\n      // copy callbacks into final config (do this to deep merge the callbacks)\n      finalConfig.callbacks = Object.assign(\n        {},\n        defaults.callbacks,\n        config.callbacks,\n      );\n\n      // copy head config into final config  (do this to deep merge the head)\n      finalConfig.head = Object.assign({}, defaults.head, config.head);\n\n      return finalConfig;\n    }\n\n    /**\n     * @returns {HTMLDivElement}\n     */\n    function createPantry() {\n      const pantry = document.createElement(\"div\");\n      pantry.hidden = true;\n      document.body.insertAdjacentElement(\"afterend\", pantry);\n      return pantry;\n    }\n\n    /**\n     * @param {Element} oldNode\n     * @returns {Element[]}\n     */\n    function createActiveElementAndParents(oldNode) {\n      /** @type {Element[]} */\n      let activeElementAndParents = [];\n      let elt = document.activeElement;\n      if (elt?.tagName !== \"BODY\" && oldNode.contains(elt)) {\n        while (elt) {\n          activeElementAndParents.push(elt);\n          if (elt === oldNode) break;\n          elt = elt.parentElement;\n        }\n      }\n      return activeElementAndParents;\n    }\n\n    /**\n     * Returns all elements with an ID contained within the root element and its descendants\n     *\n     * @param {Element} root\n     * @returns {Element[]}\n     */\n    function findIdElements(root) {\n      let elements = Array.from(root.querySelectorAll(\"[id]\"));\n      // root could be a document fragment which doesn't have `getAttribute`\n      if (root.getAttribute?.(\"id\")) {\n        elements.push(root);\n      }\n      return elements;\n    }\n\n    /**\n     * A bottom-up algorithm that populates a map of Element -> IdSet.\n     * The idSet for a given element is the set of all IDs contained within its subtree.\n     * As an optimzation, we filter these IDs through the given list of persistent IDs,\n     * because we don't need to bother considering IDed elements that won't be in the new content.\n     *\n     * @param {Map<Node, Set<string>>} idMap\n     * @param {Set<string>} persistentIds\n     * @param {Element} root\n     * @param {Element[]} elements\n     */\n    function populateIdMapWithTree(idMap, persistentIds, root, elements) {\n      for (const elt of elements) {\n        // we can pretend id is non-null String, because the .has line will reject it immediately if not\n        const id = /** @type {String} */ (elt.getAttribute(\"id\"));\n        if (persistentIds.has(id)) {\n          /** @type {Element|null} */\n          let current = elt;\n          // walk up the parent hierarchy of that element, adding the id\n          // of element to the parent's id set\n          while (current) {\n            let idSet = idMap.get(current);\n            // if the id set doesn't exist, create it and insert it in the map\n            if (idSet == null) {\n              idSet = new Set();\n              idMap.set(current, idSet);\n            }\n            idSet.add(id);\n\n            if (current === root) break;\n            current = current.parentElement;\n          }\n        }\n      }\n    }\n\n    /**\n     * This function computes a map of nodes to all ids contained within that node (inclusive of the\n     * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n     * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n     * to contribute to a parent nodes matching.\n     *\n     * @param {Element} oldContent  the old content that will be morphed\n     * @param {Element} newContent  the new content to morph to\n     * @returns {IdSets}\n     */\n    function createIdMaps(oldContent, newContent) {\n      const oldIdElements = findIdElements(oldContent);\n      const newIdElements = findIdElements(newContent);\n\n      const persistentIds = createPersistentIds(oldIdElements, newIdElements);\n\n      /** @type {Map<Node, Set<string>>} */\n      let idMap = new Map();\n      populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements);\n\n      /** @ts-ignore - if newContent is a duck-typed parent, pass its single child node as the root to halt upwards iteration */\n      const newRoot = newContent.__idiomorphRoot || newContent;\n      populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements);\n\n      return { persistentIds, idMap };\n    }\n\n    /**\n     * This function computes the set of ids that persist between the two contents excluding duplicates\n     *\n     * @param {Element[]} oldIdElements\n     * @param {Element[]} newIdElements\n     * @returns {Set<string>}\n     */\n    function createPersistentIds(oldIdElements, newIdElements) {\n      let duplicateIds = new Set();\n\n      /** @type {Map<string, string>} */\n      let oldIdTagNameMap = new Map();\n      for (const { id, tagName } of oldIdElements) {\n        if (oldIdTagNameMap.has(id)) {\n          duplicateIds.add(id);\n        } else {\n          oldIdTagNameMap.set(id, tagName);\n        }\n      }\n\n      let persistentIds = new Set();\n      for (const { id, tagName } of newIdElements) {\n        if (persistentIds.has(id)) {\n          duplicateIds.add(id);\n        } else if (oldIdTagNameMap.get(id) === tagName) {\n          persistentIds.add(id);\n        }\n        // skip if tag types mismatch because its not possible to morph one tag into another\n      }\n\n      for (const id of duplicateIds) {\n        persistentIds.delete(id);\n      }\n      return persistentIds;\n    }\n\n    return createMorphContext;\n  })();\n\n  //=============================================================================\n  // HTML Normalization Functions\n  //=============================================================================\n  const { normalizeElement, normalizeParent } = (function () {\n    /** @type {WeakSet<Node>} */\n    const generatedByIdiomorph = new WeakSet();\n\n    /**\n     *\n     * @param {Element | Document} content\n     * @returns {Element}\n     */\n    function normalizeElement(content) {\n      if (content instanceof Document) {\n        return content.documentElement;\n      } else {\n        return content;\n      }\n    }\n\n    /**\n     *\n     * @param {null | string | Node | HTMLCollection | Node[] | Document & {generatedByIdiomorph:boolean}} newContent\n     * @returns {Element}\n     */\n    function normalizeParent(newContent) {\n      if (newContent == null) {\n        return document.createElement(\"div\"); // dummy parent element\n      } else if (typeof newContent === \"string\") {\n        return normalizeParent(parseContent(newContent));\n      } else if (\n        generatedByIdiomorph.has(/** @type {Element} */ (newContent))\n      ) {\n        // the template tag created by idiomorph parsing can serve as a dummy parent\n        return /** @type {Element} */ (newContent);\n      } else if (newContent instanceof Node) {\n        if (newContent.parentNode) {\n          // we can't use the parent directly because newContent may have siblings\n          // that we don't want in the morph, and reparenting might be expensive (TODO is it?),\n          // so instead we create a fake parent node that only sees a slice of its children.\n          /** @type {Element} */\n          return /** @type {any} */ (new SlicedParentNode(newContent));\n        } else {\n          // a single node is added as a child to a dummy parent\n          const dummyParent = document.createElement(\"div\");\n          dummyParent.append(newContent);\n          return dummyParent;\n        }\n      } else {\n        // all nodes in the array or HTMLElement collection are consolidated under\n        // a single dummy parent element\n        const dummyParent = document.createElement(\"div\");\n        for (const elt of [...newContent]) {\n          dummyParent.append(elt);\n        }\n        return dummyParent;\n      }\n    }\n\n    /**\n     * A fake duck-typed parent element to wrap a single node, without actually reparenting it.\n     * This is useful because the node may have siblings that we don't want in the morph, and it may also be moved\n     * or replaced with one or more elements during the morph. This class effectively allows us a window into\n     * a slice of a node's children.\n     * \"If it walks like a duck, and quacks like a duck, then it must be a duck!\" -- James Whitcomb Riley (1849\u20131916)\n     */\n    class SlicedParentNode {\n      /** @param {Node} node */\n      constructor(node) {\n        this.originalNode = node;\n        this.realParentNode = /** @type {Element} */ (node.parentNode);\n        this.previousSibling = node.previousSibling;\n        this.nextSibling = node.nextSibling;\n      }\n\n      /** @returns {Node[]} */\n      get childNodes() {\n        // return slice of realParent's current childNodes, based on previousSibling and nextSibling\n        const nodes = [];\n        let cursor = this.previousSibling\n          ? this.previousSibling.nextSibling\n          : this.realParentNode.firstChild;\n        while (cursor && cursor != this.nextSibling) {\n          nodes.push(cursor);\n          cursor = cursor.nextSibling;\n        }\n        return nodes;\n      }\n\n      /**\n       * @param {string} selector\n       * @returns {Element[]}\n       */\n      querySelectorAll(selector) {\n        return this.childNodes.reduce((results, node) => {\n          if (node instanceof Element) {\n            if (node.matches(selector)) results.push(node);\n            const nodeList = node.querySelectorAll(selector);\n            for (let i = 0; i < nodeList.length; i++) {\n              results.push(nodeList[i]);\n            }\n          }\n          return results;\n        }, /** @type {Element[]} */ ([]));\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      insertBefore(node, referenceNode) {\n        return this.realParentNode.insertBefore(node, referenceNode);\n      }\n\n      /**\n       * @param {Node} node\n       * @param {Node} referenceNode\n       * @returns {Node}\n       */\n      moveBefore(node, referenceNode) {\n        // @ts-ignore - use new moveBefore feature\n        return this.realParentNode.moveBefore(node, referenceNode);\n      }\n\n      /**\n       * for later use with populateIdMapWithTree to halt upwards iteration\n       * @returns {Node}\n       */\n      get __idiomorphRoot() {\n        return this.originalNode;\n      }\n    }\n\n    /**\n     *\n     * @param {string} newContent\n     * @returns {Node | null | DocumentFragment}\n     */\n    function parseContent(newContent) {\n      let parser = new DOMParser();\n\n      // remove svgs to avoid false-positive matches on head, etc.\n      let contentWithSvgsRemoved = newContent.replace(\n        /<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim,\n        \"\",\n      );\n\n      // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n      if (\n        contentWithSvgsRemoved.match(/<\\/html>/) ||\n        contentWithSvgsRemoved.match(/<\\/head>/) ||\n        contentWithSvgsRemoved.match(/<\\/body>/)\n      ) {\n        let content = parser.parseFromString(newContent, \"text/html\");\n        // if it is a full HTML document, return the document itself as the parent container\n        if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n          generatedByIdiomorph.add(content);\n          return content;\n        } else {\n          // otherwise return the html element as the parent container\n          let htmlElement = content.firstChild;\n          if (htmlElement) {\n            generatedByIdiomorph.add(htmlElement);\n          }\n          return htmlElement;\n        }\n      } else {\n        // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n        // deal with touchy tags like tr, tbody, etc.\n        let responseDoc = parser.parseFromString(\n          \"<body><template>\" + newContent + \"</template></body>\",\n          \"text/html\",\n        );\n        let content = /** @type {HTMLTemplateElement} */ (\n          responseDoc.body.querySelector(\"template\")\n        ).content;\n        generatedByIdiomorph.add(content);\n        return content;\n      }\n    }\n\n    return { normalizeElement, normalizeParent };\n  })();\n\n  //=============================================================================\n  // This is what ends up becoming the Idiomorph global object\n  //=============================================================================\n  return {\n    morph,\n    defaults,\n  };\n})();\n\n/**\n * Morph the state of the currentElement based on the attributes and contents of\n * the newElement. Morphing may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing changes\n * @param newElement Element source of morphing changes\n */\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\n/**\n * Morph the child elements of the currentElement based on the child elements of\n * the newElement. Morphing children may dispatch turbo:before-morph-element,\n * turbo:before-morph-attribute, and turbo:morph-element events.\n *\n * @param currentElement Element destination of morphing children changes\n * @param newElement Element source of morphing children changes\n */\nfunction morphChildren(currentElement, newElement, options = {}) {\n  morphElements(currentElement, newElement.childNodes, {\n    ...options,\n    morphStyle: \"innerHTML\"\n  });\n}\n\nfunction shouldRefreshFrameWithMorphing(currentFrame, newFrame) {\n  return currentFrame instanceof FrameElement &&\n    currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) &&\n    !currentFrame.closest(\"[data-turbo-permanent]\")\n}\n\nfunction areFramesCompatibleForRefreshing(currentFrame, newFrame) {\n  // newFrame cannot yet be an instance of FrameElement because custom\n  // elements don't get initialized until they're attached to the DOM, so\n  // test its Element#nodeName instead\n  return newFrame instanceof Element && newFrame.nodeName === \"TURBO-FRAME\" && currentFrame.id === newFrame.id &&\n  (!newFrame.getAttribute(\"src\") || urlsAreEqual(currentFrame.src, newFrame.getAttribute(\"src\")))\n}\n\nfunction closestFrameReloadableWithMorphing(node) {\n  return node.parentElement.closest(\"turbo-frame[src][refresh=morph]\")\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              closestFrameReloadableWithMorphing(node) === currentElement\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    for (const clonedNoscriptElement of clonedElement.querySelectorAll(\"noscript\")) {\n      clonedNoscriptElement.remove();\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get dir() {\n    return this.documentElement.getAttribute(\"dir\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    const viewTransitionEnabled = this.getSetting(\"view-transition\") === \"true\" || this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\";\n    return viewTransitionEnabled && !window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n  }\n\n  get refreshMethod() {\n    return this.getSetting(\"refresh-method\")\n  }\n\n  get refreshScroll() {\n    return this.getSetting(\"refresh-scroll\")\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false,\n  refresh: {}\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction,\n      refresh\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n    this.refresh = refresh;\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    this.redirectedToLocation = null;\n\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n\n    if (visit.response.redirected) {\n      this.redirectedToLocation = visit.redirectedToLocation;\n    }\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    return true\n  }\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = (this.redirectedToLocation || this.location)?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector)]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    const { turbo } = event.state || {};\n    this.location = new URL(window.location.href);\n\n    if (turbo) {\n      const { restorationIdentifier, restorationIndex } = turbo;\n      this.restorationIdentifier = restorationIdentifier;\n      const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n      this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n      this.currentIndex = restorationIndex;\n    } else {\n      this.currentIndex++;\n      this.delegate.historyPoppedWithEmptyState(this.location);\n    }\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        fetchRequest.fetchOptions.priority = \"low\";\n\n        prefetchCache.putLater(location, fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url);\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if (snapshot.refreshScroll !== \"preserve\") {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Link prefetching\n\n  linkPrefetchingIsEnabledForLocation(location) {\n    // Not all adapters implement linkPrefetchingIsEnabledForLocation\n    if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === \"function\") {\n      return this.adapter.linkPrefetchingIsEnabledForLocation(location)\n    }\n\n    return true\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  // Same-page links are no longer handled with a Visit.\n  // This method is still needed for Turbo Native adapters.\n  locationWithActionIsSamePage(location, action) {\n    return false\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { dir, lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n    if (dir) {\n      documentElement.setAttribute(\"dir\", dir);\n    } else {\n      documentElement.removeAttribute(\"dir\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.removeNoscriptElements();\n    this.activateNewBodyScriptElements();\n  }\n\n  removeNoscriptElements() {\n    for (const noscriptElement of this.newElement.querySelectorAll(\"noscript\")) {\n      noscriptElement.remove();\n    }\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: (node, newNode) => {\n          if (\n            shouldRefreshFrameWithMorphing(node, newNode) &&\n              !closestFrameReloadableWithMorphing(node)\n          ) {\n            node.reload();\n            return false\n          }\n          return true\n        }\n      }\n    });\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nclass SnapshotCache extends LRUCache {\n  constructor(size) {\n    super(size, toCacheKey);\n  }\n\n  get snapshots() {\n    return this.entries\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && (visit?.refresh?.method || this.snapshot.refreshMethod) === \"morph\";\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && (visit?.refresh?.scroll || this.snapshot.refreshScroll) === \"preserve\"\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, options = {}) {\n    options = typeof options === \"string\" ? { requestId: options } : options;\n\n    const { method, requestId, scroll } = options;\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    const isCurrentUrl = url === document.baseURI;\n    if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false, refresh: { method, scroll } });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  historyPoppedWithEmptyState(location) {\n    this.history.replace(location);\n    this.view.lastRenderedLocation = location;\n    this.view.cacheSnapshot();\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.navigator.linkPrefetchingIsEnabledForLocation(location)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    this.notifyApplicationBeforeCachingSnapshot();\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\n\n// Rename `navigator` to avoid shadowing `window.navigator`\nconst { cache, navigator: sessionNavigator } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\n/**\n * Morph the state of the currentBody based on the attributes and contents of\n * the newBody. Morphing body elements may dispatch turbo:morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentBody HTMLBodyElement destination of morphing changes\n * @param newBody HTMLBodyElement source of morphing changes\n */\nfunction morphBodyElements(currentBody, newBody) {\n  MorphingPageRenderer.renderElement(currentBody, newBody);\n}\n\n/**\n * Morph the child elements of the currentFrame based on the child elements of\n * the newFrame. Morphing turbo-frame elements may dispatch turbo:before-frame-morph,\n * turbo:before-morph-element, turbo:before-morph-attribute, and\n * turbo:morph-element events.\n *\n * @param currentFrame FrameElement destination of morphing children changes\n * @param newFrame FrameElement source of morphing children changes\n */\nfunction morphTurboFrameElements(currentFrame, newFrame) {\n  MorphingFrameRenderer.renderElement(currentFrame, newFrame);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  session: session,\n  cache: cache,\n  navigator: sessionNavigator,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  morphBodyElements: morphBodyElements,\n  morphTurboFrameElements: morphTurboFrameElements,\n  morphChildren: morphChildren,\n  morphElements: morphElements\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n\n      if (!this.element.hasAttribute(\"recurse\")) {\n        this.#currentFetchRequest?.cancel();\n      }\n    }\n  }\n\n  disabledChanged() {\n    if (this.disabled) {\n      this.#currentFetchRequest?.cancel();\n    } else if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (!this.sourceURL) {\n      this.#currentFetchRequest?.cancel();\n    }\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n\n    const { fetchRequest } = this.formSubmission;\n    const frame = this.#findFrameElement(element, submitter);\n\n    this.prepareRequest(fetchRequest, frame);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request, frame = this) {\n    request.headers[\"Turbo-Frame\"] = frame.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    const target = this.#getFrameElementById(id);\n\n    return target instanceof FrameElement ? target : this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = this.#getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      } else if (id == \"_parent\") {\n        return false\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get disabled() {\n    return this.element.disabled\n  }\n\n  get enabled() {\n    return !this.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n\n  #getFrameElementById(id) {\n    if (id != null) {\n      const element = id === \"_parent\" ?\n        this.element.parentElement.closest(\"turbo-frame\") :\n        document.getElementById(id);\n      if (element instanceof FrameElement) {\n        return element\n      }\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.removeDuplicateTargetSiblings();\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    const method = this.getAttribute(\"method\");\n    const requestId = this.requestId;\n    const scroll = this.getAttribute(\"scroll\");\n\n    session.refresh(this.baseURI, { method, requestId, scroll });\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.getAttribute(\"id\"));\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.getAttribute(\"id\")).map((c) => c.getAttribute(\"id\"));\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.getAttribute(\"id\")))\n  }\n\n  /**\n  * Removes duplicate siblings (by ID)\n  */\n  removeDuplicateTargetSiblings() {\n    this.duplicateSiblings.forEach((c) => c.remove());\n  }\n\n  /**\n  * Gets the list of duplicate siblings (i.e. those with the same ID)\n  */\n  get duplicateSiblings() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.parentElement.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  const scriptElement = document.currentScript;\n  if (!scriptElement) return\n  if (scriptElement.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  let element = scriptElement.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        scriptElement.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, morphBodyElements, morphChildren, morphElements, morphTurboFrameElements, sessionNavigator as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// 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, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN 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 SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "import jquery from 'jquery'\nwindow.jQuery = jquery\nwindow.$ = jquery\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map())\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n      return\n    }\n\n    instanceMap.set(key, instance)\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null\n    }\n\n    return null\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return\n    }\n\n    const instanceMap = elementMap.get(element)\n\n    instanceMap.delete(key)\n\n    // free up element references if there are no instances left for an element\n    if (instanceMap.size === 0) {\n      elementMap.delete(element)\n    }\n  }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n  if (selector && window.CSS && window.CSS.escape) {\n    // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n    selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n  }\n\n  return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n  if (object === null || object === undefined) {\n    return `${object}`\n  }\n\n  return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID)\n  } while (document.getElementById(prefix))\n\n  return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0\n  }\n\n  // Get transition-duration of the element\n  let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n  const floatTransitionDuration = Number.parseFloat(transitionDuration)\n  const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n  // Return 0 if element or transition duration is not found\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0\n  }\n\n  // If multiple durations are defined, take the first\n  transitionDuration = transitionDuration.split(',')[0]\n  transitionDelay = transitionDelay.split(',')[0]\n\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n  if (!object || typeof object !== 'object') {\n    return false\n  }\n\n  if (typeof object.jquery !== 'undefined') {\n    object = object[0]\n  }\n\n  return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n  // it's a jQuery object or a node element\n  if (isElement(object)) {\n    return object.jquery ? object[0] : object\n  }\n\n  if (typeof object === 'string' && object.length > 0) {\n    return document.querySelector(parseSelector(object))\n  }\n\n  return null\n}\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false\n  }\n\n  const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n  // Handle `details` element as its content may falsie appear visible when it is closed\n  const closedDetails = element.closest('details:not([open])')\n\n  if (!closedDetails) {\n    return elementIsVisible\n  }\n\n  if (closedDetails !== element) {\n    const summary = element.closest('summary')\n    if (summary && summary.parentNode !== closedDetails) {\n      return false\n    }\n\n    if (summary === null) {\n      return false\n    }\n  }\n\n  return elementIsVisible\n}\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null\n  }\n\n  // Can find the shadow root otherwise it'll return the document\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode()\n    return root instanceof ShadowRoot ? root : null\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element\n  }\n\n  // when we don't find a shadow root\n  if (!element.parentNode) {\n    return null\n  }\n\n  return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n  element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n  if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return window.jQuery\n  }\n\n  return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        for (const callback of DOMContentLoadedCallbacks) {\n          callback()\n        }\n      })\n    }\n\n    DOMContentLoadedCallbacks.push(callback)\n  } else {\n    callback()\n  }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery()\n    /* istanbul ignore if */\n    if ($) {\n      const name = plugin.NAME\n      const JQUERY_NO_CONFLICT = $.fn[name]\n      $.fn[name] = plugin.jQueryInterface\n      $.fn[name].Constructor = plugin\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT\n        return plugin.jQueryInterface\n      }\n    }\n  })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n  return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback)\n    return\n  }\n\n  const durationPadding = 5\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n  let called = false\n\n  const handler = ({ target }) => {\n    if (target !== transitionElement) {\n      return\n    }\n\n    called = true\n    transitionElement.removeEventListener(TRANSITION_END, handler)\n    execute(callback)\n  }\n\n  transitionElement.addEventListener(TRANSITION_END, handler)\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement)\n    }\n  }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  const listLength = list.length\n  let index = list.indexOf(activeElement)\n\n  // if the element does not exist in the list return an element\n  // depending on the direction and if cycle is allowed\n  if (index === -1) {\n    return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n  }\n\n  index += shouldGetNext ? 1 : -1\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n  defineJQueryPlugin,\n  execute,\n  executeAfterTransition,\n  findShadowRoot,\n  getElement,\n  getjQuery,\n  getNextActiveElement,\n  getTransitionDurationFromElement,\n  getUID,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop,\n  onDOMContentLoaded,\n  parseSelector,\n  reflow,\n  triggerTransitionEnd,\n  toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n  'click',\n  'dblclick',\n  'mouseup',\n  'mousedown',\n  'contextmenu',\n  'mousewheel',\n  'DOMMouseScroll',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n  'selectstart',\n  'selectend',\n  'keydown',\n  'keypress',\n  'keyup',\n  'orientationchange',\n  'touchstart',\n  'touchmove',\n  'touchend',\n  'touchcancel',\n  'pointerdown',\n  'pointermove',\n  'pointerup',\n  'pointerleave',\n  'pointercancel',\n  'gesturestart',\n  'gesturechange',\n  'gestureend',\n  'focus',\n  'blur',\n  'change',\n  'reset',\n  'select',\n  'submit',\n  'focusin',\n  'focusout',\n  'load',\n  'unload',\n  'beforeunload',\n  'resize',\n  'move',\n  'DOMContentLoaded',\n  'readystatechange',\n  'error',\n  'abort',\n  'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n  return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n  const uid = makeEventUid(element)\n\n  element.uidEvent = uid\n  eventRegistry[uid] = eventRegistry[uid] || {}\n\n  return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    hydrateObj(event, { delegateTarget: element })\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn)\n    }\n\n    return fn.apply(element, [event])\n  }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector)\n\n    for (let { target } = event; target && target !== this; target = target.parentNode) {\n      for (const domElement of domElements) {\n        if (domElement !== target) {\n          continue\n        }\n\n        hydrateObj(event, { delegateTarget: target })\n\n        if (handler.oneOff) {\n          EventHandler.off(element, event.type, selector, fn)\n        }\n\n        return fn.apply(target, [event])\n      }\n    }\n  }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n  return Object.values(events)\n    .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n  const isDelegated = typeof handler === 'string'\n  // TODO: tooltip passes `false` instead of selector, so we need to check\n  const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n  let typeEvent = getTypeEvent(originalTypeEvent)\n\n  if (!nativeEvents.has(typeEvent)) {\n    typeEvent = originalTypeEvent\n  }\n\n  return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return\n  }\n\n  let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n  // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n  if (originalTypeEvent in customEvents) {\n    const wrapFunction = fn => {\n      return function (event) {\n        if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n          return fn.call(this, event)\n        }\n      }\n    }\n\n    callable = wrapFunction(callable)\n  }\n\n  const events = getElementEvents(element)\n  const handlers = events[typeEvent] || (events[typeEvent] = {})\n  const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n  if (previousFunction) {\n    previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n    return\n  }\n\n  const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n  const fn = isDelegated ?\n    bootstrapDelegationHandler(element, handler, callable) :\n    bootstrapHandler(element, callable)\n\n  fn.delegationSelector = isDelegated ? handler : null\n  fn.callable = callable\n  fn.oneOff = oneOff\n  fn.uidEvent = uid\n  handlers[uid] = fn\n\n  element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n  if (!fn) {\n    return\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n  delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {}\n\n  for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n    if (handlerKey.includes(namespace)) {\n      removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n    }\n  }\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '')\n  return customEvents[event] || event\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, false)\n  },\n\n  one(element, event, handler, delegationFunction) {\n    addHandler(element, event, handler, delegationFunction, true)\n  },\n\n  off(element, originalTypeEvent, handler, delegationFunction) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return\n    }\n\n    const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n    const inNamespace = typeEvent !== originalTypeEvent\n    const events = getElementEvents(element)\n    const storeElementEvent = events[typeEvent] || {}\n    const isNamespace = originalTypeEvent.startsWith('.')\n\n    if (typeof callable !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!Object.keys(storeElementEvent).length) {\n        return\n      }\n\n      removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n      return\n    }\n\n    if (isNamespace) {\n      for (const elementEvent of Object.keys(events)) {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n      }\n    }\n\n    for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n      }\n    }\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null\n    }\n\n    const $ = getjQuery()\n    const typeEvent = getTypeEvent(event)\n    const inNamespace = event !== typeEvent\n\n    let jQueryEvent = null\n    let bubbles = true\n    let nativeDispatch = true\n    let defaultPrevented = false\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args)\n\n      $(element).trigger(jQueryEvent)\n      bubbles = !jQueryEvent.isPropagationStopped()\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n      defaultPrevented = jQueryEvent.isDefaultPrevented()\n    }\n\n    const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n    if (defaultPrevented) {\n      evt.preventDefault()\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt)\n    }\n\n    if (evt.defaultPrevented && jQueryEvent) {\n      jQueryEvent.preventDefault()\n    }\n\n    return evt\n  }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n  for (const [key, value] of Object.entries(meta)) {\n    try {\n      obj[key] = value\n    } catch {\n      Object.defineProperty(obj, key, {\n        configurable: true,\n        get() {\n          return value\n        }\n      })\n    }\n  }\n\n  return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n  if (value === 'true') {\n    return true\n  }\n\n  if (value === 'false') {\n    return false\n  }\n\n  if (value === Number(value).toString()) {\n    return Number(value)\n  }\n\n  if (value === '' || value === 'null') {\n    return null\n  }\n\n  if (typeof value !== 'string') {\n    return value\n  }\n\n  try {\n    return JSON.parse(decodeURIComponent(value))\n  } catch {\n    return value\n  }\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {}\n    }\n\n    const attributes = {}\n    const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n    for (const key of bsKeys) {\n      let pureKey = key.replace(/^bs/, '')\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)\n      attributes[pureKey] = normalizeData(element.dataset[key])\n    }\n\n    return attributes\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n  }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n  // Getters\n  static get Default() {\n    return {}\n  }\n\n  static get DefaultType() {\n    return {}\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!')\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    return config\n  }\n\n  _mergeConfigObj(config, element) {\n    const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n    return {\n      ...this.constructor.Default,\n      ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n      ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n      ...(typeof config === 'object' ? config : {})\n    }\n  }\n\n  _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n    for (const [property, expectedTypes] of Object.entries(configTypes)) {\n      const value = config[property]\n      const valueType = isElement(value) ? 'element' : toType(value)\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(\n          `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n        )\n      }\n    }\n  }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.8'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n  constructor(element, config) {\n    super()\n\n    element = getElement(element)\n    if (!element) {\n      return\n    }\n\n    this._element = element\n    this._config = this._getConfig(config)\n\n    Data.set(this._element, this.constructor.DATA_KEY, this)\n  }\n\n  // Public\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY)\n    EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n    for (const propertyName of Object.getOwnPropertyNames(this)) {\n      this[propertyName] = null\n    }\n  }\n\n  // Private\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated)\n  }\n\n  _getConfig(config) {\n    config = this._mergeConfigObj(config, this._element)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  // Static\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY)\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n  }\n\n  static get VERSION() {\n    return VERSION\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`\n  }\n\n  static eventName(name) {\n    return `${name}${this.EVENT_KEY}`\n  }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target')\n\n  if (!selector || selector === '#') {\n    let hrefAttribute = element.getAttribute('href')\n\n    // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n    if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n      return null\n    }\n\n    // Just in case some CMS puts out a full URL with the anchor appended\n    if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n      hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n    }\n\n    selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n  }\n\n  return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null\n}\n\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector)\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector))\n  },\n\n  parents(element, selector) {\n    const parents = []\n    let ancestor = element.parentNode.closest(selector)\n\n    while (ancestor) {\n      parents.push(ancestor)\n      ancestor = ancestor.parentNode.closest(selector)\n    }\n\n    return parents\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous]\n      }\n\n      previous = previous.previousElementSibling\n    }\n\n    return []\n  },\n  // TODO: this is now unused; remove later along with prev()\n  next(element, selector) {\n    let next = element.nextElementSibling\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next]\n      }\n\n      next = next.nextElementSibling\n    }\n\n    return []\n  },\n\n  focusableChildren(element) {\n    const focusables = [\n      'a',\n      'button',\n      'input',\n      'textarea',\n      'select',\n      'details',\n      '[tabindex]',\n      '[contenteditable=\"true\"]'\n    ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n  },\n\n  getSelectorFromElement(element) {\n    const selector = getSelector(element)\n\n    if (selector) {\n      return SelectorEngine.findOne(selector) ? selector : null\n    }\n\n    return null\n  },\n\n  getElementFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.findOne(selector) : null\n  },\n\n  getMultipleElementsFromSelector(element) {\n    const selector = getSelector(element)\n\n    return selector ? SelectorEngine.find(selector) : []\n  }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`\n  const name = component.NAME\n\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault()\n    }\n\n    if (isDisabled(this)) {\n      return\n    }\n\n    const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n    const instance = component.getOrCreateInstance(target)\n\n    // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n    instance[method]()\n  })\n}\n\nexport {\n  enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n    if (closeEvent.defaultPrevented) {\n      return\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n  }\n\n  // Private\n  _destroyElement() {\n    this._element.remove()\n    EventHandler.trigger(this._element, EVENT_CLOSED)\n    this.dispose()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this)\n\n      if (config === 'toggle') {\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n  event.preventDefault()\n\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n  const data = Button.getOrCreateInstance(button)\n\n  data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n  endCallback: null,\n  leftCallback: null,\n  rightCallback: null\n}\n\nconst DefaultType = {\n  endCallback: '(function|null)',\n  leftCallback: '(function|null)',\n  rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n  constructor(element, config) {\n    super()\n    this._element = element\n\n    if (!element || !Swipe.isSupported()) {\n      return\n    }\n\n    this._config = this._getConfig(config)\n    this._deltaX = 0\n    this._supportPointerEvents = Boolean(window.PointerEvent)\n    this._initEvents()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  dispose() {\n    EventHandler.off(this._element, EVENT_KEY)\n  }\n\n  // Private\n  _start(event) {\n    if (!this._supportPointerEvents) {\n      this._deltaX = event.touches[0].clientX\n\n      return\n    }\n\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX\n    }\n  }\n\n  _end(event) {\n    if (this._eventIsPointerPenTouch(event)) {\n      this._deltaX = event.clientX - this._deltaX\n    }\n\n    this._handleSwipe()\n    execute(this._config.endCallback)\n  }\n\n  _move(event) {\n    this._deltaX = event.touches && event.touches.length > 1 ?\n      0 :\n      event.touches[0].clientX - this._deltaX\n  }\n\n  _handleSwipe() {\n    const absDeltaX = Math.abs(this._deltaX)\n\n    if (absDeltaX <= SWIPE_THRESHOLD) {\n      return\n    }\n\n    const direction = absDeltaX / this._deltaX\n\n    this._deltaX = 0\n\n    if (!direction) {\n      return\n    }\n\n    execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n  }\n\n  _initEvents() {\n    if (this._supportPointerEvents) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n      EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n    }\n  }\n\n  _eventIsPointerPenTouch(event) {\n    return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n  }\n\n  // Static\n  static isSupported() {\n    return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n  }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getNextActiveElement,\n  isRTL,\n  isVisible,\n  reflow,\n  triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n  interval: 5000,\n  keyboard: true,\n  pause: 'hover',\n  ride: false,\n  touch: true,\n  wrap: true\n}\n\nconst DefaultType = {\n  interval: '(number|boolean)', // TODO:v6 remove boolean support\n  keyboard: 'boolean',\n  pause: '(string|boolean)',\n  ride: '(boolean|string)',\n  touch: 'boolean',\n  wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._interval = null\n    this._activeElement = null\n    this._isSliding = false\n    this.touchTimeout = null\n    this._swipeHelper = null\n\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n    this._addEventListeners()\n\n    if (this._config.ride === CLASS_NAME_CAROUSEL) {\n      this.cycle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  next() {\n    this._slide(ORDER_NEXT)\n  }\n\n  nextWhenVisible() {\n    // FIXME TODO use `document.visibilityState`\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next()\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV)\n  }\n\n  pause() {\n    if (this._isSliding) {\n      triggerTransitionEnd(this._element)\n    }\n\n    this._clearInterval()\n  }\n\n  cycle() {\n    this._clearInterval()\n    this._updateInterval()\n\n    this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n  }\n\n  _maybeEnableCycle() {\n    if (!this._config.ride) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n      return\n    }\n\n    this.cycle()\n  }\n\n  to(index) {\n    const items = this._getItems()\n    if (index > items.length - 1 || index < 0) {\n      return\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n      return\n    }\n\n    const activeIndex = this._getItemIndex(this._getActive())\n    if (activeIndex === index) {\n      return\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n    this._slide(order, items[index])\n  }\n\n  dispose() {\n    if (this._swipeHelper) {\n      this._swipeHelper.dispose()\n    }\n\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    config.defaultInterval = config.interval\n    return config\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n    }\n\n    if (this._config.touch && Swipe.isSupported()) {\n      this._addTouchEventListeners()\n    }\n  }\n\n  _addTouchEventListeners() {\n    for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n      EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n    }\n\n    const endCallBack = () => {\n      if (this._config.pause !== 'hover') {\n        return\n      }\n\n      // If it's a touch-enabled device, mouseenter/leave are fired as\n      // part of the mouse compatibility events on first tap - the carousel\n      // would stop cycling until user tapped out of it;\n      // here, we listen for touchend, explicitly pause the carousel\n      // (as if it's the second time we tap on it, mouseenter compat event\n      // is NOT fired) and after a timeout (to allow for mouse compatibility\n      // events to fire) we explicitly restart cycling\n\n      this.pause()\n      if (this.touchTimeout) {\n        clearTimeout(this.touchTimeout)\n      }\n\n      this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n    }\n\n    const swipeConfig = {\n      leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n      rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n      endCallback: endCallBack\n    }\n\n    this._swipeHelper = new Swipe(this._element, swipeConfig)\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key]\n    if (direction) {\n      event.preventDefault()\n      this._slide(this._directionToOrder(direction))\n    }\n  }\n\n  _getItemIndex(element) {\n    return this._getItems().indexOf(element)\n  }\n\n  _setActiveIndicatorElement(index) {\n    if (!this._indicatorsElement) {\n      return\n    }\n\n    const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n    activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n    activeIndicator.removeAttribute('aria-current')\n\n    const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n    if (newActiveIndicator) {\n      newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n      newActiveIndicator.setAttribute('aria-current', 'true')\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || this._getActive()\n\n    if (!element) {\n      return\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n    this._config.interval = elementInterval || this._config.defaultInterval\n  }\n\n  _slide(order, element = null) {\n    if (this._isSliding) {\n      return\n    }\n\n    const activeElement = this._getActive()\n    const isNext = order === ORDER_NEXT\n    const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n    if (nextElement === activeElement) {\n      return\n    }\n\n    const nextElementIndex = this._getItemIndex(nextElement)\n\n    const triggerEvent = eventName => {\n      return EventHandler.trigger(this._element, eventName, {\n        relatedTarget: nextElement,\n        direction: this._orderToDirection(order),\n        from: this._getItemIndex(activeElement),\n        to: nextElementIndex\n      })\n    }\n\n    const slideEvent = triggerEvent(EVENT_SLIDE)\n\n    if (slideEvent.defaultPrevented) {\n      return\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      // TODO: change tests that use empty divs to avoid this check\n      return\n    }\n\n    const isCycling = Boolean(this._interval)\n    this.pause()\n\n    this._isSliding = true\n\n    this._setActiveIndicatorElement(nextElementIndex)\n    this._activeElement = nextElement\n\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n    nextElement.classList.add(orderClassName)\n\n    reflow(nextElement)\n\n    activeElement.classList.add(directionalClassName)\n    nextElement.classList.add(directionalClassName)\n\n    const completeCallBack = () => {\n      nextElement.classList.remove(directionalClassName, orderClassName)\n      nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n      activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n      this._isSliding = false\n\n      triggerEvent(EVENT_SLID)\n    }\n\n    this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n    if (isCycling) {\n      this.cycle()\n    }\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_SLIDE)\n  }\n\n  _getActive() {\n    return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n  }\n\n  _getItems() {\n    return SelectorEngine.find(SELECTOR_ITEM, this._element)\n  }\n\n  _clearInterval() {\n    if (this._interval) {\n      clearInterval(this._interval)\n      this._interval = null\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n  }\n\n  _orderToDirection(order) {\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Carousel.getOrCreateInstance(this, config)\n\n      if (typeof config === 'number') {\n        data.to(config)\n        return\n      }\n\n      if (typeof config === 'string') {\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n    return\n  }\n\n  event.preventDefault()\n\n  const carousel = Carousel.getOrCreateInstance(target)\n  const slideIndex = this.getAttribute('data-bs-slide-to')\n\n  if (slideIndex) {\n    carousel.to(slideIndex)\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n    carousel.next()\n    carousel._maybeEnableCycle()\n    return\n  }\n\n  carousel.prev()\n  carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n  for (const carousel of carousels) {\n    Carousel.getOrCreateInstance(carousel)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  getElement,\n  reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n  parent: null,\n  toggle: true\n}\n\nconst DefaultType = {\n  parent: '(null|element)',\n  toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isTransitioning = false\n    this._triggerArray = []\n\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n    for (const elem of toggleList) {\n      const selector = SelectorEngine.getSelectorFromElement(elem)\n      const filterElement = SelectorEngine.find(selector)\n        .filter(foundElement => foundElement === this._element)\n\n      if (selector !== null && filterElement.length) {\n        this._triggerArray.push(elem)\n      }\n    }\n\n    this._initializeChildren()\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n    }\n\n    if (this._config.toggle) {\n      this.toggle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    if (this._isShown()) {\n      this.hide()\n    } else {\n      this.show()\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return\n    }\n\n    let activeChildren = []\n\n    // find active children\n    if (this._config.parent) {\n      activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n        .filter(element => element !== this._element)\n        .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n    }\n\n    if (activeChildren.length && activeChildren[0]._isTransitioning) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    for (const activeInstance of activeChildren) {\n      activeInstance.hide()\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE)\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n    this._element.style[dimension] = 0\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true)\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n      this._element.style[dimension] = ''\n\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n    }\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n    const scrollSize = `scroll${capitalizedDimension}`\n\n    this._queueCallback(complete, this._element, true)\n    this._element.style[dimension] = `${this._element[scrollSize]}px`\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n    if (startEvent.defaultPrevented) {\n      return\n    }\n\n    const dimension = this._getDimension()\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING)\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n    for (const trigger of this._triggerArray) {\n      const element = SelectorEngine.getElementFromSelector(trigger)\n\n      if (element && !this._isShown(element)) {\n        this._addAriaAndCollapsedClass([trigger], false)\n      }\n    }\n\n    this._isTransitioning = true\n\n    const complete = () => {\n      this._isTransitioning = false\n      this._element.classList.remove(CLASS_NAME_COLLAPSING)\n      this._element.classList.add(CLASS_NAME_COLLAPSE)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.style[dimension] = ''\n\n    this._queueCallback(complete, this._element, true)\n  }\n\n  // Private\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _configAfterMerge(config) {\n    config.toggle = Boolean(config.toggle) // Coerce string values\n    config.parent = getElement(config.parent)\n    return config\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return\n    }\n\n    const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n    for (const element of children) {\n      const selected = SelectorEngine.getElementFromSelector(element)\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected))\n      }\n    }\n  }\n\n  _getFirstLevelChildren(selector) {\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n    // remove children if greater depth\n    return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return\n    }\n\n    for (const element of triggerArray) {\n      element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n      element.setAttribute('aria-expanded', isOpen)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    const _config = {}\n    if (typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false\n    }\n\n    return this.each(function () {\n      const data = Collapse.getOrCreateInstance(this, _config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config]()\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n    event.preventDefault()\n  }\n\n  for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n    Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin,\n  execute,\n  getElement,\n  getNextActiveElement,\n  isDisabled,\n  isElement,\n  isRTL,\n  isVisible,\n  noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n  autoClose: true,\n  boundary: 'clippingParents',\n  display: 'dynamic',\n  offset: [0, 2],\n  popperConfig: null,\n  reference: 'toggle'\n}\n\nconst DefaultType = {\n  autoClose: '(boolean|string)',\n  boundary: '(string|element)',\n  display: 'string',\n  offset: '(array|string|function)',\n  popperConfig: '(null|object|function)',\n  reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._popper = null\n    this._parent = this._element.parentNode // dropdown wrapper\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n      SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n    this._inNavbar = this._detectNavbar()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle() {\n    return this._isShown() ? this.hide() : this.show()\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._createPopper()\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    this._element.focus()\n    this._element.setAttribute('aria-expanded', true)\n\n    this._menu.classList.add(CLASS_NAME_SHOW)\n    this._element.classList.add(CLASS_NAME_SHOW)\n    EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown()) {\n      return\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    }\n\n    this._completeHide(relatedTarget)\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    super.dispose()\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar()\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Private\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    if (this._popper) {\n      this._popper.destroy()\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW)\n    this._element.classList.remove(CLASS_NAME_SHOW)\n    this._element.setAttribute('aria-expanded', 'false')\n    Manipulator.removeDataAttribute(this._menu, 'popper')\n    EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n  }\n\n  _getConfig(config) {\n    config = super._getConfig(config)\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) &&\n      typeof config.reference.getBoundingClientRect !== 'function'\n    ) {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n    }\n\n    return config\n  }\n\n  _createPopper() {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    let referenceElement = this._element\n\n    if (this._config.reference === 'parent') {\n      referenceElement = this._parent\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference)\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference\n    }\n\n    const popperConfig = this._getPopperConfig()\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n  }\n\n  _isShown() {\n    return this._menu.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._parent\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n      return PLACEMENT_TOPCENTER\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n      return PLACEMENT_BOTTOMCENTER\n    }\n\n    // We need to trim the value because custom properties can also include spaces\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n  }\n\n  _detectNavbar() {\n    return this._element.closest(SELECTOR_NAVBAR) !== null\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      },\n      {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }\n\n    // Disable Popper if we have a static display or Dropdown is in Navbar\n    if (this._inNavbar || this._config.display === 'static') {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _selectMenuItem({ key, target }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n    if (!items.length) {\n      return\n    }\n\n    // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n\n  static clearMenus(event) {\n    if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return\n    }\n\n    const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n    for (const toggle of openToggles) {\n      const context = Dropdown.getInstance(toggle)\n      if (!context || context._config.autoClose === false) {\n        continue\n      }\n\n      const composedPath = event.composedPath()\n      const isMenuTarget = composedPath.includes(context._menu)\n      if (\n        composedPath.includes(context._element) ||\n        (context._config.autoClose === 'inside' && !isMenuTarget) ||\n        (context._config.autoClose === 'outside' && isMenuTarget)\n      ) {\n        continue\n      }\n\n      // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n      if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n        continue\n      }\n\n      const relatedTarget = { relatedTarget: context._element }\n\n      if (event.type === 'click') {\n        relatedTarget.clickEvent = event\n      }\n\n      context._completeHide(relatedTarget)\n    }\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not an UP | DOWN | ESCAPE key => not a dropdown command\n    // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n    const isInput = /input|textarea/i.test(event.target.tagName)\n    const isEscapeEvent = event.key === ESCAPE_KEY\n    const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n    if (!isUpOrDownEvent && !isEscapeEvent) {\n      return\n    }\n\n    if (isInput && !isEscapeEvent) {\n      return\n    }\n\n    event.preventDefault()\n\n    // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n      this :\n      (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n        SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n    const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n    if (isUpOrDownEvent) {\n      event.stopPropagation()\n      instance.show()\n      instance._selectMenuItem(event)\n      return\n    }\n\n    if (instance._isShown()) { // else is escape and we check if it is shown\n      event.stopPropagation()\n      instance.hide()\n      getToggleButton.focus()\n    }\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  event.preventDefault()\n  Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport {\n  execute, executeAfterTransition, getElement, reflow\n} from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n  className: 'modal-backdrop',\n  clickCallback: null,\n  isAnimated: false,\n  isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n  rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n  className: 'string',\n  clickCallback: '(function|null)',\n  isAnimated: 'boolean',\n  isVisible: 'boolean',\n  rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isAppended = false\n    this._element = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._append()\n\n    const element = this._getElement()\n    if (this._config.isAnimated) {\n      reflow(element)\n    }\n\n    element.classList.add(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      execute(callback)\n    })\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback)\n      return\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n    this._emulateAnimation(() => {\n      this.dispose()\n      execute(callback)\n    })\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n    this._element.remove()\n    this._isAppended = false\n  }\n\n  // Private\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div')\n      backdrop.className = this._config.className\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE)\n      }\n\n      this._element = backdrop\n    }\n\n    return this._element\n  }\n\n  _configAfterMerge(config) {\n    // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n    config.rootElement = getElement(config.rootElement)\n    return config\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return\n    }\n\n    const element = this._getElement()\n    this._config.rootElement.append(element)\n\n    EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback)\n    })\n\n    this._isAppended = true\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n  }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n  autofocus: true,\n  trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n  autofocus: 'boolean',\n  trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n    this._isActive = false\n    this._lastTabNavDirection = null\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  activate() {\n    if (this._isActive) {\n      return\n    }\n\n    if (this._config.autofocus) {\n      this._config.trapElement.focus()\n    }\n\n    EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n    EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n    this._isActive = true\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return\n    }\n\n    this._isActive = false\n    EventHandler.off(document, EVENT_KEY)\n  }\n\n  // Private\n  _handleFocusin(event) {\n    const { trapElement } = this._config\n\n    if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n      return\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement)\n\n    if (elements.length === 0) {\n      trapElement.focus()\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus()\n    } else {\n      elements[0].focus()\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n  }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body\n  }\n\n  // Public\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth\n    return Math.abs(window.innerWidth - documentWidth)\n  }\n\n  hide() {\n    const width = this.getWidth()\n    this._disableOverFlow()\n    // give padding to element to balance the hidden scrollbar width\n    this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow')\n    this._resetElementAttributes(this._element, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0\n  }\n\n  // Private\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow')\n    this._element.style.overflow = 'hidden'\n  }\n\n  _setElementAttributes(selector, styleProperty, callback) {\n    const scrollbarWidth = this.getWidth()\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return\n      }\n\n      this._saveInitialAttribute(element, styleProperty)\n      const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n      element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _saveInitialAttribute(element, styleProperty) {\n    const actualValue = element.style.getPropertyValue(styleProperty)\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProperty, actualValue)\n    }\n  }\n\n  _resetElementAttributes(selector, styleProperty) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProperty)\n      // We only want to remove the property if the value is `null`; the value can also be zero\n      if (value === null) {\n        element.style.removeProperty(styleProperty)\n        return\n      }\n\n      Manipulator.removeDataAttribute(element, styleProperty)\n      element.style.setProperty(styleProperty, value)\n    }\n\n    this._applyManipulationCallback(selector, manipulationCallBack)\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector)\n      return\n    }\n\n    for (const sel of SelectorEngine.find(selector, this._element)) {\n      callBack(sel)\n    }\n  }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin, isRTL, isVisible, reflow\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n  backdrop: true,\n  focus: true,\n  keyboard: true\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  focus: 'boolean',\n  keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._isShown = false\n    this._isTransitioning = false\n    this._scrollBar = new ScrollBarHelper()\n\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n      relatedTarget\n    })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._isTransitioning = true\n\n    this._scrollBar.hide()\n\n    document.body.classList.add(CLASS_NAME_OPEN)\n\n    this._adjustDialog()\n\n    this._backdrop.show(() => this._showElement(relatedTarget))\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = false\n    this._isTransitioning = true\n    this._focustrap.deactivate()\n\n    this._element.classList.remove(CLASS_NAME_SHOW)\n\n    this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n  }\n\n  dispose() {\n    EventHandler.off(window, EVENT_KEY)\n    EventHandler.off(this._dialog, EVENT_KEY)\n\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n\n    super.dispose()\n  }\n\n  handleUpdate() {\n    this._adjustDialog()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n      isAnimated: this._isAnimated()\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _showElement(relatedTarget) {\n    // try to append dynamic modal\n    if (!document.body.contains(this._element)) {\n      document.body.append(this._element)\n    }\n\n    this._element.style.display = 'block'\n    this._element.removeAttribute('aria-hidden')\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.scrollTop = 0\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n    if (modalBody) {\n      modalBody.scrollTop = 0\n    }\n\n    reflow(this._element)\n\n    this._element.classList.add(CLASS_NAME_SHOW)\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate()\n      }\n\n      this._isTransitioning = false\n      EventHandler.trigger(this._element, EVENT_SHOWN, {\n        relatedTarget\n      })\n    }\n\n    this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      this._triggerBackdropTransition()\n    })\n\n    EventHandler.on(window, EVENT_RESIZE, () => {\n      if (this._isShown && !this._isTransitioning) {\n        this._adjustDialog()\n      }\n    })\n\n    EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n      // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n      EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n        if (this._element !== event.target || this._element !== event2.target) {\n          return\n        }\n\n        if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition()\n          return\n        }\n\n        if (this._config.backdrop) {\n          this.hide()\n        }\n      })\n    })\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none'\n    this._element.setAttribute('aria-hidden', true)\n    this._element.removeAttribute('aria-modal')\n    this._element.removeAttribute('role')\n    this._isTransitioning = false\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN)\n      this._resetAdjustments()\n      this._scrollBar.reset()\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    })\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE)\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const initialOverflowY = this._element.style.overflowY\n    // return if the following background transition hasn't yet completed\n    if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n      return\n    }\n\n    if (!isModalOverflowing) {\n      this._element.style.overflowY = 'hidden'\n    }\n\n    this._element.classList.add(CLASS_NAME_STATIC)\n    this._queueCallback(() => {\n      this._element.classList.remove(CLASS_NAME_STATIC)\n      this._queueCallback(() => {\n        this._element.style.overflowY = initialOverflowY\n      }, this._dialog)\n    }, this._dialog)\n\n    this._element.focus()\n  }\n\n  /**\n   * The following methods are used to handle overflowing modals\n   */\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n    const scrollbarWidth = this._scrollBar.getWidth()\n    const isBodyOverflowing = scrollbarWidth > 0\n\n    if (isBodyOverflowing && !isModalOverflowing) {\n      const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n\n    if (!isBodyOverflowing && isModalOverflowing) {\n      const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n      this._element.style[property] = `${scrollbarWidth}px`\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = ''\n    this._element.style.paddingRight = ''\n  }\n\n  // Static\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](relatedTarget)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  EventHandler.one(target, EVENT_SHOW, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN, () => {\n      if (isVisible(this)) {\n        this.focus()\n      }\n    })\n  })\n\n  // avoid conflict when clicking modal toggler while another one is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen) {\n    Modal.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Modal.getOrCreateInstance(target)\n\n  data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n  defineJQueryPlugin,\n  isDisabled,\n  isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n}\n\nconst DefaultType = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._isShown = false\n    this._backdrop = this._initializeBackDrop()\n    this._focustrap = this._initializeFocusTrap()\n    this._addEventListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget)\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._isShown = true\n    this._backdrop.show()\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide()\n    }\n\n    this._element.setAttribute('aria-modal', true)\n    this._element.setAttribute('role', 'dialog')\n    this._element.classList.add(CLASS_NAME_SHOWING)\n\n    const completeCallBack = () => {\n      if (!this._config.scroll || this._config.backdrop) {\n        this._focustrap.activate()\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW)\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n    }\n\n    this._queueCallback(completeCallBack, this._element, true)\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    this._focustrap.deactivate()\n    this._element.blur()\n    this._isShown = false\n    this._element.classList.add(CLASS_NAME_HIDING)\n    this._backdrop.hide()\n\n    const completeCallback = () => {\n      this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n      this._element.removeAttribute('aria-modal')\n      this._element.removeAttribute('role')\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset()\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._queueCallback(completeCallback, this._element, true)\n  }\n\n  dispose() {\n    this._backdrop.dispose()\n    this._focustrap.deactivate()\n    super.dispose()\n  }\n\n  // Private\n  _initializeBackDrop() {\n    const clickCallback = () => {\n      if (this._config.backdrop === 'static') {\n        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n        return\n      }\n\n      this.hide()\n    }\n\n    // 'static' option will be translated to true, and booleans will keep their value\n    const isVisible = Boolean(this._config.backdrop)\n\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: isVisible ? clickCallback : null\n    })\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    })\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (event.key !== ESCAPE_KEY) {\n        return\n      }\n\n      if (this._config.keyboard) {\n        this.hide()\n        return\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n    })\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config](this)\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  const target = SelectorEngine.getElementFromSelector(this)\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus()\n    }\n  })\n\n  // avoid conflict when clicking a toggler of an offcanvas, while another is open\n  const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n  if (alreadyOpen && alreadyOpen !== target) {\n    Offcanvas.getInstance(alreadyOpen).hide()\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target)\n  data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n    Offcanvas.getOrCreateInstance(selector).show()\n  }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n  for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n    if (getComputedStyle(element).position !== 'fixed') {\n      Offcanvas.getOrCreateInstance(element).hide()\n    }\n  }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  dd: [],\n  div: [],\n  dl: [],\n  dt: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n  'background',\n  'cite',\n  'href',\n  'itemtype',\n  'longdesc',\n  'poster',\n  'src',\n  'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase()\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n    }\n\n    return true\n  }\n\n  // Check if a regular expression validates the attribute.\n  return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n    .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml\n  }\n\n  if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n    return sanitizeFunction(unsafeHtml)\n  }\n\n  const domParser = new window.DOMParser()\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n  for (const element of elements) {\n    const elementName = element.nodeName.toLowerCase()\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove()\n      continue\n    }\n\n    const attributeList = [].concat(...element.attributes)\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n    for (const attribute of attributeList) {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName)\n      }\n    }\n  }\n\n  return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  content: {}, // { selector : text ,  selector2 : text2 , }\n  extraClass: '',\n  html: false,\n  sanitize: true,\n  sanitizeFn: null,\n  template: '<div></div>'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  content: 'object',\n  extraClass: '(string|function)',\n  html: 'boolean',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  template: 'string'\n}\n\nconst DefaultContentType = {\n  entry: '(string|element|function|null)',\n  selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n  constructor(config) {\n    super()\n    this._config = this._getConfig(config)\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  getContent() {\n    return Object.values(this._config.content)\n      .map(config => this._resolvePossibleFunction(config))\n      .filter(Boolean)\n  }\n\n  hasContent() {\n    return this.getContent().length > 0\n  }\n\n  changeContent(content) {\n    this._checkContent(content)\n    this._config.content = { ...this._config.content, ...content }\n    return this\n  }\n\n  toHtml() {\n    const templateWrapper = document.createElement('div')\n    templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n    for (const [selector, text] of Object.entries(this._config.content)) {\n      this._setContent(templateWrapper, text, selector)\n    }\n\n    const template = templateWrapper.children[0]\n    const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n    if (extraClass) {\n      template.classList.add(...extraClass.split(' '))\n    }\n\n    return template\n  }\n\n  // Private\n  _typeCheckConfig(config) {\n    super._typeCheckConfig(config)\n    this._checkContent(config.content)\n  }\n\n  _checkContent(arg) {\n    for (const [selector, content] of Object.entries(arg)) {\n      super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n    }\n  }\n\n  _setContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template)\n\n    if (!templateElement) {\n      return\n    }\n\n    content = this._resolvePossibleFunction(content)\n\n    if (!content) {\n      templateElement.remove()\n      return\n    }\n\n    if (isElement(content)) {\n      this._putElementInTemplate(getElement(content), templateElement)\n      return\n    }\n\n    if (this._config.html) {\n      templateElement.innerHTML = this._maybeSanitize(content)\n      return\n    }\n\n    templateElement.textContent = content\n  }\n\n  _maybeSanitize(arg) {\n    return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [undefined, this])\n  }\n\n  _putElementInTemplate(element, templateElement) {\n    if (this._config.html) {\n      templateElement.innerHTML = ''\n      templateElement.append(element)\n      return\n    }\n\n    templateElement.textContent = element.textContent\n  }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport {\n  defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop\n} from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n  allowList: DefaultAllowlist,\n  animation: true,\n  boundary: 'clippingParents',\n  container: false,\n  customClass: '',\n  delay: 0,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  html: false,\n  offset: [0, 6],\n  placement: 'top',\n  popperConfig: null,\n  sanitize: true,\n  sanitizeFn: null,\n  selector: false,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>',\n  title: '',\n  trigger: 'hover focus'\n}\n\nconst DefaultType = {\n  allowList: 'object',\n  animation: 'boolean',\n  boundary: '(string|element)',\n  container: '(string|element|boolean)',\n  customClass: '(string|function)',\n  delay: '(number|object)',\n  fallbackPlacements: 'array',\n  html: 'boolean',\n  offset: '(array|string|function)',\n  placement: '(string|function)',\n  popperConfig: '(null|object|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  selector: '(string|boolean)',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org/docs/v2/)')\n    }\n\n    super(element, config)\n\n    // Private\n    this._isEnabled = true\n    this._timeout = 0\n    this._isHovered = null\n    this._activeTrigger = {}\n    this._popper = null\n    this._templateFactory = null\n    this._newContent = null\n\n    // Protected\n    this.tip = null\n\n    this._setListeners()\n\n    if (!this._config.selector) {\n      this._fixTitle()\n    }\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  enable() {\n    this._isEnabled = true\n  }\n\n  disable() {\n    this._isEnabled = false\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled\n  }\n\n  toggle() {\n    if (!this._isEnabled) {\n      return\n    }\n\n    if (this._isShown()) {\n      this._leave()\n      return\n    }\n\n    this._enter()\n  }\n\n  dispose() {\n    clearTimeout(this._timeout)\n\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n    if (this._element.getAttribute('data-bs-original-title')) {\n      this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n    }\n\n    this._disposePopper()\n    super.dispose()\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements')\n    }\n\n    if (!(this._isWithContent() && this._isEnabled)) {\n      return\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n    const shadowRoot = findShadowRoot(this._element)\n    const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return\n    }\n\n    // TODO: v6 remove this or make it optional\n    this._disposePopper()\n\n    const tip = this._getTipElement()\n\n    this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n    const { container } = this._config\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip)\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n    }\n\n    this._popper = this._createPopper(tip)\n\n    tip.classList.add(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.on(element, 'mouseover', noop)\n      }\n    }\n\n    const complete = () => {\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n      if (this._isHovered === false) {\n        this._leave()\n      }\n\n      this._isHovered = false\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  hide() {\n    if (!this._isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const tip = this._getTipElement()\n    tip.classList.remove(CLASS_NAME_SHOW)\n\n    // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n    if ('ontouchstart' in document.documentElement) {\n      for (const element of [].concat(...document.body.children)) {\n        EventHandler.off(element, 'mouseover', noop)\n      }\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false\n    this._activeTrigger[TRIGGER_FOCUS] = false\n    this._activeTrigger[TRIGGER_HOVER] = false\n    this._isHovered = null // it is a trick to support manual triggering\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return\n      }\n\n      if (!this._isHovered) {\n        this._disposePopper()\n      }\n\n      this._element.removeAttribute('aria-describedby')\n      EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n    }\n\n    this._queueCallback(complete, this.tip, this._isAnimated())\n  }\n\n  update() {\n    if (this._popper) {\n      this._popper.update()\n    }\n  }\n\n  // Protected\n  _isWithContent() {\n    return Boolean(this._getTitle())\n  }\n\n  _getTipElement() {\n    if (!this.tip) {\n      this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n    }\n\n    return this.tip\n  }\n\n  _createTipElement(content) {\n    const tip = this._getTemplateFactory(content).toHtml()\n\n    // TODO: remove this check in v6\n    if (!tip) {\n      return null\n    }\n\n    tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n    // TODO: v6 the following can be achieved with CSS only\n    tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n    const tipId = getUID(this.constructor.NAME).toString()\n\n    tip.setAttribute('id', tipId)\n\n    if (this._isAnimated()) {\n      tip.classList.add(CLASS_NAME_FADE)\n    }\n\n    return tip\n  }\n\n  setContent(content) {\n    this._newContent = content\n    if (this._isShown()) {\n      this._disposePopper()\n      this.show()\n    }\n  }\n\n  _getTemplateFactory(content) {\n    if (this._templateFactory) {\n      this._templateFactory.changeContent(content)\n    } else {\n      this._templateFactory = new TemplateFactory({\n        ...this._config,\n        // the `content` var has to be after `this._config`\n        // to override config.content in case of popover\n        content,\n        extraClass: this._resolvePossibleFunction(this._config.customClass)\n      })\n    }\n\n    return this._templateFactory\n  }\n\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n    }\n  }\n\n  _getTitle() {\n    return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n  }\n\n  // Private\n  _initializeOnDelegatedTarget(event) {\n    return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n  }\n\n  _isAnimated() {\n    return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _isShown() {\n    return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  _createPopper(tip) {\n    const placement = execute(this._config.placement, [this, tip, this._element])\n    const attachment = AttachmentMap[placement.toUpperCase()]\n    return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n  }\n\n  _getOffset() {\n    const { offset } = this._config\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(value => Number.parseInt(value, 10))\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element)\n    }\n\n    return offset\n  }\n\n  _resolvePossibleFunction(arg) {\n    return execute(arg, [this._element, this._element])\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [\n        {\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        },\n        {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        },\n        {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        },\n        {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        },\n        {\n          name: 'preSetPlacement',\n          enabled: true,\n          phase: 'beforeMain',\n          fn: data => {\n            // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n            // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n            this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n          }\n        }\n      ]\n    }\n\n    return {\n      ...defaultBsPopperConfig,\n      ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])\n    }\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ')\n\n    for (const trigger of triggers) {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK])\n          context.toggle()\n        })\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSEENTER) :\n          this.constructor.eventName(EVENT_FOCUSIN)\n        const eventOut = trigger === TRIGGER_HOVER ?\n          this.constructor.eventName(EVENT_MOUSELEAVE) :\n          this.constructor.eventName(EVENT_FOCUSOUT)\n\n        EventHandler.on(this._element, eventIn, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n          context._enter()\n        })\n        EventHandler.on(this._element, eventOut, this._config.selector, event => {\n          const context = this._initializeOnDelegatedTarget(event)\n          context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n            context._element.contains(event.relatedTarget)\n\n          context._leave()\n        })\n      }\n    }\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide()\n      }\n    }\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title')\n\n    if (!title) {\n      return\n    }\n\n    if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n      this._element.setAttribute('aria-label', title)\n    }\n\n    this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n    this._element.removeAttribute('title')\n  }\n\n  _enter() {\n    if (this._isShown() || this._isHovered) {\n      this._isHovered = true\n      return\n    }\n\n    this._isHovered = true\n\n    this._setTimeout(() => {\n      if (this._isHovered) {\n        this.show()\n      }\n    }, this._config.delay.show)\n  }\n\n  _leave() {\n    if (this._isWithActiveTrigger()) {\n      return\n    }\n\n    this._isHovered = false\n\n    this._setTimeout(() => {\n      if (!this._isHovered) {\n        this.hide()\n      }\n    }, this._config.delay.hide)\n  }\n\n  _setTimeout(handler, timeout) {\n    clearTimeout(this._timeout)\n    this._timeout = setTimeout(handler, timeout)\n  }\n\n  _isWithActiveTrigger() {\n    return Object.values(this._activeTrigger).includes(true)\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n    for (const dataAttribute of Object.keys(dataAttributes)) {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n        delete dataAttributes[dataAttribute]\n      }\n    }\n\n    config = {\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    }\n    config = this._mergeConfigObj(config)\n    config = this._configAfterMerge(config)\n    this._typeCheckConfig(config)\n    return config\n  }\n\n  _configAfterMerge(config) {\n    config.container = config.container === false ? document.body : getElement(config.container)\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      }\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString()\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString()\n    }\n\n    return config\n  }\n\n  _getDelegateConfig() {\n    const config = {}\n\n    for (const [key, value] of Object.entries(this._config)) {\n      if (this.constructor.Default[key] !== value) {\n        config[key] = value\n      }\n    }\n\n    config.selector = false\n    config.trigger = 'manual'\n\n    // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n    return config\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy()\n      this._popper = null\n    }\n\n    if (this.tip) {\n      this.tip.remove()\n      this.tip = null\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n  ...Tooltip.Default,\n  content: '',\n  offset: [0, 8],\n  placement: 'right',\n  template: '<div class=\"popover\" role=\"tooltip\">' +\n    '<div class=\"popover-arrow\"></div>' +\n    '<h3 class=\"popover-header\"></h3>' +\n    '<div class=\"popover-body\"></div>' +\n    '</div>',\n  trigger: 'click'\n}\n\nconst DefaultType = {\n  ...Tooltip.DefaultType,\n  content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Overrides\n  _isWithContent() {\n    return this._getTitle() || this._getContent()\n  }\n\n  // Private\n  _getContentForTemplate() {\n    return {\n      [SELECTOR_TITLE]: this._getTitle(),\n      [SELECTOR_CONTENT]: this._getContent()\n    }\n  }\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content)\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n  defineJQueryPlugin, getElement, isDisabled, isVisible\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n  offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: '0px 0px -25%',\n  smoothScroll: false,\n  target: null,\n  threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n  offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n  rootMargin: 'string',\n  smoothScroll: 'boolean',\n  target: 'element',\n  threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    // this._element is the observablesContainer and config.target the menu links wrapper\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n    this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n    this._activeTarget = null\n    this._observer = null\n    this._previousScrollData = {\n      visibleEntryTop: 0,\n      parentScrollTop: 0\n    }\n    this.refresh() // initialize\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  refresh() {\n    this._initializeTargetsAndObservables()\n    this._maybeEnableSmoothScroll()\n\n    if (this._observer) {\n      this._observer.disconnect()\n    } else {\n      this._observer = this._getNewObserver()\n    }\n\n    for (const section of this._observableSections.values()) {\n      this._observer.observe(section)\n    }\n  }\n\n  dispose() {\n    this._observer.disconnect()\n    super.dispose()\n  }\n\n  // Private\n  _configAfterMerge(config) {\n    // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n    config.target = getElement(config.target) || document.body\n\n    // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n    config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n    if (typeof config.threshold === 'string') {\n      config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n    }\n\n    return config\n  }\n\n  _maybeEnableSmoothScroll() {\n    if (!this._config.smoothScroll) {\n      return\n    }\n\n    // unregister any previous listeners\n    EventHandler.off(this._config.target, EVENT_CLICK)\n\n    EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n      const observableSection = this._observableSections.get(event.target.hash)\n      if (observableSection) {\n        event.preventDefault()\n        const root = this._rootElement || window\n        const height = observableSection.offsetTop - this._element.offsetTop\n        if (root.scrollTo) {\n          root.scrollTo({ top: height, behavior: 'smooth' })\n          return\n        }\n\n        // Chrome 60 doesn't support `scrollTo`\n        root.scrollTop = height\n      }\n    })\n  }\n\n  _getNewObserver() {\n    const options = {\n      root: this._rootElement,\n      threshold: this._config.threshold,\n      rootMargin: this._config.rootMargin\n    }\n\n    return new IntersectionObserver(entries => this._observerCallback(entries), options)\n  }\n\n  // The logic of selection\n  _observerCallback(entries) {\n    const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n    const activate = entry => {\n      this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n      this._process(targetElement(entry))\n    }\n\n    const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n    const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n    this._previousScrollData.parentScrollTop = parentScrollTop\n\n    for (const entry of entries) {\n      if (!entry.isIntersecting) {\n        this._activeTarget = null\n        this._clearActiveClass(targetElement(entry))\n\n        continue\n      }\n\n      const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n      // if we are scrolling down, pick the bigger offsetTop\n      if (userScrollsDown && entryIsLowerThanPrevious) {\n        activate(entry)\n        // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n        if (!parentScrollTop) {\n          return\n        }\n\n        continue\n      }\n\n      // if we are scrolling up, pick the smallest offsetTop\n      if (!userScrollsDown && !entryIsLowerThanPrevious) {\n        activate(entry)\n      }\n    }\n  }\n\n  _initializeTargetsAndObservables() {\n    this._targetLinks = new Map()\n    this._observableSections = new Map()\n\n    const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n    for (const anchor of targetLinks) {\n      // ensure that the anchor has an id and is not disabled\n      if (!anchor.hash || isDisabled(anchor)) {\n        continue\n      }\n\n      const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n      // ensure that the observableSection exists & is visible\n      if (isVisible(observableSection)) {\n        this._targetLinks.set(decodeURI(anchor.hash), anchor)\n        this._observableSections.set(anchor.hash, observableSection)\n      }\n    }\n  }\n\n  _process(target) {\n    if (this._activeTarget === target) {\n      return\n    }\n\n    this._clearActiveClass(this._config.target)\n    this._activeTarget = target\n    target.classList.add(CLASS_NAME_ACTIVE)\n    this._activateParents(target)\n\n    EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n  }\n\n  _activateParents(target) {\n    // Activate dropdown parents\n    if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n        .classList.add(CLASS_NAME_ACTIVE)\n      return\n    }\n\n    for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n      // Set triggered links parents as active\n      // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n      for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n        item.classList.add(CLASS_NAME_ACTIVE)\n      }\n    }\n  }\n\n  _clearActiveClass(parent) {\n    parent.classList.remove(CLASS_NAME_ACTIVE)\n\n    const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n    for (const node of activeNodes) {\n      node.classList.remove(CLASS_NAME_ACTIVE)\n    }\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n    ScrollSpy.getOrCreateInstance(spy)\n  }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n  constructor(element) {\n    super(element)\n    this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n    if (!this._parent) {\n      return\n      // TODO: should throw exception in v6\n      // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n    }\n\n    // Set up initial aria attributes\n    this._setInitialAttributes(this._parent, this._getChildren())\n\n    EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n  }\n\n  // Getters\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() { // Shows this elem and deactivate the active sibling if exists\n    const innerElem = this._element\n    if (this._elemIsActive(innerElem)) {\n      return\n    }\n\n    // Search for active tab on same parent to deactivate it\n    const active = this._getActiveElem()\n\n    const hideEvent = active ?\n      EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n      null\n\n    const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n    if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n      return\n    }\n\n    this._deactivate(active, innerElem)\n    this._activate(innerElem, active)\n  }\n\n  // Private\n  _activate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE)\n\n    this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.add(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.removeAttribute('tabindex')\n      element.setAttribute('aria-selected', true)\n      this._toggleDropDown(element, true)\n      EventHandler.trigger(element, EVENT_SHOWN, {\n        relatedTarget: relatedElem\n      })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _deactivate(element, relatedElem) {\n    if (!element) {\n      return\n    }\n\n    element.classList.remove(CLASS_NAME_ACTIVE)\n    element.blur()\n\n    this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n    const complete = () => {\n      if (element.getAttribute('role') !== 'tab') {\n        element.classList.remove(CLASS_NAME_SHOW)\n        return\n      }\n\n      element.setAttribute('aria-selected', false)\n      element.setAttribute('tabindex', '-1')\n      this._toggleDropDown(element, false)\n      EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n    }\n\n    this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n  }\n\n  _keydown(event) {\n    if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n      return\n    }\n\n    event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n    event.preventDefault()\n\n    const children = this._getChildren().filter(element => !isDisabled(element))\n    let nextActiveElement\n\n    if ([HOME_KEY, END_KEY].includes(event.key)) {\n      nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n    } else {\n      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n      nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n    }\n\n    if (nextActiveElement) {\n      nextActiveElement.focus({ preventScroll: true })\n      Tab.getOrCreateInstance(nextActiveElement).show()\n    }\n  }\n\n  _getChildren() { // collection of inner elements\n    return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n  }\n\n  _getActiveElem() {\n    return this._getChildren().find(child => this._elemIsActive(child)) || null\n  }\n\n  _setInitialAttributes(parent, children) {\n    this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n    for (const child of children) {\n      this._setInitialAttributesOnChild(child)\n    }\n  }\n\n  _setInitialAttributesOnChild(child) {\n    child = this._getInnerElement(child)\n    const isActive = this._elemIsActive(child)\n    const outerElem = this._getOuterElement(child)\n    child.setAttribute('aria-selected', isActive)\n\n    if (outerElem !== child) {\n      this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n    }\n\n    if (!isActive) {\n      child.setAttribute('tabindex', '-1')\n    }\n\n    this._setAttributeIfNotExists(child, 'role', 'tab')\n\n    // set attributes to the related panel too\n    this._setInitialAttributesOnTargetPanel(child)\n  }\n\n  _setInitialAttributesOnTargetPanel(child) {\n    const target = SelectorEngine.getElementFromSelector(child)\n\n    if (!target) {\n      return\n    }\n\n    this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n    if (child.id) {\n      this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n    }\n  }\n\n  _toggleDropDown(element, open) {\n    const outerElem = this._getOuterElement(element)\n    if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n      return\n    }\n\n    const toggle = (selector, className) => {\n      const element = SelectorEngine.findOne(selector, outerElem)\n      if (element) {\n        element.classList.toggle(className, open)\n      }\n    }\n\n    toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n    toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n    outerElem.setAttribute('aria-expanded', open)\n  }\n\n  _setAttributeIfNotExists(element, attribute, value) {\n    if (!element.hasAttribute(attribute)) {\n      element.setAttribute(attribute, value)\n    }\n  }\n\n  _elemIsActive(elem) {\n    return elem.classList.contains(CLASS_NAME_ACTIVE)\n  }\n\n  // Try to get the inner element (usually the .nav-link)\n  _getInnerElement(elem) {\n    return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n  }\n\n  // Try to get the outer element (usually the .nav-item)\n  _getOuterElement(elem) {\n    return elem.closest(SELECTOR_OUTER) || elem\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this)\n\n      if (typeof config !== 'string') {\n        return\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`)\n      }\n\n      data[config]()\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault()\n  }\n\n  if (isDisabled(this)) {\n    return\n  }\n\n  Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n    Tab.getOrCreateInstance(element)\n  }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n}\n\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element, config)\n\n    this._timeout = null\n    this._hasMouseInteraction = false\n    this._hasKeyboardInteraction = false\n    this._setListeners()\n  }\n\n  // Getters\n  static get Default() {\n    return Default\n  }\n\n  static get DefaultType() {\n    return DefaultType\n  }\n\n  static get NAME() {\n    return NAME\n  }\n\n  // Public\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n    if (showEvent.defaultPrevented) {\n      return\n    }\n\n    this._clearTimeout()\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE)\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING)\n      EventHandler.trigger(this._element, EVENT_SHOWN)\n\n      this._maybeScheduleHide()\n    }\n\n    this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n    reflow(this._element)\n    this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  hide() {\n    if (!this.isShown()) {\n      return\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n    if (hideEvent.defaultPrevented) {\n      return\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n      this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n      EventHandler.trigger(this._element, EVENT_HIDDEN)\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOWING)\n    this._queueCallback(complete, this._element, this._config.animation)\n  }\n\n  dispose() {\n    this._clearTimeout()\n\n    if (this.isShown()) {\n      this._element.classList.remove(CLASS_NAME_SHOW)\n    }\n\n    super.dispose()\n  }\n\n  isShown() {\n    return this._element.classList.contains(CLASS_NAME_SHOW)\n  }\n\n  // Private\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide()\n    }, this._config.delay)\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout': {\n        this._hasMouseInteraction = isInteracting\n        break\n      }\n\n      case 'focusin':\n      case 'focusout': {\n        this._hasKeyboardInteraction = isInteracting\n        break\n      }\n\n      default: {\n        break\n      }\n    }\n\n    if (isInteracting) {\n      this._clearTimeout()\n      return\n    }\n\n    const nextElement = event.relatedTarget\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return\n    }\n\n    this._maybeScheduleHide()\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout)\n    this._timeout = null\n  }\n\n  // Static\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config)\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`)\n        }\n\n        data[config](this)\n      }\n    })\n  }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "/*! jQuery UI - v1.14.2 - 2026-01-28\n* https://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright OpenJS Foundation and other contributors; Licensed MIT */\n\n( function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n} )( function( $ ) {\n\"use strict\";\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.14.2\";\n\n\n/*!\n * jQuery UI Widget 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: https://api.jqueryui.com/jQuery.widget/\n//>>demos: https://jqueryui.com/widget/\n\n\nvar widgetUuid = 0;\nvar widgetHasOwnProperty = Array.prototype.hasOwnProperty;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\n\t\t\t// Only trigger remove when necessary to save time\n\t\t\tevents = $._data( elem, \"events\" );\n\t\t\tif ( events && events.remove ) {\n\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tif ( name === \"__proto__\" || name === \"constructor\" ) {\n\t\treturn $.error( \"Invalid widget name: \" + name );\n\t}\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( Array.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this || !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction bindRemoveEvent() {\n\t\t\tvar nodesToBind = [];\n\n\t\t\toptions.element.each( function( _, element ) {\n\t\t\t\tvar isTracked = $.map( that.classesElementLookup, function( elements ) {\n\t\t\t\t\treturn elements;\n\t\t\t\t} )\n\t\t\t\t\t.some( function( elements ) {\n\t\t\t\t\t\treturn elements.is( element );\n\t\t\t\t\t} );\n\n\t\t\t\tif ( !isTracked ) {\n\t\t\t\t\tnodesToBind.push( element );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthat._on( $( nodesToBind ), {\n\t\t\t\tremove: \"_untrackClassesElement\"\n\t\t\t} );\n\t\t}\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tbindRemoveEvent();\n\t\t\t\t\tcurrent = $( $.uniqueSort( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\n\t\tthis._off( $( event.target ) );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( typeof callback === \"function\" &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t} else if ( options === true ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * https://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: https://api.jqueryui.com/position/\n//>>demos: https://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div style=\" +\n\t\t\t\t\"'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:300px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisElemWindow = isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isElemWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isElemWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\n\t\t// Make sure string options are treated as CSS selectors\n\t\ttarget = typeof options.of === \"string\" ?\n\t\t\t$( document ).find( options.of ) :\n\t\t\t$( options.of ),\n\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: https://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr.pseudos, {\n\tdata: $.expr.createPseudo( function( dataName ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$.data( elem, dataName );\n\t\t};\n\t} )\n} );\n\n/*!\n * jQuery UI Disable Selection 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: https://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n\n// Create a local jQuery because jQuery Color relies on it and the\n// global may not exist with AMD and a custom build (#10199).\n// This module is a noop if used as a regular AMD module.\n// eslint-disable-next-line no-unused-vars\nvar jQuery = $;\n\n\n/*!\n * jQuery Color Animations v3.0.0\n * https://github.com/jquery/jquery-color\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n * Date: Wed May 15 16:49:44 2024 +0200\n */\n\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\tclass2type = {},\n\ttoString = class2type.toString,\n\n\t// plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// a set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// this regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 ),\n\t\t\t\t\texecResult[ 4 ] ?\n\t\t\t\t\t\t( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 )\n\t\t\t\t\t\t\t.toFixed( 2 ) :\n\t\t\t\t\t\t1\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// jQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\n\t// colors = jQuery.Color.names\n\tcolors,\n\n\t// local aliases of functions called often\n\teach = jQuery.each;\n\n// define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction getType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\tif ( type.mod ) {\n\n\t\t// we add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// for now all property types without mod have min and max\n\treturn Math.min( type.max, Math.max( 0, value ) );\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( _i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// if this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// if this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = getType( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// more than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( _key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( _spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// if the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// if the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// this is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] && jQuery.inArray(\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\tinst[ cache ].slice( 0, 3 )\n\t\t\t\t\t) < 0 ) {\n\n\t\t\t\t\t\t// use the default of 1\n\t\t\t\t\t\tif ( inst[ cache ][ 3 ] == null ) {\n\t\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( _key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// if null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// if we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\tif ( v != null ) {\n\t\t\t\t\treturn v;\n\t\t\t\t}\n\t\t\t\treturn i > 2 ? 1 : 0;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join( \", \" ) + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join( \", \" ) + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// default to 0 when nulls exist\n\t\t\treturn ( \"0\" + ( v || 0 ).toString( 16 ) ).substr( -2 );\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = getType( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar local, cur, match, fn,\n\t\t\t\tvtype = getType( value );\n\n\t\t\tif ( key === \"alpha\" ) {\n\t\t\t\tfn = this._hsla ? \"hsla\" : \"rgba\";\n\t\t\t} else {\n\t\t\t\tfn = spaceName;\n\t\t\t}\n\t\t\tlocal = this[ fn ]();\n\t\t\tcur = local[ prop.idx ];\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = getType( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( _i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed;\n\n\t\t\t\tif ( value !== \"transparent\" &&\n\t\t\t\t\t( getType( value ) !== \"string\" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\telem.style[ hook ] = value;\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( _i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n\n/*!\n * jQuery UI Effects 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n//>>docs: https://api.jqueryui.com/category/effects-core/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\";\n\n$.effects = {\n\teffect: {}\n};\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction camelCase( string ) {\n\treturn string.replace( /-([\\da-z])/gi, function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t} );\n}\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView.getComputedStyle( elem ),\n\t\tstyles = {};\n\n\tlen = style.length;\n\twhile ( len-- ) {\n\t\tkey = style[ len ];\n\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\tstyles[ camelCase( key ) ] = style[ key ];\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) {\n\t$.expr.pseudos.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.pseudos.animated );\n}\n\nif ( $.uiBackCompat === true ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tactive.id;\n\t\t\t} catch ( _e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.14.2\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: https://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( typeof options === \"function\" ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( typeof speed === \"function\" ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( typeof option === \"function\" ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated pseudo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.14\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( typeof complete === \"function\" ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof next === \"function\" ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat === true && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" );\n\n\t\ttransfer\n\t\t\t.appendTo( \"body\" )\n\t\t\t.addClass( options.className )\n\t\t\t.css( {\n\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\theight: element.innerHeight(),\n\t\t\t\twidth: element.innerWidth(),\n\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t} )\n\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\ttransfer.remove();\n\t\t\t\tif ( typeof done === \"function\" ) {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: https://api.jqueryui.com/blind-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/bounce-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: https://api.jqueryui.com/clip-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: https://api.jqueryui.com/drop-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n//>>docs: https://api.jqueryui.com/explode-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: https://api.jqueryui.com/fade-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: https://api.jqueryui.com/fold-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: https://api.jqueryui.com/highlight-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: https://api.jqueryui.com/size-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\tdelete from.outerHeight;\n\tdelete from.outerWidth;\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: https://api.jqueryui.com/scale-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: https://api.jqueryui.com/puff-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: https://api.jqueryui.com/pulsate-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: https://api.jqueryui.com/shake-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: https://api.jqueryui.com/slide-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: https://api.jqueryui.com/transfer-effect/\n//>>demos: https://jqueryui.com/effect/\n\n\nvar effect;\nif ( $.uiBackCompat === true ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n/*!\n * jQuery UI Focusable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: https://api.jqueryui.com/focusable-selector/\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) &&\n\t\t$( element ).css( \"visibility\" ) === \"visible\";\n};\n\n$.extend( $.expr.pseudos, {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: https://api.jqueryui.com/form-reset-mixin/\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = $( this.element.prop( \"form\" ) );\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Legacy jQuery Core patches 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n *\n */\n\n//>>label: Legacy jQuery Core patches\n//>>group: Core\n//>>description: Backport `.even()`, `.odd()` and `$.escapeSelector` to older jQuery Core versions (deprecated)\n\n\n// Support: jQuery 2.2.x or older.\n// This method has been defined in jQuery 3.0.0.\n// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js\nif ( !$.escapeSelector ) {\n\t$.escapeSelector = function( id ) {\n\t\treturn CSS.escape( id + \"\" );\n\t};\n}\n\n// Support: jQuery 3.4.x or older\n// These methods have been defined in jQuery 3.5.0.\nif ( !$.fn.even || !$.fn.odd ) {\n\t$.fn.extend( {\n\t\teven: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 0;\n\t\t\t} );\n\t\t},\n\t\todd: function() {\n\t\t\treturn this.filter( function( i ) {\n\t\t\t\treturn i % 2 === 1;\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n;\n/*!\n * jQuery UI Keycode 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: https://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Labels 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: https://api.jqueryui.com/labels/\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\tif ( !this.length ) {\n\t\treturn this.pushStack( [] );\n\t}\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// If `control.labels` is empty - e.g. inside of document fragments - find\n\t// the labels manually\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + CSS.escape( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: https://api.jqueryui.com/scrollParent/\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: https://api.jqueryui.com/tabbable-selector/\n\n\nvar tabbable = $.extend( $.expr.pseudos, {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: https://api.jqueryui.com/uniqueId/\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Accordion 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n//>>docs: https://api.jqueryui.com/accordion/\n//>>demos: https://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: function( elem ) {\n\t\t\treturn elem\n\t\t\t\t.find( \"> li > :first-child\" )\n\t\t\t\t.add(\n\t\t\t\t\telem.find( \"> :not(li)\" )\n\n\t\t\t\t\t\t// Support: jQuery <3.5 only\n\t\t\t\t\t\t// We could use `.even()` but that's unavailable in older jQuery.\n\t\t\t\t\t\t.filter( function( i ) {\n\t\t\t\t\t\t\treturn i % 2 === 0;\n\t\t\t\t\t\t} )\n\t\t\t\t);\n\t\t},\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tif ( typeof this.options.header === \"function\" ) {\n\t\t\tthis.headers = this.options.header( this.element );\n\t\t} else {\n\t\t\tthis.headers = this.element.find( this.options.header );\n\t\t}\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n/*!\n * jQuery UI Menu 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: https://api.jqueryui.com/menu/\n//>>demos: https://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.lastMousePosition = { x: null, y: null };\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tthis._activateItem( event );\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( this.document[ 0 ].activeElement );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"mouseenter .ui-menu-item\": \"_activateItem\",\n\t\t\t\"mousemove .ui-menu-item\": \"_activateItem\",\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this._menuItems().first();\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\tthis.document[ 0 ].activeElement\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event, true );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_activateItem: function( event ) {\n\n\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t// is over an item in the menu\n\t\tif ( this.previousFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356)\n\t\tif ( event.clientX === this.lastMousePosition.x &&\n\t\t\t\tevent.clientY === this.lastMousePosition.y ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.lastMousePosition = {\n\t\t\tx: event.clientX,\n\t\t\ty: event.clientY\n\t\t};\n\n\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\ttarget = $( event.currentTarget );\n\n\t\t// Ignore bubbled events on parent items, see #11641\n\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the item is already active, there's nothing to do\n\t\tif ( target.is( \".ui-state-active\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\tnull, \"ui-state-active\" );\n\t\tthis.focus( event, target );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, all ? 0 : this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active && this._menuItems( this.active.children( \".ui-menu\" ) ).first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_menuItems: function( menu ) {\n\t\treturn ( menu || this.element )\n\t\t\t.find( this.options.items )\n\t\t\t.filter( \".ui-menu-item\" );\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.last();\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.first();\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this._menuItems( this.activeMenu )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.innerHeight();\n\n\t\t\t// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.\n\t\t\tif ( $.fn.jquery.indexOf( \"3.2.\" ) === 0 ) {\n\t\t\t\theight += this.element[ 0 ].offsetHeight - this.element.outerHeight();\n\t\t\t}\n\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this._menuItems( this.activeMenu ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\tString.prototype.trim.call(\n\t\t\t\t\t\t\t\t$( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: https://api.jqueryui.com/autocomplete/\n//>>demos: https://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\tliveRegionTimer: null,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// All other element types are determined by whether they're contentEditable\n\t\tthis.isMultiLine = isTextarea ||\n\t\t\t!isInput && this.element.prop( \"contentEditable\" ) === \"true\";\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// Support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && String.prototype.trim.call( label ).length ) {\n\t\t\t\t\tclearTimeout( this.liveRegionTimer );\n\t\t\t\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\t\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( label ) );\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( Array.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}.bind( this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tclearTimeout( this.liveRegionTimer );\n\t\tthis.liveRegionTimer = this._delay( function() {\n\t\t\tthis.liveRegion.html( $( \"<div>\" ).text( message ) );\n\t\t}, 100 );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: https://api.jqueryui.com/controlgroup/\n//>>demos: https://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.uniqueSort( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = String.prototype.trim.call( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: https://api.jqueryui.com/checkboxradio/\n//>>demos: https://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels, labelContents;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\t// The label contents could be text, html, or a mix. We wrap all elements\n\t\t// and read the wrapper's `innerHTML` to get a string representation of\n\t\t// the label, without the input as part of it.\n\t\tlabelContents = this.label.contents().not( this.element[ 0 ] );\n\n\t\tif ( labelContents.length ) {\n\t\t\tthis.originalLabel += labelContents\n\t\t\t\t.clone()\n\t\t\t\t.wrapAll( \"<div></div>\" )\n\t\t\t\t.parent()\n\t\t\t\t.html();\n\t\t}\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + CSS.escape( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( $( this ).prop( \"form\" ) ).length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: https://api.jqueryui.com/button/\n//>>demos: https://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// If a native click is available use it, so we\n\t\t\t\t\t\t// actually cause navigation. Otherwise, just trigger\n\t\t\t\t\t\t// a click event.\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.trigger( \"blur\" );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat === true ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function( options ) {\n\t\t\tvar isMethodCall = typeof options === \"string\";\n\t\t\tvar args = Array.prototype.slice.call( arguments, 1 );\n\t\t\tvar returnValue = this;\n\n\t\t\tif ( isMethodCall ) {\n\n\t\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t\t// return undefined instead of the jQuery instance\n\t\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\t\treturnValue = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tthis.each( function() {\n\t\t\t\t\t\tvar methodValue;\n\t\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ?\n\t\t\t\t\t\t\t\"button\" :\n\t\t\t\t\t\t\t\"checkboxradio\";\n\t\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\t\treturn $.error( \"cannot call methods on button\" +\n\t\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( typeof instance[ options ] !== \"function\" ||\n\t\t\t\t\t\t\toptions.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for button\" +\n\t\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Allow multiple hashes to be passed on init\n\t\t\t\tif ( args.length ) {\n\t\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t\t}\n\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar type = $( this ).attr( \"type\" );\n\t\t\t\t\tvar name = type !== \"checkbox\" && type !== \"radio\" ? \"button\" : \"checkboxradio\";\n\t\t\t\t\tvar instance = $.data( this, \"ui-\" + name );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( name === \"button\" ) {\n\t\t\t\t\t\t\torig.call( $( this ), options );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$( this ).checkboxradio( $.extend( { icon: false }, options ) );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n/* eslint-disable max-len */\n/*!\n * jQuery UI Datepicker 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: https://api.jqueryui.com/datepicker/\n//>>demos: https://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.extend( $.ui, { datepicker: { version: \"1.14.2\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n\t\t\t\"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\", // Additional text to append to the year in the month headers,\n\t\tselectMonthLabel: \"Select month\", // Invisible label for month selector\n\t\tselectYearLabel: \"Select year\" // Invisible label for year selector\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tonUpdateDatepicker: null, // Define a callback function when the datepicker is updated\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span>\" )\n\t\t\t\t.addClass( this._appendClass )\n\t\t\t\t.text( appendText );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\n\t\t\tif ( this._get( inst, \"buttonImageOnly\" ) ) {\n\t\t\t\tinst.trigger = $( \"<img>\" )\n\t\t\t\t\t.addClass( this._triggerClass )\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tinst.trigger = $( \"<button type='button'>\" )\n\t\t\t\t\t.addClass( this._triggerClass );\n\t\t\t\tif ( buttonImage ) {\n\t\t\t\t\tinst.trigger.html(\n\t\t\t\t\t\t$( \"<img>\" )\n\t\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\t\tsrc: buttonImage,\n\t\t\t\t\t\t\t\talt: buttonText,\n\t\t\t\t\t\t\t\ttitle: buttonText\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinst.trigger.text( buttonText );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// https://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\t$.datepicker._hideDatepicker();\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t\tthis._curInst = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = false;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() {\n\t\t\t\t\tthis.disabled = true;\n\t\t\t\t} ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\n\t\t\t// Delete entry\n\t\t\tfunction( value ) {\n\t\t\t\treturn ( value === target ? null : value );\n\t\t\t} );\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t} catch ( _err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t} catch ( _err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" ),\n\t\t\tonUpdateDatepicker = $.datepicker._get( inst, \"onUpdateDatepicker\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year\" ).first().replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\n\t\tif ( onUpdateDatepicker ) {\n\t\t\tonUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] );\n\t\t}\n\t},\n\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset, period );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = parseInt( $( \"a\", td ).attr( \"data-date\" ) );\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( document ).find( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( _err ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t} catch ( _e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"prev\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tprev = \"\";\n\t\t} else {\n\t\t\tprev = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-prev ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: prevText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"e\" : \"w\" ) )\n\t\t\t\t\t\t.text( prevText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tif ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"next\",\n\t\t\t\t\t\"data-event\": \"click\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.addClass( \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t} else if ( hideIfNoPrevNext ) {\n\t\t\tnext = \"\";\n\t\t} else {\n\t\t\tnext = $( \"<a>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"class\": \"ui-datepicker-next ui-corner-all ui-state-disabled\",\n\t\t\t\t\ttitle: nextText\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$( \"<span>\" )\n\t\t\t\t\t\t.attr( \"class\", \"ui-icon ui-icon-circle-triangle-\" +\n\t\t\t\t\t\t\t( isRTL ? \"w\" : \"e\" ) )\n\t\t\t\t\t\t.text( nextText )\n\t\t\t\t)[ 0 ].outerHTML;\n\t\t}\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = \"\";\n\t\tif ( !inst.inline ) {\n\t\t\tcontrols = $( \"<button>\" )\n\t\t\t\t.attr( {\n\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\"class\": \"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all\",\n\t\t\t\t\t\"data-handler\": \"hide\",\n\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t} )\n\t\t\t\t.text( this._get( inst, \"closeText\" ) )[ 0 ].outerHTML;\n\t\t}\n\n\t\tbuttonPanel = \"\";\n\t\tif ( showButtonPanel ) {\n\t\t\tbuttonPanel = $( \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" )\n\t\t\t\t.append( isRTL ? controls : \"\" )\n\t\t\t\t.append( this._isInRange( inst, gotoDate ) ?\n\t\t\t\t\t$( \"<button>\" )\n\t\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\ttype: \"button\",\n\t\t\t\t\t\t\t\"class\": \"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all\",\n\t\t\t\t\t\t\t\"data-handler\": \"today\",\n\t\t\t\t\t\t\t\"data-event\": \"click\"\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.text( currentText ) :\n\t\t\t\t\t\"\" )\n\t\t\t\t.append( isRTL ? \"\" : controls )[ 0 ].outerHTML;\n\t\t}\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#' aria-current='\" + ( printDate.getTime() === currentDate.getTime() ? \"true\" : \"false\" ) + // mark date as selected for screen reader\n\t\t\t\t\t\t\t\"' data-date='\" + printDate.getDate() + // store date as data\n\t\t\t\t\t\t\t\"'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\tselectMonthLabel = this._get( inst, \"selectMonthLabel\" ),\n\t\t\tselectYearLabel = this._get( inst, \"selectYearLabel\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' aria-label='\" + selectMonthLabel + \"' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' aria-label='\" + selectYearLabel + \"' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ]\n\t\t\t\t.apply( $.datepicker, [ this ].concat( otherArgs ) );\n\t\t} else {\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t\t}\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.14.2\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n/*!\n * jQuery UI Mouse 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: https://api.jqueryui.com/mouse/\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseUp( event );\n\t\t}\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = event.which === 1,\n\t\t\telIsCancel = typeof this.options.cancel === \"string\" ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length :\n\t\t\t\tfalse;\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once.\n\t\tif ( this._mouseMoved && !event.which ) {\n\n\t\t\t// Support: Safari <=8 - 9\n\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t// during a drag (#14461)\n\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\treturn this._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\tif ( this._mouseStarted ) {\n\t\t\t\tthis._mouseDrag( event );\n\t\t\t} else {\n\t\t\t\tthis._mouseUp( event );\n\t\t\t}\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) {\n\t\treturn true;\n\t}\n} );\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: https://api.jqueryui.com/draggable/\n//>>demos: https://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = this.document[ 0 ].activeElement,\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$( activeElement ).trigger( \"blur\" );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( typeof this.options.revert === \"function\" &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = typeof o.helper === \"function\",\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// https://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\tif ( inst.options.snap.release ) {\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\tif ( inst.options.snap.snap ) {\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: https://api.jqueryui.com/resizable/\n//>>demos: https://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tvar scroll,\n\t\t\thas = false,\n\t\t\toverflow = $( el ).css( \"overflow\" );\n\n\t\tif ( overflow === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( overflow === \"scroll\" ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tscroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\";\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\ttry {\n\t\t\tel[ scroll ] = 1;\n\t\t\thas = ( el[ scroll ] > 0 );\n\t\t\tel[ scroll ] = 0;\n\t\t} catch ( _e ) {\n\n\t\t\t// `el` might be a string, then setting `scroll` will throw\n\t\t\t// an error in strict mode; ignore it.\n\t\t}\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper'></div>\" ).css( {\n\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\n\t\t\t// Support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\t\tthis._addedHandles.remove();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" );\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tcase \"aspectRatio\":\n\t\t\tthis._aspectRatio = !!value;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tthis._addedHandles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = String.prototype.trim.call( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tif ( !this.element.children( this.handles[ handle ] ).length ) {\n\t\t\t\t\tthis.element.append( axis );\n\t\t\t\t\tthis._addedHandles = this._addedHandles.add( axis );\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._addedHandles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor, calculatedSize,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tif ( !this._helper ) {\n\t\t\tcalculatedSize = this._calculateAdjustedElementDimensions( el );\n\t\t}\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: calculatedSize.width,\n\t\t\t\theight: calculatedSize.height\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: calculatedSize.width,\n\t\t\t\theight: calculatedSize.height\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t\tthis.helper.width( props.width );\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t\tthis.helper.height( props.height );\n\t\t}\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_calculateAdjustedElementDimensions: function( element ) {\n\t\tvar elWidth, elHeight, paddingBorder,\n\t\t\tce = element.get( 0 );\n\n\t\tif ( element.css( \"box-sizing\" ) !== \"content-box\" ||\n\t\t\t( !this._hasScroll( ce ) && !this._hasScroll( ce, \"left\" ) ) ) {\n\t\t\t\treturn {\n\t\t\t\t\theight: parseFloat( element.css( \"height\" ) ),\n\t\t\t\t\twidth: parseFloat( element.css( \"width\" ) )\n\t\t\t\t};\n\t\t}\n\n\t\t// Check if CSS inline styles are set and use those (usually from previous resizes)\n\t\telWidth = parseFloat( ce.style.width );\n\t\telHeight = parseFloat( ce.style.height );\n\n\t\tpaddingBorder = this._getPaddingPlusBorderDimensions( element );\n\t\telWidth = isNaN( elWidth ) ?\n\t\t\tthis._getElementTheoreticalSize( element, paddingBorder, \"width\" ) :\n\t\t\telWidth;\n\t\telHeight = isNaN( elHeight ) ?\n\t\t\tthis._getElementTheoreticalSize( element, paddingBorder, \"height\" ) :\n\t\t\telHeight;\n\n\t\treturn {\n\t\t\theight: elHeight,\n\t\t\twidth: elWidth\n\t\t};\n\t},\n\n\t_getElementTheoreticalSize: function( element, extraSize, dimension ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\tvar size = Math.max( 0, Math.ceil(\n\t\t\telement.get( 0 )[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\textraSize[ dimension ] -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine theoretical size.\n\t\t// Use an explicit zero to avoid NaN.\n\t\t// See https://github.com/jquery/jquery/issues/3964\n\t\t) ) || 0;\n\n\t\treturn size;\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div></div>\" ).css( { overflow: \"hidden\" } );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\tif ( n !== \"resize\" ) {\n\t\t\tthis._trigger( n, event, this.ui() );\n\t\t}\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll( ce ) ? ce.scrollHeight : ch );\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this ),\n\t\t\t\telSize = that._calculateAdjustedElementDimensions( el );\n\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: elSize.width, height: elSize.height,\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat === true && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: https://api.jqueryui.com/dialog/\n//>>demos: https://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\tuiDialogTitleHeadingLevel: 0,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$( this.document[ 0 ].activeElement ).trigger( \"blur\" );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( this.document[ 0 ].activeElement );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon opening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_restoreTabbableFocus: function() {\n\t\tvar activeElement = this.document[ 0 ].activeElement,\n\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\tif ( !isActive ) {\n\t\t\tthis._focusTabbable();\n\t\t}\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tevent.preventDefault();\n\t\tthis._restoreTabbableFocus();\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\",\n\t\t\t\t\"aria-modal\": this.options.modal ? \"true\" : null\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.first(),\n\t\t\t\t\tlast = tabbables.last();\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tvar uiDialogHeadingLevel = Number.isInteger( this.options.uiDialogTitleHeadingLevel ) &&\n\t\t\tthis.options.uiDialogTitleHeadingLevel > 0 &&\n\t\t\tthis.options.uiDialogTitleHeadingLevel <= 6 ?\n\t\t\t\"h\" + this.options.uiDialogTitleHeadingLevel : \"span\";\n\n\t\tuiDialogTitle = $( \"<\" + uiDialogHeadingLevel + \">\" )\n\t\t\t.uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = typeof props === \"function\" ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\n\t\tif ( key === \"modal\" ) {\n\t\t\tuiDialog.attr( \"aria-modal\", value ? \"true\" : null );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// This doesn't use `_on()` because it is a shared event handler\n\t\t\t// across all open modal dialogs.\n\t\t\tthis.document.on( \"focusin.ui-dialog\", function( event ) {\n\t\t\t\tif ( isOpening ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar instance = this._trackingInstances()[ 0 ];\n\t\t\t\tif ( !instance._allowInteraction( event ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tinstance._focusTabbable();\n\t\t\t\t}\n\t\t\t}.bind( this ) );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis.document.off( \"focusin.ui-dialog\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Droppable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: https://api.jqueryui.com/droppable/\n//>>demos: https://jqueryui.com/droppable/\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = typeof accept === \"function\" ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\tif ( o.addClasses ) {\n\t\t\tthis._addClass( \"ui-droppable\" );\n\t\t}\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = typeof value === \"function\" ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\t$.ui.intersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.14 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\n$.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\t$.ui.intersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Progressbar 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n//>>docs: https://api.jqueryui.com/progressbar/\n//>>demos: https://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: https://api.jqueryui.com/selectable/\n//>>demos: https://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) {\n\t\t\ttmp = x2; x2 = x1; x1 = tmp;\n\t\t}\n\t\tif ( y1 > y2 ) {\n\t\t\ttmp = y2; y2 = y1; y1 = tmp;\n\t\t}\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n//>>docs: https://api.jqueryui.com/selectmenu/\n//>>demos: https://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.trigger( \"focus\" );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\n\t\tif ( item.hidden ) {\n\t\t\tli.prop( \"hidden\", true );\n\t\t} else {\n\t\t\tthis._setText( wrapper, item.label );\n\t\t}\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tselection = window.getSelection();\n\t\tselection.removeAllRanges();\n\t\tselection.addRange( this.range );\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\tCSS.escape( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection = window.getSelection();\n\t\t\tif ( selection.rangeCount ) {\n\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\t\t\tthis.menu.width( \"\" ).outerWidth()\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\thidden: optgroup.prop( \"hidden\" ) || option.prop( \"hidden\" ),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: https://api.jqueryui.com/slider/\n//>>demos: https://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( Array.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( Array.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( Array.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Sortable 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: https://api.jqueryui.com/sortable/\n//>>demos: https://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.14.2\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Prepare the dragged items parent\n\t\tthis.appendTo = $( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem.parent() );\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// After we get the helper offset, but before we get the parent offset we can\n\t\t// change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\tif ( o.cursorAt ) {\n\t\t\tthis._adjustOffsetFromHelper( o.cursorAt );\n\t\t}\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t$.extend( this.offset, {\n\t\t\tparent: this._getParentOffset()\n\t\t} );\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\tthis._storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\t// We need to make sure to grab the zIndex before setting the\n\t\t// opacity, because setting the opacity to anything lower than 1\n\t\t// causes the zIndex to change from \"auto\" to 0.\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t//Move the helper, if needed\n\t\tif ( !this.helper.parent().is( this.appendTo ) ) {\n\t\t\tthis.helper.detach().appendTo( this.appendTo );\n\n\t\t\t//Update position\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Generate the original position\n\t\tthis.position = this.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\t\tthis.lastPositionAbs = this.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tthis._mouseDrag( event );\n\n\t\treturn true;\n\n\t},\n\n\t_scroll: function( event ) {\n\t\tvar o = this.options,\n\t\t\tscrolled = false;\n\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t}\n\n\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t}\n\n\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t);\n\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t);\n\t\t\t}\n\n\t\t}\n\n\t\treturn scrolled;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( o.scroll ) {\n\t\t\tif ( this._scroll( event ) !== false ) {\n\n\t\t\t\t//Update item positions used in position checks\n\t\t\t\tthis._refreshItemPositions( true );\n\n\t\t\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.dragDirection = {\n\t\t\tvertical: this._getDragVerticalDirection(),\n\t\t\thorizontal: this._getDragHorizontalDirection()\n\t\t};\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ?\n\t\t\t\t\"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\t\t\t\tthis._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this.dragDirection.vertical;\n\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 ) :\n\t\t\t( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this.dragDirection.vertical,\n\t\t\thorizontalDirection = this.dragDirection.horizontal;\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ typeof this.options.items === \"function\" ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ typeof this.options.items === \"function\" ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ typeof inst.options.items === \"function\" ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t_refreshItemPositions: function( fast ) {\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( this.currentContainer && item.instance !== this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t// This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tthis._refreshItemPositions( fast );\n\n\t\tvar i, p;\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className, nodeName,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\tnodeName = that.currentItem[ 0 ].nodeName.toLowerCase();\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar element = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element doesn't have a actual height or width by itself (without\n\t\t\t\t\t// styles coming from a stylesheet), it receives the inline height and width\n\t\t\t\t\t// from the dragged item. Or, if it's a tbody or tr, it's going to have a height\n\t\t\t\t\t// anyway since we're populating them with <td>s above, but they're unlikely to\n\t\t\t\t\t// be the correct height on their own if the row heights are dynamic, so we'll\n\t\t\t\t\t// always assign the height of the dragged item given forcePlaceholderSize\n\t\t\t\t\t// is true.\n\t\t\t\t\tif ( !p.height() || ( o.forcePlaceholderSize &&\n\t\t\t\t\t\t\t( nodeName === \"tbody\" || nodeName === \"tr\" ) ) ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( itemWithLeastDistance ) {\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true );\n\t\t\t} else {\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\t}\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\t//Update scrollParent\n\t\t\tthis.scrollParent = this.placeholder.scrollParent();\n\n\t\t\t//Update overflowOffset\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t\t}\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = typeof o.helper === \"function\" ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\tthis.appendTo[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( Array.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes\n\t\t// this information.\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\tif ( a ) {\n\t\t\ta[ 0 ].appendChild( this.placeholder[ 0 ] );\n\t\t} else {\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\t\t}\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this._storedStylesheet ) {\n\t\t\tthis._storedStylesheet.remove();\n\t\t\tthis._storedStylesheet = null;\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Spinner 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: https://api.jqueryui.com/spinner/\n//>>demos: https://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nfunction spinnerModifier( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.14.2\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\twheel: function( event ) {\n\t\t\tvar activeElement = this.document[ 0 ].activeElement;\n\t\t\tvar isActive = this.element[ 0 ] === activeElement;\n\t\t\tvar delta = event.deltaY || event.originalEvent && event.originalEvent.deltaY;\n\n\t\t\tif ( !isActive || !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? -1 : 1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\n\t\t// DEPRECATED\n\t\t// Kept for backwards compatibility. Please use the modern `wheel`\n\t\t// event. The `delta` parameter is provided by the jQuery Mousewheel\n\t\t// plugin if one is loaded.\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !event.isTrigger ) {\n\n\t\t\t\t// If this is not a trigger call, the `wheel` handler will\n\t\t\t\t// fire as well, let's not duplicate it.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar wheelEvent = $.Event( event );\n\t\t\twheelEvent.type = \"wheel\";\n\t\t\tif ( delta ) {\n\t\t\t\twheelEvent.deltaY = -delta;\n\t\t\t}\n\t\t\treturn this._events.wheel.call( this, wheelEvent );\n\t\t},\n\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === this.document[ 0 ].activeElement ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === this.document[ 0 ].activeElement;\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn typeof incremental === \"function\" ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifier( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifier( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifier( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifier( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifier( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifier( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: https://api.jqueryui.com/tabs/\n//>>demos: https://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.14.2\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: function( anchor ) {\n\t\tvar anchorUrl = new URL( anchor.href ),\n\t\t\tlocationUrl = new URL( location.href );\n\n\t\treturn anchor.hash.length > 1 &&\n\n\t\t\t// `href` may contain a hash but also username & password;\n\t\t\t// we want to ignore them, so we check the three fields\n\t\t\t// below instead.\n\t\t\tanchorUrl.origin === locationUrl.origin &&\n\t\t\tanchorUrl.pathname === locationUrl.pathname &&\n\t\t\tanchorUrl.search === locationUrl.search;\n\t},\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( Array.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.uniqueSort( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 ),\n\t\t\tlocationHashDecoded = decodeURIComponent( locationHash );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t// If not found, decode the hash & try again.\n\t\t\t\t// See the comment in `_processTabs` under the `_isLocal` check\n\t\t\t\t// for more information.\n\t\t\t\tif ( active === null ) {\n\t\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHashDecoded ) {\n\t\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( this.document[ 0 ].activeElement ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\n\t\t\t\t// The \"scrolling to a fragment\" section of the HTML spec:\n\t\t\t\t// https://html.spec.whatwg.org/#scrolling-to-a-fragment\n\t\t\t\t// uses a concept of document's indicated part:\n\t\t\t\t// https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n\t\t\t\t// Slightly below there's an algorithm to compute the indicated\n\t\t\t\t// part:\n\t\t\t\t// https://html.spec.whatwg.org/#the-indicated-part-of-the-document\n\t\t\t\t// First, the algorithm tries the hash as-is, without decoding.\n\t\t\t\t// Then, if one is not found, the same is attempted with a decoded\n\t\t\t\t// hash. Replicate this logic.\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( \"#\" + CSS.escape( panelId ) );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanelId = decodeURIComponent( panelId );\n\t\t\t\t\tpanel = that.element.find( \"#\" + CSS.escape( panelId ) );\n\t\t\t\t}\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( Array.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\tCSS.escape( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( Array.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\tif ( this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\t\t\t\t\tpanel.html( response );\n\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\t\t\turl: anchor.attr( \"href\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( \"#\" + CSS.escape( id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.14.2\n * https://jqueryui.com\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license.\n * https://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: https://api.jqueryui.com/tooltip/\n//>>demos: https://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.14.2\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\t\t\tvar title = $( this ).attr( \"title\" );\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", String.prototype.trim.call( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = String.prototype.trim.call( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// Ignore async response if tooltip was closed already\n\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t// exist natively. To improve performance, the native event\n\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t// rely on the type being correct after the event finished\n\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\tif ( event ) {\n\t\t\t\tevent.type = eventType;\n\t\t\t}\n\t\t\tthat._open( event, target, response );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, 13 );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tvar targetElement = this._find( target );\n\t\t\t\tif ( targetElement ) {\n\t\t\t\t\tthis._removeTooltip( targetElement.tooltip );\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat === true ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n\n\n} );", "/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n  selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n  exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n  const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n  return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n  if (selector.exclude) {\n    return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n  } else {\n    return m.call(element, selector);\n  }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n  if (!element[EXPANDO]) {\n    element[EXPANDO] = {};\n  }\n  return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n  var isEditable = false;\n  do {\n    if (element.isContentEditable) {\n      isEditable = true;\n      break;\n    }\n    element = element.parentElement;\n  } while (element);\n  return isEditable;\n};\n\nconst csrfToken = () => {\n  const meta = document.querySelector(\"meta[name=csrf-token]\");\n  return meta && meta.content;\n};\n\nconst csrfParam = () => {\n  const meta = document.querySelector(\"meta[name=csrf-param]\");\n  return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n  const token = csrfToken();\n  if (token) {\n    return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n  }\n};\n\nconst refreshCSRFTokens = () => {\n  const token = csrfToken();\n  const param = csrfParam();\n  if (token && param) {\n    return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n  }\n};\n\nconst AcceptHeaders = {\n  \"*\": \"*/*\",\n  text: \"text/plain\",\n  html: \"text/html\",\n  xml: \"application/xml, text/xml\",\n  json: \"application/json, text/javascript\",\n  script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n  options = prepareOptions(options);\n  var xhr = createXHR(options, (function() {\n    const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n    if (Math.floor(xhr.status / 100) === 2) {\n      if (typeof options.success === \"function\") {\n        options.success(response, xhr.statusText, xhr);\n      }\n    } else {\n      if (typeof options.error === \"function\") {\n        options.error(response, xhr.statusText, xhr);\n      }\n    }\n    return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n  }));\n  if (options.beforeSend && !options.beforeSend(xhr, options)) {\n    return false;\n  }\n  if (xhr.readyState === XMLHttpRequest.OPENED) {\n    return xhr.send(options.data);\n  }\n};\n\nvar prepareOptions = function(options) {\n  options.url = options.url || location.href;\n  options.type = options.type.toUpperCase();\n  if (options.type === \"GET\" && options.data) {\n    if (options.url.indexOf(\"?\") < 0) {\n      options.url += \"?\" + options.data;\n    } else {\n      options.url += \"&\" + options.data;\n    }\n  }\n  if (!(options.dataType in AcceptHeaders)) {\n    options.dataType = \"*\";\n  }\n  options.accept = AcceptHeaders[options.dataType];\n  if (options.dataType !== \"*\") {\n    options.accept += \", */*; q=0.01\";\n  }\n  return options;\n};\n\nvar createXHR = function(options, done) {\n  const xhr = new XMLHttpRequest;\n  xhr.open(options.type, options.url, true);\n  xhr.setRequestHeader(\"Accept\", options.accept);\n  if (typeof options.data === \"string\") {\n    xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n  }\n  if (!options.crossDomain) {\n    xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    CSRFProtection(xhr);\n  }\n  xhr.withCredentials = !!options.withCredentials;\n  xhr.onreadystatechange = function() {\n    if (xhr.readyState === XMLHttpRequest.DONE) {\n      return done(xhr);\n    }\n  };\n  return xhr;\n};\n\nvar processResponse = function(response, type) {\n  if (typeof response === \"string\" && typeof type === \"string\") {\n    if (type.match(/\\bjson\\b/)) {\n      try {\n        response = JSON.parse(response);\n      } catch (error) {}\n    } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n      const script = document.createElement(\"script\");\n      script.setAttribute(\"nonce\", cspNonce());\n      script.text = response;\n      document.head.appendChild(script).parentNode.removeChild(script);\n    } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n      const parser = new DOMParser;\n      type = type.replace(/;.+/, \"\");\n      try {\n        response = parser.parseFromString(response, type);\n      } catch (error1) {}\n    }\n  }\n  return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n  const originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href;\n  const urlAnchor = document.createElement(\"a\");\n  try {\n    urlAnchor.href = url;\n    return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n  } catch (e) {\n    return true;\n  }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n  CustomEvent = function(event, params) {\n    const evt = document.createEvent(\"CustomEvent\");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt;\n  };\n  CustomEvent.prototype = window.Event.prototype;\n  ({preventDefault: preventDefault} = CustomEvent.prototype);\n  CustomEvent.prototype.preventDefault = function() {\n    const result = preventDefault.call(this);\n    if (this.cancelable && !this.defaultPrevented) {\n      Object.defineProperty(this, \"defaultPrevented\", {\n        get() {\n          return true;\n        }\n      });\n    }\n    return result;\n  };\n}\n\nconst fire = (obj, name, data) => {\n  const event = new CustomEvent(name, {\n    bubbles: true,\n    cancelable: true,\n    detail: data\n  });\n  obj.dispatchEvent(event);\n  return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n  fire(e.target, \"ujs:everythingStopped\");\n  e.preventDefault();\n  e.stopPropagation();\n  e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n  let {target: target} = e;\n  while (!!(target instanceof Element) && !matches(target, selector)) {\n    target = target.parentNode;\n  }\n  if (target instanceof Element && handler.call(target, e) === false) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n  let inputs = [ element ];\n  if (matches(element, \"form\")) {\n    inputs = toArray(element.elements);\n  }\n  const params = [];\n  inputs.forEach((function(input) {\n    if (!input.name || input.disabled) {\n      return;\n    }\n    if (matches(input, \"fieldset[disabled] *\")) {\n      return;\n    }\n    if (matches(input, \"select\")) {\n      toArray(input.options).forEach((function(option) {\n        if (option.selected) {\n          params.push({\n            name: input.name,\n            value: option.value\n          });\n        }\n      }));\n    } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n      params.push({\n        name: input.name,\n        value: input.value\n      });\n    }\n  }));\n  if (additionalParam) {\n    params.push(additionalParam);\n  }\n  return params.map((function(param) {\n    if (param.name) {\n      return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n    } else {\n      return param;\n    }\n  })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n  if (matches(form, \"form\")) {\n    return toArray(form.elements).filter((el => matches(el, selector)));\n  } else {\n    return toArray(form.querySelectorAll(selector));\n  }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n  if (!allowAction(this, rails)) {\n    stopEverything(e);\n  }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n  let callback;\n  const message = element.getAttribute(\"data-confirm\");\n  if (!message) {\n    return true;\n  }\n  let answer = false;\n  if (fire(element, \"confirm\")) {\n    try {\n      answer = rails.confirm(message, element);\n    } catch (error) {}\n    callback = fire(element, \"confirm:complete\", [ answer ]);\n  }\n  return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n  const element = this;\n  if (element.disabled) {\n    stopEverything(e);\n  }\n};\n\nconst enableElement = e => {\n  let element;\n  if (e instanceof Event) {\n    if (isXhrRedirect(e)) {\n      return;\n    }\n    element = e.target;\n  } else {\n    element = e;\n  }\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return enableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n    return enableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return enableFormElements(element);\n  }\n};\n\nconst disableElement = e => {\n  const element = e instanceof Event ? e.target : e;\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return disableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n    return disableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return disableFormElements(element);\n  }\n};\n\nvar disableLinkElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    setData(element, \"ujs:enable-with\", element.innerHTML);\n    element.innerHTML = replacement;\n  }\n  element.addEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    element.innerHTML = originalText;\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.removeEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    if (matches(element, \"button\")) {\n      setData(element, \"ujs:enable-with\", element.innerHTML);\n      element.innerHTML = replacement;\n    } else {\n      setData(element, \"ujs:enable-with\", element.value);\n      element.value = replacement;\n    }\n  }\n  element.disabled = true;\n  return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    if (matches(element, \"button\")) {\n      element.innerHTML = originalText;\n    } else {\n      element.value = originalText;\n    }\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.disabled = false;\n  return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n  const xhr = event.detail ? event.detail[0] : undefined;\n  return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n  const link = this;\n  const method = link.getAttribute(\"data-method\");\n  if (!method) {\n    return;\n  }\n  if (isContentEditable(this)) {\n    return;\n  }\n  const href = rails.href(link);\n  const csrfToken$1 = csrfToken();\n  const csrfParam$1 = csrfParam();\n  const form = document.createElement(\"form\");\n  let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n  if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n    formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n  }\n  formContent += '<input type=\"submit\" />';\n  form.method = \"post\";\n  form.action = href;\n  form.target = link.target;\n  form.innerHTML = formContent;\n  form.style.display = \"none\";\n  document.body.appendChild(form);\n  form.querySelector('[type=\"submit\"]').click();\n  stopEverything(e);\n};\n\nconst isRemote = function(element) {\n  const value = element.getAttribute(\"data-remote\");\n  return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n  let data, method, url;\n  const element = this;\n  if (!isRemote(element)) {\n    return true;\n  }\n  if (!fire(element, \"ajax:before\")) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  if (isContentEditable(element)) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  const withCredentials = element.getAttribute(\"data-with-credentials\");\n  const dataType = element.getAttribute(\"data-type\") || \"script\";\n  if (matches(element, formSubmitSelector)) {\n    const button = getData(element, \"ujs:submit-button\");\n    method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n    url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n    if (method.toUpperCase() === \"GET\") {\n      url = url.replace(/\\?.*$/, \"\");\n    }\n    if (element.enctype === \"multipart/form-data\") {\n      data = new FormData(element);\n      if (button != null) {\n        data.append(button.name, button.value);\n      }\n    } else {\n      data = serializeElement(element, button);\n    }\n    setData(element, \"ujs:submit-button\", null);\n    setData(element, \"ujs:submit-button-formmethod\", null);\n    setData(element, \"ujs:submit-button-formaction\", null);\n  } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n    method = element.getAttribute(\"data-method\");\n    url = element.getAttribute(\"data-url\");\n    data = serializeElement(element, element.getAttribute(\"data-params\"));\n  } else {\n    method = element.getAttribute(\"data-method\");\n    url = rails.href(element);\n    data = element.getAttribute(\"data-params\");\n  }\n  ajax({\n    type: method || \"GET\",\n    url: url,\n    data: data,\n    dataType: dataType,\n    beforeSend(xhr, options) {\n      if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n        return fire(element, \"ajax:send\", [ xhr ]);\n      } else {\n        fire(element, \"ajax:stopped\");\n        return false;\n      }\n    },\n    success(...args) {\n      return fire(element, \"ajax:success\", args);\n    },\n    error(...args) {\n      return fire(element, \"ajax:error\", args);\n    },\n    complete(...args) {\n      return fire(element, \"ajax:complete\", args);\n    },\n    crossDomain: isCrossDomain(url),\n    withCredentials: withCredentials != null && withCredentials !== \"false\"\n  });\n  stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n  const button = this;\n  const {form: form} = button;\n  if (!form) {\n    return;\n  }\n  if (button.name) {\n    setData(form, \"ujs:submit-button\", {\n      name: button.name,\n      value: button.value\n    });\n  }\n  setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n  setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n  return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n  const link = this;\n  const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n  const data = link.getAttribute(\"data-params\");\n  const metaClick = e.metaKey || e.ctrlKey;\n  const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n  const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n  if (nonPrimaryMouseClick || insignificantMetaClick) {\n    e.stopImmediatePropagation();\n  }\n};\n\nconst Rails = {\n  $: $,\n  ajax: ajax,\n  buttonClickSelector: buttonClickSelector,\n  buttonDisableSelector: buttonDisableSelector,\n  confirm: confirm,\n  cspNonce: cspNonce,\n  csrfToken: csrfToken,\n  csrfParam: csrfParam,\n  CSRFProtection: CSRFProtection,\n  delegate: delegate,\n  disableElement: disableElement,\n  enableElement: enableElement,\n  fileInputSelector: fileInputSelector,\n  fire: fire,\n  formElements: formElements,\n  formEnableSelector: formEnableSelector,\n  formDisableSelector: formDisableSelector,\n  formInputClickSelector: formInputClickSelector,\n  formSubmitButtonClick: formSubmitButtonClick,\n  formSubmitSelector: formSubmitSelector,\n  getData: getData,\n  handleDisabledElement: handleDisabledElement,\n  href: href,\n  inputChangeSelector: inputChangeSelector,\n  isCrossDomain: isCrossDomain,\n  linkClickSelector: linkClickSelector,\n  linkDisableSelector: linkDisableSelector,\n  loadCSPNonce: loadCSPNonce,\n  matches: matches,\n  preventInsignificantClick: preventInsignificantClick,\n  refreshCSRFTokens: refreshCSRFTokens,\n  serializeElement: serializeElement,\n  setData: setData,\n  stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n  if (window._rails_loaded) {\n    throw new Error(\"rails-ujs has already been loaded!\");\n  }\n  window.addEventListener(\"pageshow\", (function() {\n    $(formEnableSelector).forEach((function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    }));\n    $(linkDisableSelector).forEach((function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    }));\n  }));\n  delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n  delegate(document, linkClickSelector, \"click\", handleConfirm);\n  delegate(document, linkClickSelector, \"click\", disableElement);\n  delegate(document, linkClickSelector, \"click\", handleRemote);\n  delegate(document, linkClickSelector, \"click\", handleMethod);\n  delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n  delegate(document, buttonClickSelector, \"click\", handleConfirm);\n  delegate(document, buttonClickSelector, \"click\", disableElement);\n  delegate(document, buttonClickSelector, \"click\", handleRemote);\n  delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n  delegate(document, inputChangeSelector, \"change\", handleConfirm);\n  delegate(document, inputChangeSelector, \"change\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n  delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n  delegate(document, formSubmitSelector, \"submit\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n  delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n  delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n  delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n  delegate(document, formInputClickSelector, \"click\", handleConfirm);\n  delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n  document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n  document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n  return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n  if (jQuery.rails) {\n    throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n  }\n  jQuery.rails = Rails;\n  jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n    if (!options.crossDomain) {\n      return CSRFProtection(xhr);\n    }\n  }));\n}\n\nexport { Rails as default };\n", "/**\r\n * Bootstrap 5 autocomplete\r\n * https://github.com/lekoala/bootstrap5-autocomplete\r\n * @license MIT\r\n */\r\n\r\n// #region config\r\n\r\n/**\r\n * @callback RenderCallback\r\n * @param {Object} item\r\n * @param {String} label\r\n * @param {Autocomplete} inst\r\n * @returns {string}\r\n */\r\n\r\n/**\r\n * @callback ItemCallback\r\n * @param {Object} item\r\n * @param {Autocomplete} inst\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @callback ValueCallback\r\n * @param {String} value\r\n * @param {Autocomplete} inst\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @callback ServerCallback\r\n * @param {Response} response\r\n * @param {Autocomplete} inst\r\n * @returns {Promise}\r\n */\r\n\r\n/**\r\n * @callback ErrorCallback\r\n * @param {Error} e\r\n * @param {AbortSignal} signal\r\n * @param {Autocomplete} inst\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @callback FetchCallback\r\n * @param {Autocomplete} inst\r\n * @returns {void}\r\n */\r\n\r\n/**\r\n * @typedef Config\r\n * @property {Boolean} showAllSuggestions Show all suggestions even if they don't match\r\n * @property {Number} suggestionsThreshold Number of chars required to show suggestions\r\n * @property {Number} maximumItems Maximum number of items to display\r\n * @property {Boolean} autoselectFirst Always select the first item\r\n * @property {Boolean} ignoreEnter Ignore enter if no items are selected (play nicely with autoselectFirst=0)\r\n * @property {Boolean} tabSelect Tab will trigger selection if active\r\n * @property {Boolean} updateOnSelect Update input value on selection (doesn't play nice with autoselectFirst)\r\n * @property {Boolean} highlightTyped Highlight matched part of the label\r\n * @property {String} highlightClass Class added to the mark label\r\n * @property {Boolean} fullWidth Match the width on the input field\r\n * @property {Boolean} fixed Use fixed positioning (solve overflow issues)\r\n * @property {Boolean} fuzzy Fuzzy search\r\n * @property {Boolean} startsWith Must start with the string. Defaults to false (it matches any position).\r\n * @property {Boolean} fillIn Show fill in icon.\r\n * @property {Boolean} preventBrowserAutocomplete Additional measures to prevent browser autocomplete\r\n * @property {String} itemClass Applied to the dropdown item. Accepts space separated classes.\r\n * @property {Array} activeClasses By default: [\"bg-primary\", \"text-white\"]\r\n * @property {String} labelField Key for the label\r\n * @property {String} valueField Key for the value\r\n * @property {Array} searchFields Key for the search\r\n * @property {String} queryParam Key for the query parameter for server\r\n * @property {Array|Object} items An array of label/value objects or an object with key/values\r\n * @property {Function} source A function that provides the list of items\r\n * @property {Boolean} hiddenInput Create an hidden input which stores the valueField\r\n * @property {String} hiddenValue Populate the initial hidden value. Mostly useful with liveServer.\r\n * @property {String} clearControl Selector that will clear the input on click.\r\n * @property {String} datalist The id of the source datalist\r\n * @property {String} server Endpoint for data provider\r\n * @property {String} serverMethod HTTP request method for data provider, default is GET\r\n * @property {String|Object} serverParams Parameters to pass along to the server.  You can specify a \"related\" key with (a) the id of a related field or (b) an array of related field ids.\r\n * @property {String} serverDataKey By default: data\r\n * @property {RequestInit} fetchOptions Any other fetch options (https://developer.mozilla.org/en-US/docs/Web/API/fetch#syntax)\r\n * @property {Boolean} liveServer Should the endpoint be called each time on input\r\n * @property {Boolean} noCache Prevent caching by appending a timestamp\r\n * @property {Number} debounceTime Debounce time for live server\r\n * @property {String} notFoundMessage Display a no suggestions found message. Leave empty to disable\r\n * @property {RenderCallback} onRenderItem Callback function that returns the label\r\n * @property {ItemCallback} onSelectItem Callback function to call on selection\r\n * @property {ValueCallback} onClearItem Callback function to call on clear\r\n * @property {ServerCallback} onServerResponse Callback function to process server response. Must return a Promise\r\n * @property {ErrorCallback} onServerError Callback function to process server errors.\r\n * @property {ItemCallback} onChange Callback function to call on change-event. Returns currently selected item if any\r\n * @property {FetchCallback} onBeforeFetch Callback function before fetch\r\n * @property {FetchCallback} onAfterFetch Callback function after fetch\r\n */\r\n\r\n/**\r\n * @type {Config}\r\n */\r\nconst DEFAULTS = {\r\n  showAllSuggestions: false,\r\n  suggestionsThreshold: 1,\r\n  maximumItems: 0,\r\n  autoselectFirst: true,\r\n  ignoreEnter: false,\r\n  tabSelect: false,\r\n  updateOnSelect: false,\r\n  highlightTyped: false,\r\n  highlightClass: \"\",\r\n  fullWidth: false,\r\n  fixed: false,\r\n  fuzzy: false,\r\n  startsWith: false,\r\n  fillIn: false,\r\n  preventBrowserAutocomplete: false,\r\n  itemClass: \"\",\r\n  activeClasses: [\"bg-primary\", \"text-white\"],\r\n  labelField: \"label\",\r\n  valueField: \"value\",\r\n  searchFields: [\"label\"],\r\n  queryParam: \"query\",\r\n  items: [],\r\n  source: null,\r\n  hiddenInput: false,\r\n  hiddenValue: \"\",\r\n  clearControl: \"\",\r\n  datalist: \"\",\r\n  server: \"\",\r\n  serverMethod: \"GET\",\r\n  serverParams: {},\r\n  serverDataKey: \"data\",\r\n  fetchOptions: {},\r\n  liveServer: false,\r\n  noCache: true,\r\n  debounceTime: 300,\r\n  notFoundMessage: \"\",\r\n  onRenderItem: (item, label, inst) => {\r\n    return label;\r\n  },\r\n  onSelectItem: (item, inst) => {},\r\n  onClearItem: (item, inst) => {},\r\n  onServerResponse: (response, inst) => {\r\n    return response.json();\r\n  },\r\n  onServerError: (e, signal, inst) => {\r\n    // Current version of Firefox rejects the promise with a DOMException\r\n    if (e.name === \"AbortError\" || signal.aborted) {\r\n      return;\r\n    }\r\n    console.error(e);\r\n  },\r\n  onChange: (item, inst) => {},\r\n  onBeforeFetch: (inst) => {},\r\n  onAfterFetch: (inst) => {},\r\n};\r\n\r\n// #endregion\r\n\r\n// #region constants\r\n\r\nconst LOADING_CLASS = \"is-loading\";\r\nconst ACTIVE_CLASS = \"is-active\";\r\nconst SHOW_CLASS = \"show\";\r\nconst NEXT = \"next\";\r\nconst PREV = \"prev\";\r\n\r\n/**\r\n * @type WeakMap<HTMLElement, Autocomplete>\r\n */\r\nconst INSTANCE_MAP = new WeakMap();\r\nlet counter = 0;\r\nlet activeCounter = 0;\r\n\r\n// #endregion\r\n\r\n// #region functions\r\n\r\n/**\r\n * @param {Function} func\r\n * @param {number} timeout\r\n * @returns {Function}\r\n */\r\nfunction debounce(func, timeout = 300) {\r\n  let timer;\r\n  return (...args) => {\r\n    clearTimeout(timer);\r\n    timer = setTimeout(() => {\r\n      //@ts-ignore\r\n      func.apply(this, args);\r\n    }, timeout);\r\n  };\r\n}\r\n\r\n/**\r\n * @param {String} str\r\n * @returns {String}\r\n */\r\nfunction removeDiacritics(str) {\r\n  return str.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\r\n}\r\n\r\n/**\r\n * @param {String|Number} str\r\n * @returns {String}\r\n */\r\nfunction normalize(str) {\r\n  if (!str) {\r\n    return \"\";\r\n  }\r\n  return removeDiacritics(str.toString()).toLowerCase();\r\n}\r\n\r\n/**\r\n * A simple fuzzy match algorithm that checks if chars are matched\r\n * in order in the target string\r\n *\r\n * @param {String} str\r\n * @param {String} lookup\r\n * @returns {Boolean}\r\n */\r\nfunction fuzzyMatch(str, lookup) {\r\n  if (str.indexOf(lookup) >= 0) {\r\n    return true;\r\n  }\r\n  let pos = 0;\r\n  for (let i = 0; i < lookup.length; i++) {\r\n    const c = lookup[i];\r\n    if (c === \" \") continue;\r\n    pos = str.indexOf(c, pos) + 1;\r\n    if (pos <= 0) {\r\n      return false;\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n * @param {HTMLElement} newEl\r\n * @returns {HTMLElement}\r\n */\r\nfunction insertAfter(el, newEl) {\r\n  return el.parentNode.insertBefore(newEl, el.nextSibling);\r\n}\r\n\r\n/**\r\n * @param {string} html\r\n * @returns {string}\r\n */\r\nfunction decodeHtml(html) {\r\n  const txt = document.createElement(\"textarea\");\r\n  txt.innerHTML = html;\r\n  return txt.value;\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n * @param {Object.<string, string>} attrs\r\n * @returns {void}\r\n */\r\nfunction attrs(el, attrs) {\r\n  for (const [k, v] of Object.entries(attrs)) {\r\n    el.setAttribute(k, v);\r\n  }\r\n}\r\n\r\n/**\r\n * Add a zero width join between chars\r\n * @param {HTMLElement|Element} el\r\n * @returns {void}\r\n */\r\nfunction zwijit(el) {\r\n  //@ts-ignore\r\n  el.ariaLabel = el.innerText;\r\n  //@ts-ignore\r\n  el.innerHTML = el.innerText\r\n    .split(\"\")\r\n    .map((char) => char + \"&zwj;\")\r\n    .join(\"\");\r\n}\r\n\r\n/**\r\n * @param {string} str\r\n * @param {string} obj\r\n * @returns {string}\r\n */\r\nfunction nested(str, obj = \"window\") {\r\n  return str.split(\".\").reduce((r, p) => r[p], obj);\r\n}\r\n\r\n// #endregion\r\n\r\nclass Autocomplete {\r\n  /**\r\n   * @param {HTMLInputElement} el\r\n   * @param {Partial<Config>} config\r\n   */\r\n  constructor(el, config = {}) {\r\n    if (!(el instanceof HTMLElement)) {\r\n      console.error(\"Invalid element\", el);\r\n      return;\r\n    }\r\n    INSTANCE_MAP.set(el, this);\r\n    counter++;\r\n    activeCounter++;\r\n    this._searchInput = el;\r\n\r\n    this._configure(config);\r\n\r\n    // Private vars\r\n    /** @private */\r\n    this._isMouse = false;\r\n    /** @private */\r\n    this._preventInput = false;\r\n    /** @private */\r\n    this._keyboardNavigation = false;\r\n    /** @private */\r\n    this._searchFunc = debounce(() => {\r\n      this._loadFromServer(true);\r\n    }, this._config.debounceTime);\r\n\r\n    // Create html\r\n    this._configureSearchInput();\r\n    this._configureDropElement();\r\n\r\n    if (this._config.fixed) {\r\n      document.addEventListener(\"scroll\", this, true);\r\n      window.addEventListener(\"resize\", this);\r\n    }\r\n\r\n    const clearControl = this._getClearControl();\r\n    if (clearControl) {\r\n      clearControl.addEventListener(\"click\", this);\r\n    }\r\n\r\n    // Add listeners (remove then on dispose()). See handleEvent.\r\n    [\"focus\", \"change\", \"blur\", \"input\", \"beforeinput\", \"keydown\"].forEach((type) => {\r\n      this._searchInput.addEventListener(type, this);\r\n    });\r\n    [\"mousemove\", \"mouseenter\", \"mouseleave\"].forEach((type) => {\r\n      this._dropElement.addEventListener(type, this);\r\n    });\r\n\r\n    this._fetchData();\r\n  }\r\n\r\n  // #region Core\r\n\r\n  /**\r\n   * Attach to all elements matched by the selector\r\n   * @param {string} selector\r\n   * @param {Partial<Config>} config\r\n   * @returns {void}\r\n   */\r\n  static init(selector = \"input.autocomplete\", config = {}) {\r\n    /**\r\n     * @type {NodeListOf<HTMLInputElement>}\r\n     */\r\n    const nodes = document.querySelectorAll(selector);\r\n    nodes.forEach((el) => {\r\n      this.getOrCreateInstance(el, config);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLInputElement} el\r\n   * @returns {Autocomplete | null}\r\n   */\r\n  static getInstance(el) {\r\n    return INSTANCE_MAP.has(el) ? INSTANCE_MAP.get(el) : null;\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLInputElement} el\r\n   * @param {Partial<Config>} config\r\n   * @returns {Autocomplete}\r\n   */\r\n  static getOrCreateInstance(el, config = {}) {\r\n    return this.getInstance(el) || new this(el, config);\r\n  }\r\n\r\n  dispose() {\r\n    activeCounter--;\r\n\r\n    [\"focus\", \"change\", \"blur\", \"input\", \"beforeinput\", \"keydown\"].forEach((type) => {\r\n      this._searchInput.removeEventListener(type, this);\r\n    });\r\n    [\"mousemove\", \"mouseenter\", \"mouseleave\"].forEach((type) => {\r\n      this._dropElement.removeEventListener(type, this);\r\n    });\r\n\r\n    const clearControl = this._getClearControl();\r\n    if (clearControl) {\r\n      clearControl.removeEventListener(\"click\", this);\r\n    }\r\n\r\n    // only remove if there are no more active elements\r\n    if (this._config.fixed && activeCounter <= 0) {\r\n      document.removeEventListener(\"scroll\", this, true);\r\n      window.removeEventListener(\"resize\", this);\r\n    }\r\n\r\n    this._dropElement.parentElement.removeChild(this._dropElement);\r\n\r\n    INSTANCE_MAP.delete(this._searchInput);\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _getClearControl() {\r\n    if (this._config.clearControl) {\r\n      return document.querySelector(this._config.clearControl);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @link https://github.com/lifaon74/events-polyfill/issues/10\r\n   * @link https://gist.github.com/WebReflection/ec9f6687842aa385477c4afca625bbf4#handling-events\r\n   * @param {Event} event\r\n   */\r\n  handleEvent = (event) => {\r\n    // debounce scroll and resize\r\n    const debounced = [\"scroll\", \"resize\"];\r\n    if (debounced.includes(event.type)) {\r\n      if (this._timer) window.cancelAnimationFrame(this._timer);\r\n      this._timer = window.requestAnimationFrame(() => {\r\n        this[`on${event.type}`](event);\r\n      });\r\n    } else {\r\n      this[`on${event.type}`](event);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * @private\r\n   * @param {Partial<Config>} config\r\n   */\r\n  _configure(config = {}) {\r\n    this._config = Object.assign({}, DEFAULTS);\r\n\r\n    // Handle options, using arguments first and data attr as override\r\n    const o = { ...config, ...this._searchInput.dataset };\r\n\r\n    // Allow 1/0, true/false as strings\r\n    const parseBool = (value) => [\"true\", \"false\", \"1\", \"0\", true, false].includes(value) && !!JSON.parse(value);\r\n\r\n    // Typecast provided options based on defaults types\r\n    for (const [key, defaultValue] of Object.entries(DEFAULTS)) {\r\n      // Check for undefined keys\r\n      if (o[key] === void 0) {\r\n        continue;\r\n      }\r\n      const value = o[key];\r\n      switch (typeof defaultValue) {\r\n        case \"number\":\r\n          this._config[key] = parseInt(value);\r\n          break;\r\n        case \"boolean\":\r\n          this._config[key] = parseBool(value);\r\n          break;\r\n        case \"string\":\r\n          this._config[key] = value.toString();\r\n          break;\r\n        case \"object\":\r\n          // Arrays have a type object in js\r\n          if (Array.isArray(defaultValue)) {\r\n            if (typeof value === \"string\") {\r\n              const separator = value.includes(\"|\") ? \"|\" : \",\";\r\n              this._config[key] = value.split(separator);\r\n            } else {\r\n              this._config[key] = value;\r\n            }\r\n          } else {\r\n            this._config[key] = typeof value === \"string\" ? JSON.parse(value) : value;\r\n          }\r\n          break;\r\n        case \"function\":\r\n          this._config[key] = typeof value === \"string\" ? window[value] : value;\r\n          break;\r\n        default:\r\n          this._config[key] = value;\r\n          break;\r\n      }\r\n    }\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region Html\r\n  /**\r\n   * @private\r\n   */\r\n  _configureSearchInput() {\r\n    this._searchInput.autocomplete = \"off\";\r\n    this._searchInput.spellcheck = false;\r\n    // note: firefox doesn't support the properties so we use attributes\r\n    // @link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-autocomplete\r\n    // @link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded\r\n    // use the aria-expanded state on the element with role combobox to communicate that the list is displayed.\r\n    attrs(this._searchInput, {\r\n      \"aria-autocomplete\": \"list\",\r\n      \"aria-haspopup\": \"menu\",\r\n      \"aria-expanded\": \"false\",\r\n      role: \"combobox\",\r\n    });\r\n\r\n    // Even with autocomplete \"off\" we can get suggestion from browser due to label\r\n    if (this._searchInput.id && this._config.preventBrowserAutocomplete) {\r\n      const label = document.querySelector(`[for=\"${this._searchInput.id}\"]`);\r\n      if (label) {\r\n        zwijit(label);\r\n      }\r\n    }\r\n\r\n    // Hidden input?\r\n    this._hiddenInput = null;\r\n    if (this._config.hiddenInput) {\r\n      this._hiddenInput = document.createElement(\"input\");\r\n      this._hiddenInput.type = \"hidden\";\r\n      this._hiddenInput.value = this._config.hiddenValue;\r\n      this._hiddenInput.name = this._searchInput.name;\r\n      this._searchInput.name = \"_\" + this._searchInput.name;\r\n      insertAfter(this._searchInput, this._hiddenInput);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _configureDropElement() {\r\n    this._dropElement = document.createElement(\"ul\");\r\n    this._dropElement.id = \"ac-menu-\" + counter;\r\n    this._dropElement.classList.add(\"dropdown-menu\", \"autocomplete-menu\", \"p-0\");\r\n    this._dropElement.style.maxHeight = \"280px\";\r\n    if (!this._config.fullWidth) {\r\n      this._dropElement.style.maxWidth = \"360px\";\r\n    }\r\n    if (this._config.fixed) {\r\n      this._dropElement.style.position = \"fixed\";\r\n    }\r\n    this._dropElement.style.overflowY = \"auto\";\r\n    // Prevent scrolling the menu from scrolling the page\r\n    // @link https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior\r\n    this._dropElement.style.overscrollBehavior = \"contain\";\r\n    this._dropElement.style.textAlign = \"unset\"; // otherwise RTL is not good\r\n\r\n    insertAfter(this._searchInput, this._dropElement);\r\n    // include aria-controls with the value of the id of the suggested list of values.\r\n    this._searchInput.setAttribute(\"aria-controls\", this._dropElement.id);\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region Events\r\n  /**\r\n   * @param {MouseEvent} e\r\n   */\r\n  onclick(e) {\r\n    if (e.target instanceof Element && e.target.matches(this._config.clearControl)) {\r\n      this.clear();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {InputEvent} e\r\n   * @returns {void}\r\n   */\r\n  onbeforeinput(e) {\r\n    if (this._preventInput) {\r\n      return;\r\n    }\r\n    // Input has changed, clear value\r\n    if (this._hiddenInput && this._hiddenInput.value) {\r\n      this._config.onClearItem(this._searchInput.value, this);\r\n      this._hiddenInput.value = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {InputEvent} e\r\n   * @returns {void}\r\n   */\r\n  oninput(e) {\r\n    if (this._preventInput) {\r\n      return;\r\n    }\r\n    this.showOrSearch();\r\n  }\r\n\r\n  /**\r\n   * @param {InputEvent} e\r\n   */\r\n  onchange(e) {\r\n    const search = this._searchInput.value;\r\n    const item = this._items.find((item) => item.label === search);\r\n    this._config.onChange(item, this);\r\n  }\r\n\r\n    /**\r\n   * @param {FocusEvent} e\r\n   */\r\n  onblur(e) {\r\n    const related = e.relatedTarget;\r\n    // Clicking on the scroll in a modal blur the element incorrectly\r\n    // In chrome >= 127, the related target is the dropdown menu\r\n    if (this._isMouse && related instanceof HTMLElement && (related.classList.contains(\"modal\") || related.classList.contains(\"autocomplete-menu\"))) {\r\n      // Restore focus\r\n      this._searchInput.focus();\r\n      return;\r\n    }\r\n    setTimeout(() => {\r\n      this.hideSuggestions();\r\n    }, 100);\r\n  }\r\n\r\n  onfocus(e) {\r\n    this.showOrSearch();\r\n  }\r\n\r\n  /**\r\n   * keypress doesn't send arrow keys, so we use keydown\r\n   * @param {KeyboardEvent} e\r\n   */\r\n  onkeydown(e) {\r\n    const key = e.keyCode || e.key;\r\n    switch (key) {\r\n      case 13:\r\n      case \"Enter\":\r\n        if (this.isDropdownVisible()) {\r\n          const selection = this.getSelection();\r\n          if (selection) {\r\n            selection.click();\r\n          }\r\n          if (selection || !this._config.ignoreEnter) {\r\n            e.preventDefault();\r\n          }\r\n        }\r\n        break;\r\n      case 9:\r\n      case \"Tab\":\r\n        if (this.isDropdownVisible() && this._config.tabSelect) {\r\n          const selection = this.getSelection();\r\n          if (selection) {\r\n            selection.click();\r\n            e.preventDefault();\r\n          }\r\n        }\r\n        break;\r\n      case 38:\r\n      case \"ArrowUp\":\r\n        e.preventDefault();\r\n        this._keyboardNavigation = true;\r\n        this._moveSelection(PREV);\r\n        break;\r\n      case 40:\r\n      case \"ArrowDown\":\r\n        e.preventDefault();\r\n        this._keyboardNavigation = true;\r\n        if (this.isDropdownVisible()) {\r\n          this._moveSelection(NEXT);\r\n        } else {\r\n          // show menu regardless of input length\r\n          this.showOrSearch(false);\r\n        }\r\n        break;\r\n      case 27:\r\n      case \"Escape\":\r\n        if (this.isDropdownVisible()) {\r\n          this._searchInput.focus();\r\n          this.hideSuggestions();\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  onmouseenter(e) {\r\n    this._isMouse = true;\r\n  }\r\n\r\n  onmousemove(e) {\r\n    this._isMouse = true;\r\n    // Moving the mouse means no longer using keyboard\r\n    this._keyboardNavigation = false;\r\n  }\r\n\r\n  onmouseleave(e) {\r\n    this._isMouse = false;\r\n    // Remove selection\r\n    this.removeSelection();\r\n  }\r\n\r\n  onscroll(e) {\r\n    this._positionMenu();\r\n  }\r\n\r\n  onresize(e) {\r\n    this._positionMenu();\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region Api\r\n\r\n  /**\r\n   * @param {String} k\r\n   * @returns {Config}\r\n   */\r\n  getConfig(k = null) {\r\n    if (k !== null) {\r\n      return this._config[k];\r\n    }\r\n    return this._config;\r\n  }\r\n\r\n  /**\r\n   * @param {String} k\r\n   * @param {*} v\r\n   */\r\n  setConfig(k, v) {\r\n    this._config[k] = v;\r\n  }\r\n\r\n  setData(src) {\r\n    /** @private */\r\n    this._items = [];\r\n    this._addItems(src);\r\n  }\r\n\r\n  enable() {\r\n    this._searchInput.setAttribute(\"disabled\", \"\");\r\n  }\r\n\r\n  disable() {\r\n    this._searchInput.removeAttribute(\"disabled\");\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean}\r\n   */\r\n  isDisabled() {\r\n    return this._searchInput.hasAttribute(\"disabled\") || this._searchInput.disabled || this._searchInput.hasAttribute(\"readonly\");\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean}\r\n   */\r\n  isDropdownVisible() {\r\n    return this._dropElement.classList.contains(SHOW_CLASS);\r\n  }\r\n\r\n  clear() {\r\n\tconst v = this._searchInput.value;\r\n\r\n    this._searchInput.value = \"\";\r\n    if (this._hiddenInput) {\r\n      this._hiddenInput.value = \"\";\r\n    }\r\n\r\n    this._config.onClearItem(v, this);\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region Selection management\r\n\r\n  /**\r\n   * @returns {HTMLElement}\r\n   */\r\n  getSelection() {\r\n    return this._dropElement.querySelector(\"a.\" + ACTIVE_CLASS);\r\n  }\r\n\r\n  removeSelection() {\r\n    const selection = this.getSelection();\r\n    if (selection) {\r\n      selection.classList.remove(...this._activeClasses());\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @returns {Array}\r\n   */\r\n  _activeClasses() {\r\n    return [...this._config.activeClasses, ACTIVE_CLASS];\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {HTMLElement} li\r\n   * @returns {Boolean}\r\n   */\r\n  _isItemEnabled(li) {\r\n    if (li.style.display === \"none\") {\r\n      return false;\r\n    }\r\n    const fc = li.firstElementChild;\r\n    return fc.tagName === \"A\" && !fc.classList.contains(\"disabled\");\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {String} dir\r\n   * @param {*|HTMLElement} sel\r\n   * @returns {HTMLElement}\r\n   */\r\n  _moveSelection(dir = NEXT, sel = null) {\r\n    const active = this.getSelection();\r\n\r\n    // select first li\r\n    if (!active) {\r\n      // no active selection, cannot go back\r\n      if (dir === PREV) {\r\n        return sel;\r\n      }\r\n      // find first enabled item\r\n      if (!sel) {\r\n        sel = this._dropElement.firstChild;\r\n        while (sel && !this._isItemEnabled(sel)) {\r\n          sel = sel[\"nextSibling\"];\r\n        }\r\n      }\r\n    } else {\r\n      const sibling = dir === NEXT ? \"nextSibling\" : \"previousSibling\";\r\n\r\n      // Iterate over enabled li\r\n      sel = active.parentNode;\r\n      do {\r\n        sel = sel[sibling];\r\n      } while (sel && !this._isItemEnabled(sel));\r\n\r\n      // We have a new selection\r\n      if (sel) {\r\n        // Change classes\r\n        active.classList.remove(...this._activeClasses());\r\n\r\n        // Scroll if necessary\r\n        if (dir === PREV) {\r\n          // Don't use scrollIntoView as it scrolls the whole window\r\n          sel.parentNode.scrollTop = sel.offsetTop - sel.parentNode.offsetTop;\r\n        } else {\r\n          // This is the equivalent of scrollIntoView(false) but only for parent node\r\n          if (sel.offsetTop > sel.parentNode.offsetHeight - sel.offsetHeight) {\r\n            sel.parentNode.scrollTop += sel.offsetHeight;\r\n          }\r\n        }\r\n      } else if (active) {\r\n        sel = active.parentElement;\r\n      }\r\n    }\r\n\r\n    if (sel) {\r\n      const a = sel.querySelector(\"a\");\r\n      a.classList.add(...this._activeClasses());\r\n      this._searchInput.setAttribute(\"aria-activedescendant\", a.id);\r\n      if (this._config.updateOnSelect) {\r\n        this._searchInput.value = a.dataset.label;\r\n      }\r\n    } else {\r\n      this._searchInput.setAttribute(\"aria-activedescendant\", \"\");\r\n    }\r\n    return sel;\r\n  }\r\n\r\n  // #endregion\r\n\r\n  // #region Implementation\r\n\r\n  /**\r\n   * Do we have enough input to show suggestions ?\r\n   * @private\r\n   * @returns {Boolean}\r\n   */\r\n  _shouldShow() {\r\n    if (this.isDisabled()) {\r\n      return false;\r\n    }\r\n    return this._searchInput.value.length >= this._config.suggestionsThreshold;\r\n  }\r\n\r\n  /**\r\n   * Show suggestions or load them\r\n   * @param {Boolean} check\r\n   */\r\n  showOrSearch(check = true) {\r\n    if (check && !this._shouldShow()) {\r\n      this.hideSuggestions();\r\n      return;\r\n    }\r\n    if (this._config.liveServer) {\r\n      this._searchFunc();\r\n    } else if (this._config.source) {\r\n      this._config.source(this._searchInput.value, (items) => {\r\n        this.setData(items);\r\n        this._showSuggestions();\r\n      });\r\n    } else {\r\n      this._showSuggestions();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {String} name\r\n   * @returns {HTMLElement}\r\n   */\r\n  _createGroup(name) {\r\n    const newChild = this._createLi();\r\n    const newChildSpan = document.createElement(\"span\");\r\n    newChild.append(newChildSpan);\r\n    newChildSpan.classList.add(\"dropdown-header\", \"text-truncate\");\r\n    newChildSpan.innerHTML = name;\r\n    return newChild;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {String} lookup\r\n   * @param {Object} item\r\n   * @returns {HTMLElement}\r\n   */\r\n  _createItem(lookup, item) {\r\n    let label = item.label;\r\n\r\n    if (this._config.highlightTyped) {\r\n      const idx = normalize(label).indexOf(lookup);\r\n      if (idx !== -1) {\r\n        label =\r\n          label.substring(0, idx) +\r\n          `<mark class=\"${this._config.highlightClass}\">${label.substring(idx, idx + lookup.length)}</mark>` +\r\n          label.substring(idx + lookup.length, label.length);\r\n      }\r\n    }\r\n\r\n    label = this._config.onRenderItem(item, label, this);\r\n\r\n    const newChild = this._createLi();\r\n    const newChildLink = document.createElement(\"a\");\r\n    newChild.append(newChildLink);\r\n    newChildLink.id = this._dropElement.id + \"-\" + this._dropElement.children.length;\r\n    newChildLink.classList.add(\"dropdown-item\", \"text-truncate\");\r\n    if (this._config.itemClass) {\r\n      newChildLink.classList.add(...this._config.itemClass.split(\" \"));\r\n    }\r\n    newChildLink.setAttribute(\"data-value\", item.value);\r\n    newChildLink.setAttribute(\"data-label\", item.label);\r\n    // Behave like a datalist (tab doesn't allow item selection)\r\n    // @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist\r\n    newChildLink.setAttribute(\"tabindex\", \"-1\");\r\n    newChildLink.setAttribute(\"role\", \"menuitem\");\r\n    newChildLink.setAttribute(\"href\", \"#\");\r\n    newChildLink.innerHTML = label;\r\n    if (item.data) {\r\n      for (const [key, value] of Object.entries(item.data)) {\r\n        newChildLink.dataset[key] = value;\r\n      }\r\n    }\r\n\r\n    if (this._config.fillIn) {\r\n      const fillIn = document.createElement(\"button\");\r\n      fillIn.type = \"button\"; // prevent submit\r\n      fillIn.classList.add(\"btn\", \"btn-link\", \"border-0\");\r\n      fillIn.innerHTML = `<svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n      <path fill-rule=\"evenodd\" d=\"M2 2.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1H3.707l10.147 10.146a.5.5 0 0 1-.708.708L3 3.707V8.5a.5.5 0 0 1-1 0z\"/>\r\n      </svg>`;\r\n      newChild.append(fillIn);\r\n      newChild.classList.add(\"d-flex\", \"justify-content-between\");\r\n      fillIn.addEventListener(\"click\", (event) => {\r\n        this._searchInput.value = item.label;\r\n        this._searchInput.focus(); // focus back to keep editing\r\n      });\r\n    }\r\n\r\n    // Hover sets active item\r\n    newChildLink.addEventListener(\"mouseenter\", (event) => {\r\n      // Don't trigger enter if using arrows or not currently using the mouse\r\n      if (this._keyboardNavigation || !this._isMouse) {\r\n        return;\r\n      }\r\n      this.removeSelection();\r\n      const a = newChild.querySelector(\"a\");\r\n      a.classList.add(...this._activeClasses());\r\n      this._searchInput.setAttribute(\"aria-activedescendant\", a.id);\r\n    });\r\n    // Prevent searchInput losing focus and close the menu\r\n    newChildLink.addEventListener(\"mousedown\", (event) => {\r\n      event.preventDefault();\r\n    });\r\n    // Apply value\r\n    newChildLink.addEventListener(\"click\", (event) => {\r\n      event.preventDefault();\r\n\r\n      // Prevent input otherwise it might trigger autocomplete due to value change\r\n      this._preventInput = true;\r\n      this._searchInput.value = decodeHtml(item.label);\r\n      // Populate value in hidden input\r\n      if (this._hiddenInput) {\r\n        this._hiddenInput.value = item.value;\r\n      }\r\n      this._config.onSelectItem(item, this);\r\n      this.hideSuggestions();\r\n      this._preventInput = false;\r\n    });\r\n\r\n    return newChild;\r\n  }\r\n\r\n  /**\r\n   * Get the active element, drilling into shadowRoot if necessary.\r\n   * @private\r\n   * @link https://www.abeautifulsite.net/posts/finding-the-active-element-in-a-shadow-root/\r\n   * @param {Document | ShadowRoot} root\r\n   * @returns {Element}\r\n   */\r\n  _getActiveElement(root = document) {\r\n    const activeEl = root.activeElement;\r\n\r\n    if (!activeEl) {\r\n      return null;\r\n    }\r\n\r\n    if (activeEl.shadowRoot) {\r\n      return this._getActiveElement(activeEl.shadowRoot);\r\n    }\r\n    return activeEl;\r\n  }\r\n\r\n  /**\r\n   * Show drop menu with suggestions\r\n   * @private\r\n   */\r\n  _showSuggestions() {\r\n    // It's not focused anymore\r\n    if (this._getActiveElement() !== this._searchInput) {\r\n      return;\r\n    }\r\n    const lookup = normalize(this._searchInput.value);\r\n    this._dropElement.innerHTML = \"\";\r\n\r\n    let count = 0;\r\n    let firstItem = null;\r\n\r\n    const groups = [];\r\n    for (const entry of this._items) {\r\n      // Check search length since we can trigger dropdown with arrow\r\n      const showAllSuggestions = this._config.showAllSuggestions || lookup.length === 0;\r\n      // Do we find a matching string or do we display immediately ?\r\n      let isMatched = lookup.length === 0 && this._config.suggestionsThreshold === 0;\r\n      if (lookup.length > 0) {\r\n        // match on any field\r\n        this._config.searchFields.forEach((sf) => {\r\n          const text = normalize(entry[sf]);\r\n          let found = false;\r\n          if (this._config.fuzzy) {\r\n            found = fuzzyMatch(text, lookup);\r\n          } else {\r\n            const idx = text.indexOf(lookup);\r\n            found = this._config.startsWith ? idx === 0 : idx >= 0;\r\n          }\r\n          if (found) {\r\n            isMatched = true;\r\n          }\r\n        });\r\n      }\r\n\r\n      const selectFirst = isMatched || lookup.length === 0;\r\n      if (showAllSuggestions || isMatched) {\r\n        count++;\r\n\r\n        // Group\r\n        if (entry.group && !groups.includes(entry.group)) {\r\n          const newItem = this._createGroup(entry.group);\r\n          this._dropElement.appendChild(newItem);\r\n          groups.push(entry.group);\r\n        }\r\n\r\n        const newItem = this._createItem(lookup, entry);\r\n        // Only select as first item if its matching or no lookup\r\n        if (!firstItem && selectFirst) {\r\n          firstItem = newItem;\r\n        }\r\n        this._dropElement.appendChild(newItem);\r\n        if (this._config.maximumItems > 0 && count >= this._config.maximumItems) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (firstItem && this._config.autoselectFirst) {\r\n      this.removeSelection();\r\n      this._moveSelection(NEXT, firstItem);\r\n    }\r\n\r\n    if (count === 0) {\r\n      if (this._config.notFoundMessage) {\r\n        const newChild = this._createLi();\r\n        newChild.innerHTML = `<span class=\"dropdown-item\">${this._config.notFoundMessage}</span>`;\r\n        this._dropElement.appendChild(newChild);\r\n        this._showDropdown();\r\n      } else {\r\n        // Remove dropdown if not found\r\n        this.hideSuggestions();\r\n      }\r\n    } else {\r\n      // Or show it if necessary\r\n      this._showDropdown();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @returns {HTMLLIElement}\r\n   */\r\n  _createLi() {\r\n    const newChild = document.createElement(\"li\");\r\n    newChild.setAttribute(\"role\", \"presentation\");\r\n    return newChild;\r\n  }\r\n\r\n  /**\r\n   * Show and position dropdown\r\n   * @private\r\n   */\r\n  _showDropdown() {\r\n    this._dropElement.classList.add(SHOW_CLASS);\r\n    // Register role when shown to avoid empty children issues\r\n    this._dropElement.setAttribute(\"role\", \"menu\");\r\n    attrs(this._searchInput, {\r\n      \"aria-expanded\": \"true\",\r\n    });\r\n    this._positionMenu();\r\n  }\r\n\r\n  /**\r\n   * Show or hide suggestions\r\n   * @param {Boolean} check\r\n   */\r\n  toggleSuggestions(check = true) {\r\n    if (this._dropElement.classList.contains(SHOW_CLASS)) {\r\n      this.hideSuggestions();\r\n    } else {\r\n      this.showOrSearch(check);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Hide the dropdown menu\r\n   */\r\n  hideSuggestions() {\r\n    this._dropElement.classList.remove(SHOW_CLASS);\r\n    attrs(this._searchInput, {\r\n      \"aria-expanded\": \"false\",\r\n    });\r\n    this.removeSelection();\r\n  }\r\n\r\n  /**\r\n   * @returns {HTMLInputElement}\r\n   */\r\n  getInput() {\r\n    return this._searchInput;\r\n  }\r\n\r\n  /**\r\n   * @returns {HTMLUListElement}\r\n   */\r\n  getDropMenu() {\r\n    return this._dropElement;\r\n  }\r\n\r\n  /**\r\n   * @returns {HTMLInputElement}\r\n   */\r\n  getHiddenInput() {\r\n    return this._hiddenInput;\r\n  }\r\n\r\n  /**\r\n   * Position the dropdown menu\r\n   * @private\r\n   */\r\n  _positionMenu() {\r\n    const bounds = this._searchInput.getBoundingClientRect();\r\n    const isRTL = this._searchInput.dir === \"rtl\" || (this._searchInput.dir === \"\" && document.dir === \"rtl\");\r\n    const fullWidth = this._config.fullWidth;\r\n    const fixed = this._config.fixed;\r\n\r\n    // Don't position left if not fixed since it may not work in all situations\r\n    // due to offsetParent margin or in tables\r\n    let left = null;\r\n    let top = null;\r\n\r\n    if (fixed) {\r\n      left = bounds.x;\r\n      top = bounds.y + bounds.height;\r\n\r\n      // Align end\r\n      if (isRTL && !fullWidth) {\r\n        left -= this._dropElement.offsetWidth - bounds.width;\r\n      }\r\n    }\r\n\r\n    // Reset any height overflow adjustement\r\n    this._dropElement.style.transform = \"unset\";\r\n\r\n    // Use full holder width\r\n    if (fullWidth) {\r\n      this._dropElement.style.width = this._searchInput.offsetWidth + \"px\";\r\n    }\r\n\r\n    // Position element\r\n    if (left !== null) {\r\n      this._dropElement.style.left = left + \"px\";\r\n    }\r\n    if (top !== null) {\r\n      this._dropElement.style.top = top + \"px\";\r\n    }\r\n\r\n    // Overflow height\r\n    const dropBounds = this._dropElement.getBoundingClientRect();\r\n    const h = window.innerHeight;\r\n\r\n    // We display above input if it overflows\r\n    if (dropBounds.y + dropBounds.height > h) {\r\n      // We need to add the offset twice\r\n      const topOffset = fullWidth ? bounds.height + 4 : bounds.height;\r\n      // In chrome, we need 100.1% to avoid blurry text\r\n      // @link https://stackoverflow.com/questions/32034574/font-looks-blurry-after-translate-in-chrome\r\n      this._dropElement.style.transform = \"translateY(calc(-100.1% - \" + topOffset + \"px))\";\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _fetchData() {\r\n    this._items = [];\r\n\r\n    // From an array of items or an object\r\n    this._addItems(this._config.items);\r\n\r\n    // From a datalist\r\n    const dl = this._config.datalist;\r\n    if (dl) {\r\n      const datalist = document.querySelector(`#${dl}`);\r\n      if (datalist) {\r\n        const items = Array.from(datalist.children).map((o) => {\r\n          const value = o.getAttribute(\"value\") ?? o.innerHTML.toLowerCase();\r\n          const label = o.innerHTML;\r\n\r\n          return {\r\n            value,\r\n            label,\r\n          };\r\n        });\r\n        this._addItems(items);\r\n      } else {\r\n        console.error(`Datalist not found ${dl}`);\r\n      }\r\n    }\r\n    this._setHiddenVal();\r\n\r\n    // From an external source\r\n    if (this._config.server && !this._config.liveServer) {\r\n      this._loadFromServer();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _setHiddenVal() {\r\n    if (this._config.hiddenInput && !this._config.hiddenValue) {\r\n      for (const entry of this._items) {\r\n        if (entry.label == this._searchInput.value) {\r\n          this._hiddenInput.value = entry.value;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {Array|Object} src\r\n   * @returns {Array}\r\n   */\r\n  _normalizeData(src) {\r\n    if (Array.isArray(src)) {\r\n      return src;\r\n    }\r\n\r\n    let arr = [];\r\n    // Normalize objects into an array of value/label objects\r\n    for (const [value, label] of Object.entries(src)) {\r\n      arr.push({\r\n        value,\r\n        label,\r\n      });\r\n    }\r\n    return arr;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {Array|Object} src An array of items or a value:label object\r\n   */\r\n  _addItems(src) {\r\n    src = this._normalizeData(src);\r\n    for (const entry of src) {\r\n      if (entry.group && entry.items) {\r\n        entry.items.forEach((e) => (e.group = entry.group));\r\n        this._addItems(entry.items);\r\n        continue;\r\n      }\r\n\r\n      const label = typeof entry === \"string\" ? entry : entry.label;\r\n      const item = typeof entry !== \"object\" ? {} : entry;\r\n\r\n      // Normalize entry when the entry is just a string (value = label)\r\n      item.label = entry[this._config.labelField] ?? label;\r\n      item.value = entry[this._config.valueField] ?? label;\r\n\r\n      // Make sure we have a label\r\n      if (item.label) {\r\n        this._items.push(item);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {boolean} show\r\n   */\r\n  _loadFromServer(show = false) {\r\n    if (this._abortController) {\r\n      this._abortController.abort();\r\n    }\r\n    this._abortController = new AbortController();\r\n\r\n    // call early so the config can be changed dynamically\r\n    this._config.onBeforeFetch(this);\r\n\r\n    // Read data params dynamically as well\r\n    let extraParams = this._searchInput.dataset.serverParams || {};\r\n    if (typeof extraParams == \"string\") {\r\n      extraParams = JSON.parse(extraParams);\r\n    }\r\n    const params = Object.assign({}, this._config.serverParams, extraParams);\r\n    // Pass current value\r\n    params[this._config.queryParam] = this._searchInput.value;\r\n    // Prevent caching\r\n    if (this._config.noCache) {\r\n      params.t = Date.now();\r\n    }\r\n\r\n     // We have a related field or an array of related fields\r\n    if (params.related) {\r\n      // Check if params.related is an array\r\n      const relatedItems = Array.isArray(params.related) ? params.related : [params.related];\r\n\r\n      relatedItems.forEach((related) => {\r\n        const input = document.getElementById(related);\r\n        if (input && \"value\" in input) {\r\n          const inputValue = input.value;\r\n          const inputName = input.getAttribute(\"name\");\r\n\r\n          // Update params with the input value\r\n          if (inputName) {\r\n            params[inputName] = inputValue;\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    const urlParams = new URLSearchParams(params);\r\n    let url = this._config.server;\r\n    let fetchOptions = Object.assign(this._config.fetchOptions, {\r\n      method: this._config.serverMethod || \"GET\",\r\n      signal: this._abortController.signal,\r\n    });\r\n\r\n    if (fetchOptions.method === \"POST\") {\r\n      fetchOptions.body = urlParams;\r\n    } else {\r\n      if (url.indexOf('?') == -1) url += \"?\";\r\n      else url += \"&\";\r\n      url += urlParams.toString();\r\n    }\r\n\r\n    this._searchInput.classList.add(LOADING_CLASS);\r\n\r\n    fetch(url, fetchOptions)\r\n      .then((r) => this._config.onServerResponse(r, this))\r\n      .then((suggestions) => {\r\n        const data = nested(this._config.serverDataKey, suggestions) || suggestions;\r\n        this.setData(data);\r\n        this._setHiddenVal();\r\n        this._abortController = null;\r\n        if (show) {\r\n          this._showSuggestions();\r\n        }\r\n      })\r\n      .catch((e) => {\r\n        this._config.onServerError(e, this._abortController.signal, this);\r\n      })\r\n      .finally((e) => {\r\n        this._searchInput.classList.remove(LOADING_CLASS);\r\n        this._config.onAfterFetch(this);\r\n      });\r\n  }\r\n\r\n  // #endregion\r\n}\r\n\r\nexport default Autocomplete;\r\n", "//require('bootstrap-autocomplete/dist/latest/bootstrap-autocomplete')\nimport Autocomplete from \"bootstrap5-autocomplete\"\n\nimport * as bootstrap from \"bootstrap\"\n\nwindow.App = {}\n\ndocument.addEventListener(\"turbo:load\", function() {\n  if ( document.getElementById(\"country_search\") ) {\n    Autocomplete.init();\n\n    new Autocomplete(document.getElementById(\"country_search\"),\n\t\t     {\n\t\t       suggestionsThreshold: 2,\n\t\t       server: '/locations/country_search',\n\t\t       liveServer: true,\n\t\t       valueField: 'value',\n\t\t       labelField: 'text',\n\t\t       onSelectItem: () => {\n\t\t\t Rails.fire($(event.srcElement).closest('form').get(0), 'submit')\n\t\t       }\n\t\t     })\n  }    \n\n  $('.auto-submit').change(function() {\n    return Rails.fire($(this).closest('form').get(0), 'submit');\n  })  \n  \n  let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle=\"tooltip\"]'))\n  let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {\n    return new bootstrap.Tooltip(tooltipTriggerEl)\n  })\n  \n  // let alert_list = document.querySelectorAll('.alert')\n\n})\n", "/*!\n * Ahoy.js v0.4.5\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * MIT License\n */\n\n// https://www.quirksmode.org/js/cookies.html\n\nvar Cookies = {\n  set: function (name, value, ttl, domain) {\n    var expires = \"\";\n    var cookieDomain = \"\";\n    if (ttl) {\n      var date = new Date();\n      date.setTime(date.getTime() + (ttl * 60 * 1000));\n      expires = \"; expires=\" + date.toGMTString();\n    }\n    if (domain) {\n      cookieDomain = \"; domain=\" + domain;\n    }\n    document.cookie = name + \"=\" + escape(value) + expires + cookieDomain + \"; path=/; samesite=lax\";\n  },\n  get: function (name) {\n    var i, c;\n    var nameEQ = name + \"=\";\n    var ca = document.cookie.split(';');\n    for (i = 0; i < ca.length; i++) {\n      c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }\n      if (c.indexOf(nameEQ) === 0) {\n        return unescape(c.substring(nameEQ.length, c.length));\n      }\n    }\n    return null;\n  }\n};\n\nvar config = {\n  urlPrefix: \"\",\n  visitsUrl: \"/ahoy/visits\",\n  eventsUrl: \"/ahoy/events\",\n  page: null,\n  platform: \"Web\",\n  useBeacon: true,\n  startOnReady: true,\n  trackVisits: true,\n  cookies: true,\n  cookieDomain: null,\n  headers: {},\n  visitParams: {},\n  withCredentials: false,\n  visitDuration: 4 * 60, // default 4 hours\n  visitorDuration: 2 * 365 * 24 * 60 // default 2 years\n};\n\nvar ahoy = window.ahoy || window.Ahoy || {};\n\nahoy.configure = function (options) {\n  for (var key in options) {\n    if (Object.prototype.hasOwnProperty.call(options, key)) {\n      config[key] = options[key];\n    }\n  }\n};\n\n// legacy\nahoy.configure(ahoy);\n\nvar $ = window.jQuery || window.Zepto || window.$;\nvar visitId, visitorId, track;\nvar isReady = false;\nvar queue = [];\nvar canStringify = typeof(JSON) !== \"undefined\" && typeof(JSON.stringify) !== \"undefined\";\nvar eventQueue = [];\n\nfunction visitsUrl() {\n  return config.urlPrefix + config.visitsUrl;\n}\n\nfunction eventsUrl() {\n  return config.urlPrefix + config.eventsUrl;\n}\n\nfunction isEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\n\nfunction canTrackNow() {\n  return (config.useBeacon || config.trackNow) && isEmpty(config.headers) && canStringify && typeof(window.navigator.sendBeacon) !== \"undefined\" && !config.withCredentials;\n}\n\nfunction serialize(object) {\n  var data = new FormData();\n  for (var key in object) {\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      data.append(key, object[key]);\n    }\n  }\n  return data;\n}\n\n// cookies\n\nfunction setCookie(name, value, ttl) {\n  Cookies.set(name, value, ttl, config.cookieDomain || config.domain);\n}\n\nfunction getCookie(name) {\n  return Cookies.get(name);\n}\n\nfunction destroyCookie(name) {\n  Cookies.set(name, \"\", -1, config.cookieDomain || config.domain);\n}\n\nfunction log(message) {\n  if (getCookie(\"ahoy_debug\")) {\n    window.console.log(message);\n  }\n}\n\nfunction setReady() {\n  var callback;\n  while ((callback = queue.shift())) {\n    callback();\n  }\n  isReady = true;\n}\n\nahoy.ready = function (callback) {\n  if (isReady) {\n    callback();\n  } else {\n    queue.push(callback);\n  }\n};\n\nfunction matchesSelector(element, selector) {\n  var matches = element.matches ||\n    element.matchesSelector ||\n    element.mozMatchesSelector ||\n    element.msMatchesSelector ||\n    element.oMatchesSelector ||\n    element.webkitMatchesSelector;\n\n  if (matches) {\n    if (matches.apply(element, [selector])) {\n      return element;\n    } else if (element.parentElement) {\n      return matchesSelector(element.parentElement, selector);\n    }\n    return null;\n  } else {\n    log(\"Unable to match\");\n    return null;\n  }\n}\n\nfunction onEvent(eventName, selector, callback) {\n  document.addEventListener(eventName, function (e) {\n    var matchedElement = matchesSelector(e.target, selector);\n    if (matchedElement) {\n      var skip = getClosest(matchedElement, \"data-ahoy-skip\");\n      if (skip !== null && skip !== \"false\") { return; }\n\n      callback.call(matchedElement, e);\n    }\n  });\n}\n\n// http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript\nfunction documentReady(callback) {\n  if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n    setTimeout(callback, 0);\n  } else {\n    document.addEventListener(\"DOMContentLoaded\", callback);\n  }\n}\n\n// https://stackoverflow.com/a/2117523/1177228\nfunction generateId() {\n  if (window.crypto && window.crypto.randomUUID) {\n    return window.crypto.randomUUID();\n  }\n\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}\n\nfunction saveEventQueue() {\n  if (config.cookies && canStringify) {\n    setCookie(\"ahoy_events\", JSON.stringify(eventQueue), 1);\n  }\n}\n\n// from rails-ujs\n\nfunction csrfToken() {\n  var meta = document.querySelector(\"meta[name=csrf-token]\");\n  return meta && meta.content;\n}\n\nfunction csrfParam() {\n  var meta = document.querySelector(\"meta[name=csrf-param]\");\n  return meta && meta.content;\n}\n\nfunction CSRFProtection(xhr) {\n  var token = csrfToken();\n  if (token) { xhr.setRequestHeader(\"X-CSRF-Token\", token); }\n}\n\nfunction sendRequest(url, data, success) {\n  if (canStringify) {\n    if ($ && $.ajax) {\n      $.ajax({\n        type: \"POST\",\n        url: url,\n        data: JSON.stringify(data),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n        beforeSend: CSRFProtection,\n        success: success,\n        headers: config.headers,\n        xhrFields: {\n          withCredentials: config.withCredentials\n        }\n      });\n    } else {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"POST\", url, true);\n      xhr.withCredentials = config.withCredentials;\n      xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      for (var header in config.headers) {\n        if (Object.prototype.hasOwnProperty.call(config.headers, header)) {\n          xhr.setRequestHeader(header, config.headers[header]);\n        }\n      }\n      xhr.onload = function () {\n        if (xhr.status === 200) {\n          success();\n        }\n      };\n      CSRFProtection(xhr);\n      xhr.send(JSON.stringify(data));\n    }\n  }\n}\n\nfunction eventData(event) {\n  var data = {\n    events: [event]\n  };\n  if (config.cookies) {\n    data.visit_token = event.visit_token;\n    data.visitor_token = event.visitor_token;\n  }\n  delete event.visit_token;\n  delete event.visitor_token;\n  return data;\n}\n\nfunction trackEvent(event) {\n  ahoy.ready(function () {\n    sendRequest(eventsUrl(), eventData(event), function () {\n      // remove from queue\n      for (var i = 0; i < eventQueue.length; i++) {\n        if (eventQueue[i].id === event.id) {\n          eventQueue.splice(i, 1);\n          break;\n        }\n      }\n      saveEventQueue();\n    });\n  });\n}\n\nfunction trackEventNow(event) {\n  ahoy.ready(function () {\n    var data = eventData(event);\n    var param = csrfParam();\n    var token = csrfToken();\n    if (param && token) { data[param] = token; }\n    // stringify so we keep the type\n    data.events_json = JSON.stringify(data.events);\n    delete data.events;\n    window.navigator.sendBeacon(eventsUrl(), serialize(data));\n  });\n}\n\nfunction page() {\n  return config.page || window.location.pathname;\n}\n\nfunction presence(str) {\n  return (str && str.length > 0) ? str : null;\n}\n\nfunction cleanObject(obj) {\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      if (obj[key] === null) {\n        delete obj[key];\n      }\n    }\n  }\n  return obj;\n}\n\nfunction eventProperties() {\n  return cleanObject({\n    tag: this.tagName.toLowerCase(),\n    id: presence(this.id),\n    \"class\": presence(this.className),\n    page: page(),\n    section: getClosest(this, \"data-section\")\n  });\n}\n\nfunction getClosest(element, attribute) {\n  for (; element && element !== document; element = element.parentNode) {\n    if (element.hasAttribute(attribute)) {\n      return element.getAttribute(attribute);\n    }\n  }\n\n  return null;\n}\n\nfunction createVisit() {\n  isReady = false;\n\n  visitId = ahoy.getVisitId();\n  visitorId = ahoy.getVisitorId();\n  track = getCookie(\"ahoy_track\");\n\n  if (config.cookies === false || config.trackVisits === false) {\n    log(\"Visit tracking disabled\");\n    setReady();\n  } else if (visitId && visitorId && !track) {\n    // TODO keep visit alive?\n    log(\"Active visit\");\n    setReady();\n  } else {\n    if (!visitId) {\n      visitId = generateId();\n      setCookie(\"ahoy_visit\", visitId, config.visitDuration);\n    }\n\n    // make sure cookies are enabled\n    if (getCookie(\"ahoy_visit\")) {\n      log(\"Visit started\");\n\n      if (!visitorId) {\n        visitorId = generateId();\n        setCookie(\"ahoy_visitor\", visitorId, config.visitorDuration);\n      }\n\n      var data = {\n        visit_token: visitId,\n        visitor_token: visitorId,\n        platform: config.platform,\n        landing_page: window.location.href,\n        screen_width: window.screen.width,\n        screen_height: window.screen.height,\n        js: true\n      };\n\n      // referrer\n      if (document.referrer.length > 0) {\n        data.referrer = document.referrer;\n      }\n\n      for (var key in config.visitParams) {\n        if (Object.prototype.hasOwnProperty.call(config.visitParams, key)) {\n          data[key] = config.visitParams[key];\n        }\n      }\n\n      log(data);\n\n      sendRequest(visitsUrl(), data, function () {\n        // wait until successful to destroy\n        destroyCookie(\"ahoy_track\");\n        setReady();\n      });\n    } else {\n      log(\"Cookies disabled\");\n      setReady();\n    }\n  }\n}\n\nahoy.getVisitId = ahoy.getVisitToken = function () {\n  return getCookie(\"ahoy_visit\");\n};\n\nahoy.getVisitorId = ahoy.getVisitorToken = function () {\n  return getCookie(\"ahoy_visitor\");\n};\n\nahoy.reset = function () {\n  destroyCookie(\"ahoy_visit\");\n  destroyCookie(\"ahoy_visitor\");\n  destroyCookie(\"ahoy_events\");\n  destroyCookie(\"ahoy_track\");\n  return true;\n};\n\nahoy.debug = function (enabled) {\n  if (enabled === false) {\n    destroyCookie(\"ahoy_debug\");\n  } else {\n    setCookie(\"ahoy_debug\", \"t\", 365 * 24 * 60); // 1 year\n  }\n  return true;\n};\n\nahoy.track = function (name, properties) {\n  // generate unique id\n  var event = {\n    name: name,\n    properties: properties || {},\n    time: (new Date()).getTime() / 1000.0,\n    id: generateId(),\n    js: true\n  };\n\n  ahoy.ready(function () {\n    if (config.cookies && !ahoy.getVisitId()) {\n      createVisit();\n    }\n\n    ahoy.ready(function () {\n      log(event);\n\n      event.visit_token = ahoy.getVisitId();\n      event.visitor_token = ahoy.getVisitorId();\n\n      if (canTrackNow()) {\n        trackEventNow(event);\n      } else {\n        eventQueue.push(event);\n        saveEventQueue();\n\n        // wait in case navigating to reduce duplicate events\n        setTimeout(function () {\n          trackEvent(event);\n        }, 1000);\n      }\n    });\n  });\n\n  return true;\n};\n\nahoy.trackView = function (additionalProperties) {\n  var properties = {\n    url: window.location.href,\n    title: document.title,\n    page: page()\n  };\n\n  if (additionalProperties) {\n    for (var propName in additionalProperties) {\n      if (Object.prototype.hasOwnProperty.call(additionalProperties, propName)) {\n        properties[propName] = additionalProperties[propName];\n      }\n    }\n  }\n  ahoy.track(\"$view\", properties);\n};\n\nahoy.trackClicks = function (selector) {\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"click\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    properties.text = properties.tag === \"input\" ? this.value : (this.textContent || this.innerText || this.innerHTML).replace(/[\\s\\r\\n]+/g, \" \").trim();\n    properties.href = this.href;\n    ahoy.track(\"$click\", properties);\n  });\n};\n\nahoy.trackSubmits = function (selector) {\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"submit\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    ahoy.track(\"$submit\", properties);\n  });\n};\n\nahoy.trackChanges = function (selector) {\n  log(\"trackChanges is deprecated and will be removed in 0.5.0\");\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"change\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    ahoy.track(\"$change\", properties);\n  });\n};\n\n// push events from queue\ntry {\n  eventQueue = JSON.parse(getCookie(\"ahoy_events\") || \"[]\");\n} catch (e) {\n  // do nothing\n}\n\nfor (var i = 0; i < eventQueue.length; i++) {\n  trackEvent(eventQueue[i]);\n}\n\nahoy.start = function () {\n  createVisit();\n\n  ahoy.start = function () {};\n};\n\ndocumentReady(function () {\n  if (config.startOnReady) {\n    ahoy.start();\n  }\n});\n\nexport { ahoy as default };\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { TempusDominus } from '@eonasdan/tempus-dominus'\n\n// Connects to data-controller=\"application\"\nexport default class extends Controller {\n  disableAutocompletion() {\n    $('.no-autocomplete').attr('autocomplete', 'off')\n  }\n\n  initializeDatepickers() {\n    Array.from(document.getElementsByClassName('datepicker-control')).forEach(\n      function(element, index, array) {\n        new TempusDominus(element, {\n\t  display: {\n\t     icons: {\n\t\ttype: 'icons',\n\t\tprevious: 'bi bi-chevron-left',\n\t\tnext: 'bi bi-chevron-right'\n\t      },\n\t    viewMode: 'calendar',\n\t    components: {\n              calendar: true,\n              date: true,\n              month: true,\n              year: true,\n              decades: true,\n              clock: false,\n              hours: false,\n              minutes: false,\n              seconds: false,\n\t    }\n\t  },\n\t  localization: {\n\t    format: 'yyyy/MM/dd',\n\t    dayViewHeaderFormat: 'MMMM yyyy'\n\t  }\n\t}\n\t)\n      }\n    )\n  }\n}\n", "export class TdError extends Error {\n  code: number;\n}\n\nexport class ErrorMessages {\n  private base = 'TD:';\n\n  //#region out to console\n\n  /**\n   * Throws an error indicating that a key in the options object is invalid.\n   * @param optionName\n   */\n  unexpectedOption(optionName: string) {\n    const error = new TdError(\n      `${this.base} Unexpected option: ${optionName} does not match a known option.`\n    );\n    error.code = 1;\n    throw error;\n  }\n\n  /**\n   * Throws an error indicating that one more keys in the options object is invalid.\n   * @param optionName\n   */\n  unexpectedOptions(optionName: string[]) {\n    const error = new TdError(`${this.base}: ${optionName.join(', ')}`);\n    error.code = 1;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option is provide an unsupported value.\n   * For example a value of 'cheese' for toolbarPlacement which only supports\n   * 'top', 'bottom', 'default'.\n   * @param optionName\n   * @param badValue\n   * @param validOptions\n   */\n  unexpectedOptionValue(\n    optionName: string,\n    badValue: string,\n    validOptions: string[]\n  ) {\n    const error = new TdError(\n      `${\n        this.base\n      } Unexpected option value: ${optionName} does not accept a value of \"${badValue}\". Valid values are: ${validOptions.join(\n        ', '\n      )}`\n    );\n    error.code = 2;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option value is the wrong type.\n   * For example a string value was provided to multipleDates which only\n   * supports true or false.\n   * @param optionName\n   * @param badType\n   * @param expectedType\n   */\n  typeMismatch(optionName: string, badType: string, expectedType: string) {\n    const error = new TdError(\n      `${this.base} Mismatch types: ${optionName} has a type of ${badType} instead of the required ${expectedType}`\n    );\n    error.code = 3;\n    throw error;\n  }\n\n  /**\n   * Throws an error when an option value is  outside of the expected range.\n   * For example restrictions.daysOfWeekDisabled excepts a value between 0 and 6.\n   * @param optionName\n   * @param lower\n   * @param upper\n   */\n  numbersOutOfRange(optionName: string, lower: number, upper: number) {\n    const error = new TdError(\n      `${this.base} ${optionName} expected an array of number between ${lower} and ${upper}.`\n    );\n    error.code = 4;\n    throw error;\n  }\n\n  /**\n   * Throws an error when a value for a date options couldn't be parsed. Either\n   * the option was an invalid string or an invalid Date object.\n   * @param optionName\n   * @param date\n   * @param soft If true, logs a warning instead of an error.\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  failedToParseDate(optionName: string, date: any, soft = false) {\n    const error = new TdError(\n      `${this.base} Could not correctly parse \"${date}\" to a date for ${optionName}.`\n    );\n    error.code = 5;\n    if (!soft) throw error;\n    console.warn(error);\n  }\n\n  /**\n   * Throws when an element to attach to was not provided in the constructor.\n   */\n  mustProvideElement() {\n    const error = new TdError(`${this.base} No element was provided.`);\n    error.code = 6;\n    throw error;\n  }\n\n  /**\n   * Throws if providing an array for the events to subscribe method doesn't have\n   * the same number of callbacks. E.g., subscribe([1,2], [1])\n   */\n  subscribeMismatch() {\n    const error = new TdError(\n      `${this.base} The subscribed events does not match the number of callbacks`\n    );\n    error.code = 7;\n    throw error;\n  }\n\n  /**\n   * Throws if the configuration has conflicting rules e.g. minDate is after maxDate\n   */\n  conflictingConfiguration(message?: string) {\n    const error = new TdError(\n      `${this.base} A configuration value conflicts with another rule. ${message}`\n    );\n    error.code = 8;\n    throw error;\n  }\n\n  /**\n   * customDateFormat errors\n   */\n  customDateFormatError(message?: string) {\n    const error = new TdError(`${this.base} Custom Date Format: ${message}`);\n    error.code = 9;\n    throw error;\n  }\n\n  /**\n   * Logs a warning if a date option value is provided as a string, instead of\n   * a date/datetime object.\n   */\n  dateString() {\n    console.warn(\n      `${this.base} Using a string for date options is not recommended unless you specify an ISO string or use the customDateFormat plugin.`\n    );\n  }\n\n  deprecatedWarning(message: string, remediation?: string) {\n    console.warn(\n      `${this.base} Warning ${message} is deprecated and will be removed in a future version. ${remediation}`\n    );\n  }\n\n  throwError(message) {\n    const error = new TdError(`${this.base} ${message}`);\n    error.code = 9;\n    throw error;\n  }\n\n  //#endregion\n\n  //#region used with notify.error\n\n  /**\n   * Used with an Error Event type if the user selects a date that\n   * fails restriction validation.\n   */\n  failedToSetInvalidDate = 'Failed to set invalid date';\n\n  /**\n   * Used with an Error Event type when a user changes the value of the\n   * input field directly, and does not provide a valid date.\n   */\n  failedToParseInput = 'Failed parse input field';\n\n  //#endregion\n}\n", "import { ErrorMessages } from './errors';\n// this is not the way I want this to stay but nested classes seemed to blown up once its compiled.\nconst NAME = 'tempus-dominus',\n  dataKey = 'td';\n\n/**\n * Events\n */\nclass Events {\n  key = `.${dataKey}`;\n\n  /**\n   * Change event. Fired when the user selects a date.\n   * See also EventTypes.ChangeEvent\n   */\n  change = `change${this.key}`;\n\n  /**\n   * Emit when the view changes for example from month view to the year view.\n   * See also EventTypes.ViewUpdateEvent\n   */\n  update = `update${this.key}`;\n\n  /**\n   * Emits when a selected date or value from the input field fails to meet the provided validation rules.\n   * See also EventTypes.FailEvent\n   */\n  error = `error${this.key}`;\n\n  /**\n   * Show event\n   * @event Events#show\n   */\n  show = `show${this.key}`;\n\n  /**\n   * Hide event\n   * @event Events#hide\n   */\n  hide = `hide${this.key}`;\n\n  // blur and focus are used in the jQuery provider but are otherwise unused.\n  // keyup/down will be used later for keybinding options\n\n  blur = `blur${this.key}`;\n  focus = `focus${this.key}`;\n  keyup = `keyup${this.key}`;\n  keydown = `keydown${this.key}`;\n}\n\nclass Css {\n  /**\n   * The outer element for the widget.\n   */\n  widget = `${NAME}-widget`;\n\n  /**\n   * Hold the previous, next and switcher divs\n   */\n  calendarHeader = 'calendar-header';\n\n  /**\n   * The element for the action to change the calendar view. E.g. month -> year.\n   */\n  switch = 'picker-switch';\n\n  /**\n   * The elements for all the toolbar options\n   */\n  toolbar = 'toolbar';\n\n  /**\n   * Disables the hover and rounding affect.\n   */\n  noHighlight = 'no-highlight';\n\n  /**\n   * Applied to the widget element when the side by side option is in use.\n   */\n  sideBySide = 'timepicker-sbs';\n\n  /**\n   * The element for the action to change the calendar view, e.g. August -> July\n   */\n  previous = 'previous';\n\n  /**\n   * The element for the action to change the calendar view, e.g. August -> September\n   */\n  next = 'next';\n\n  /**\n   * Applied to any action that would violate any restriction options. ALso applied\n   * to an input field if the disabled function is called.\n   */\n  disabled = 'disabled';\n\n  /**\n   * Applied to any date that is less than requested view,\n   * e.g. the last day of the previous month.\n   */\n  old = 'old';\n\n  /**\n   * Applied to any date that is greater than of requested view,\n   * e.g. the last day of the previous month.\n   */\n  new = 'new';\n\n  /**\n   * Applied to any date that is currently selected.\n   */\n  active = 'active';\n\n  //#region date element\n\n  /**\n   * The outer element for the calendar view.\n   */\n  dateContainer = 'date-container';\n\n  /**\n   * The outer element for the decades view.\n   */\n  decadesContainer = `${this.dateContainer}-decades`;\n\n  /**\n   * Applied to elements within the decade container, e.g. 2020, 2030\n   */\n  decade = 'decade';\n\n  /**\n   * The outer element for the years view.\n   */\n  yearsContainer = `${this.dateContainer}-years`;\n\n  /**\n   * Applied to elements within the years container, e.g. 2021, 2021\n   */\n  year = 'year';\n\n  /**\n   * The outer element for the month view.\n   */\n  monthsContainer = `${this.dateContainer}-months`;\n\n  /**\n   * Applied to elements within the month container, e.g. January, February\n   */\n  month = 'month';\n\n  /**\n   * The outer element for the calendar view.\n   */\n  daysContainer = `${this.dateContainer}-days`;\n\n  /**\n   * Applied to elements within the day container, e.g. 1, 2..31\n   */\n  day = 'day';\n\n  /**\n   * If display.calendarWeeks is enabled, a column displaying the week of year\n   * is shown. This class is applied to each cell in that column.\n   */\n  calendarWeeks = 'cw';\n\n  /**\n   * Applied to the first row of the calendar view, e.g. Sunday, Monday\n   */\n  dayOfTheWeek = 'dow';\n\n  /**\n   * Applied to the current date on the calendar view.\n   */\n  today = 'today';\n\n  /**\n   * Applied to the locale's weekend dates on the calendar view, e.g. Sunday, Saturday\n   */\n  weekend = 'weekend';\n\n  rangeIn = 'range-in';\n  rangeStart = 'range-start';\n  rangeEnd = 'range-end';\n\n  //#endregion\n\n  //#region time element\n\n  /**\n   * The outer element for all time related elements.\n   */\n  timeContainer = 'time-container';\n\n  /**\n   * Applied the separator columns between time elements, e.g. hour *:* minute *:* second\n   */\n  separator = 'separator';\n\n  /**\n   * The outer element for the clock view.\n   */\n  clockContainer = `${this.timeContainer}-clock`;\n\n  /**\n   * The outer element for the hours selection view.\n   */\n  hourContainer = `${this.timeContainer}-hour`;\n\n  /**\n   * The outer element for the minutes selection view.\n   */\n  minuteContainer = `${this.timeContainer}-minute`;\n\n  /**\n   * The outer element for the seconds selection view.\n   */\n  secondContainer = `${this.timeContainer}-second`;\n\n  /**\n   * Applied to each element in the hours selection view.\n   */\n  hour = 'hour';\n\n  /**\n   * Applied to each element in the minutes selection view.\n   */\n  minute = 'minute';\n\n  /**\n   * Applied to each element in the seconds selection view.\n   */\n  second = 'second';\n\n  /**\n   * Applied AM/PM toggle button.\n   */\n  toggleMeridiem = 'toggleMeridiem';\n\n  //#endregion\n\n  //#region collapse\n\n  /**\n   * Applied the element of the current view mode, e.g. calendar or clock.\n   */\n  show = 'show';\n\n  /**\n   * Applied to the currently showing view mode during a transition\n   * between calendar and clock views\n   */\n  collapsing = 'td-collapsing';\n\n  /**\n   * Applied to the currently hidden view mode.\n   */\n  collapse = 'td-collapse';\n\n  //#endregion\n\n  /**\n   * Applied to the widget when the option display.inline is enabled.\n   */\n  inline = 'inline';\n\n  /**\n   * Applied to the widget when the option display.theme is light.\n   */\n  lightTheme = 'light';\n\n  /**\n   * Applied to the widget when the option display.theme is dark.\n   */\n  darkTheme = 'dark';\n\n  /**\n   * Used for detecting if the system color preference is dark mode\n   */\n  isDarkPreferredQuery = '(prefers-color-scheme: dark)';\n}\n\nexport default class Namespace {\n  static NAME = NAME;\n  // noinspection JSUnusedGlobalSymbols\n  static dataKey = dataKey;\n\n  static events = new Events();\n\n  static css = new Css();\n\n  static errorMessages = new ErrorMessages();\n}\n", "import { FormatLocalization } from './options';\n\nconst DefaultFormatLocalization: FormatLocalization = {\n  dateFormats: {\n    LTS: 'h:mm:ss T',\n    LT: 'h:mm T',\n    L: 'MM/dd/yyyy',\n    LL: 'MMMM d, yyyy',\n    LLL: 'MMMM d, yyyy h:mm T',\n    LLLL: 'dddd, MMMM d, yyyy h:mm T',\n  },\n  format: 'L LT',\n  locale: 'default',\n  hourCycle: undefined,\n  ordinal: (n) => {\n    const s = ['th', 'st', 'nd', 'rd'];\n    const v = n % 100;\n    return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`;\n  },\n};\n\nexport default { ...DefaultFormatLocalization };\n", "import { FormatLocalization } from './utilities/options';\nimport Namespace from './utilities/namespace';\nimport DefaultFormatLocalization from './utilities/default-format-localization';\n\ntype parsedTime = {\n  afternoon?: boolean;\n  year?: number;\n  month?: number;\n  day?: number;\n  hours?: number;\n  minutes?: number;\n  seconds?: number;\n  milliseconds?: number;\n  zone?: {\n    offset: number;\n  };\n};\n\nexport enum Unit {\n  seconds = 'seconds',\n  minutes = 'minutes',\n  hours = 'hours',\n  date = 'date',\n  month = 'month',\n  year = 'year',\n}\n\nconst twoDigitTemplate = {\n  month: '2-digit',\n  day: '2-digit',\n  year: 'numeric',\n  hour: '2-digit',\n  minute: '2-digit',\n  second: '2-digit',\n};\n\nexport interface DateTimeFormatOptions extends Intl.DateTimeFormatOptions {\n  timeStyle?: 'short' | 'medium' | 'long';\n  dateStyle?: 'short' | 'medium' | 'long' | 'full';\n  numberingSystem?: string;\n}\n\n/**\n * Returns an Intl format object based on the provided object\n * @param unit\n */\nexport const getFormatByUnit = (unit: Unit): object => {\n  switch (unit) {\n    case 'date':\n      return { dateStyle: 'short' };\n    case 'month':\n      return {\n        month: 'numeric',\n        year: 'numeric',\n      };\n    case 'year':\n      return { year: 'numeric' };\n  }\n};\n\n/**\n * Attempts to guess the hour cycle of the given local\n * @param locale\n */\nexport const guessHourCycle = (locale: string): Intl.LocaleHourCycleKey => {\n  if (!locale) return 'h12';\n\n  // noinspection SpellCheckingInspection\n  const template = {\n    hour: '2-digit',\n    minute: '2-digit',\n    numberingSystem: 'latn',\n  };\n\n  const dt = new DateTime().setLocalization({ locale });\n  dt.hours = 0;\n\n  const start = dt.parts(undefined, template).hour;\n\n  //midnight is 12 so en-US style 12 AM\n  if (start === '12') return 'h12';\n  //midnight is 24 is from 00-24\n  if (start === '24') return 'h24';\n\n  dt.hours = 23;\n  const end = dt.parts(undefined, template).hour;\n\n  //if midnight is 00 and hour 23 is 11 then\n  if (start === '00' && end === '11') return 'h11';\n\n  if (start === '00' && end === '23') return 'h23';\n\n  console.warn(\n    `couldn't determine hour cycle for ${locale}. start: ${start}. end: ${end}`\n  );\n\n  return undefined;\n};\n\ninterface FormatMatch {\n  parser: (obj: parsedTime, input: number) => void;\n  pattern?: RegExp;\n}\n\ninterface FormatMatchString {\n  parser: (obj: parsedTime, input: string) => void;\n  pattern?: RegExp;\n}\n\ninterface FormatExpression {\n  t: FormatMatchString;\n  T: FormatMatchString;\n  fff: FormatMatch;\n  s: FormatMatch;\n  ss: FormatMatch;\n  m: FormatMatch;\n  mm: FormatMatch;\n  H: FormatMatch;\n  h: FormatMatch;\n  HH: FormatMatch;\n  hh: FormatMatch;\n  d: FormatMatch;\n  dd: FormatMatch;\n  Do: FormatMatchString;\n  M: FormatMatch;\n  MM: FormatMatch;\n  MMM: FormatMatchString;\n  MMMM: FormatMatchString;\n  y: FormatMatch;\n  yy: FormatMatch;\n  yyyy: FormatMatch;\n}\n\n/**\n * For the most part this object behaves exactly the same way\n * as the native Date object with a little extra spice.\n */\nexport class DateTime extends Date {\n  localization: FormatLocalization = DefaultFormatLocalization;\n\n  /**\n   * Chainable way to set the {@link locale}\n   * @param value\n   * @deprecated use setLocalization with a FormatLocalization object instead\n   */\n  setLocale(value: string): this {\n    if (!this.localization) {\n      this.localization = DefaultFormatLocalization;\n      this.localization.locale = value;\n    }\n    return this;\n  }\n\n  /**\n   * Chainable way to set the {@link localization}\n   * @param value\n   */\n  setLocalization(value: FormatLocalization): this {\n    this.localization = value;\n    return this;\n  }\n\n  /**\n   * Converts a plain JS date object to a DateTime object.\n   * Doing this allows access to format, etc.\n   * @param  date\n   * @param locale this parameter is deprecated. Use formatLocalization instead.\n   * @param formatLocalization\n   */\n  static convert(\n    date: Date,\n    locale = 'default',\n    formatLocalization: FormatLocalization = undefined\n  ): DateTime {\n    if (!date) throw new Error(`A date is required`);\n\n    if (!formatLocalization) {\n      formatLocalization = DefaultFormatLocalization;\n      formatLocalization.locale = locale;\n    }\n\n    return new DateTime(\n      date.getFullYear(),\n      date.getMonth(),\n      date.getDate(),\n      date.getHours(),\n      date.getMinutes(),\n      date.getSeconds(),\n      date.getMilliseconds()\n    ).setLocalization(formatLocalization);\n  }\n\n  /**\n   * Native date manipulations are not pure functions. This function creates a duplicate of the DateTime object.\n   */\n  get clone() {\n    return new DateTime(\n      this.year,\n      this.month,\n      this.date,\n      this.hours,\n      this.minutes,\n      this.seconds,\n      this.getMilliseconds()\n    ).setLocalization(this.localization);\n  }\n\n  static isValid(d): boolean {\n    if (d === undefined || JSON.stringify(d) === 'null') return false;\n    if (d.constructor.name === DateTime.name) return true;\n    return false;\n  }\n\n  /**\n   * Sets the current date to the start of the {@link unit} provided\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).startOf('month')\n   * would return April 1, 2021, 12:00:00.000 AM (midnight)\n   * @param unit\n   * @param startOfTheWeek Allows for the changing the start of the week.\n   */\n  startOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    switch (unit) {\n      case 'seconds':\n        this.setMilliseconds(0);\n        break;\n      case 'minutes':\n        this.setSeconds(0, 0);\n        break;\n      case 'hours':\n        this.setMinutes(0, 0, 0);\n        break;\n      case 'date':\n        this.setHours(0, 0, 0, 0);\n        break;\n      case 'weekDay': {\n        this.startOf(Unit.date);\n        if (this.weekDay === startOfTheWeek) break;\n        const goBack = (this.weekDay - startOfTheWeek + 7) % 7;\n        this.manipulate(goBack * -1, Unit.date);\n        break;\n      }\n      case 'month':\n        this.startOf(Unit.date);\n        this.setDate(1);\n        break;\n      case 'year':\n        this.startOf(Unit.date);\n        this.setMonth(0, 1);\n        break;\n    }\n    return this;\n  }\n\n  /**\n   * Sets the current date to the end of the {@link unit} provided\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).endOf('month')\n   * would return April 30, 2021, 11:59:59.999 PM\n   * @param unit\n   * @param startOfTheWeek\n   */\n  endOf(unit: Unit | 'weekDay', startOfTheWeek = 0): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    switch (unit) {\n      case 'seconds':\n        this.setMilliseconds(999);\n        break;\n      case 'minutes':\n        this.setSeconds(59, 999);\n        break;\n      case 'hours':\n        this.setMinutes(59, 59, 999);\n        break;\n      case 'date':\n        this.setHours(23, 59, 59, 999);\n        break;\n      case 'weekDay': {\n        this.endOf(Unit.date);\n        const endOfWeek = 6 + startOfTheWeek;\n        if (this.weekDay === endOfWeek) break;\n        this.manipulate(endOfWeek - this.weekDay, Unit.date);\n        break;\n      }\n      case 'month':\n        this.endOf(Unit.date);\n        this.manipulate(1, Unit.month);\n        this.setDate(0);\n        break;\n      case 'year':\n        this.endOf(Unit.date);\n        this.setMonth(11, 31);\n        break;\n    }\n    return this;\n  }\n\n  /**\n   * Change a {@link unit} value. Value can be positive or negative\n   * Example: Consider a date of \"April 30, 2021, 11:45:32.984 AM\" => new DateTime(2021, 3, 30, 11, 45, 32, 984).manipulate(1, 'month')\n   * would return May 30, 2021, 11:45:32.984 AM\n   * @param value A positive or negative number\n   * @param unit\n   */\n  manipulate(value: number, unit: Unit): this {\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    this[unit] += value;\n    return this;\n  }\n\n  /**\n   * Return true if {@link compare} is before this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isBefore(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() < compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    return (\n      this.clone.startOf(unit).valueOf() < compare.clone.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Return true if {@link compare} is after this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isAfter(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() > compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    return (\n      this.clone.startOf(unit).valueOf() > compare.clone.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Return true if {@link compare} is same this date\n   * @param compare The Date/DateTime to compare\n   * @param unit If provided, uses {@link startOf} for\n   * comparison.\n   */\n  isSame(compare: DateTime, unit?: Unit): boolean {\n    // If the comparisons is undefined, return false\n    if (!DateTime.isValid(compare)) return false;\n\n    if (!unit) return this.valueOf() === compare.valueOf();\n    if (this[unit] === undefined)\n      throw new Error(`Unit '${unit}' is not valid`);\n    compare = DateTime.convert(compare);\n    return (\n      this.clone.startOf(unit).valueOf() === compare.startOf(unit).valueOf()\n    );\n  }\n\n  /**\n   * Check if this is between two other DateTimes, optionally looking at unit scale. The match is exclusive.\n   * @param left\n   * @param right\n   * @param unit.\n   * @param inclusivity. A [ indicates inclusion of a value. A ( indicates exclusion.\n   * If the inclusivity parameter is used, both indicators must be passed.\n   */\n  isBetween(\n    left: DateTime,\n    right: DateTime,\n    unit?: Unit,\n    inclusivity: '()' | '[]' | '(]' | '[)' = '()'\n  ): boolean {\n    // If one of the comparisons is undefined, return false\n    if (!DateTime.isValid(left) || !DateTime.isValid(right)) return false;\n    // If a unit is provided and is not a valid property of the DateTime object, throw an error\n    if (unit && this[unit] === undefined) {\n      throw new Error(`Unit '${unit}' is not valid`);\n    }\n\n    const leftInclusivity = inclusivity[0] === '(';\n    const rightInclusivity = inclusivity[1] === ')';\n\n    const isLeftInRange = leftInclusivity\n      ? this.isAfter(left, unit)\n      : !this.isBefore(left, unit);\n    const isRightInRange = rightInclusivity\n      ? this.isBefore(right, unit)\n      : !this.isAfter(right, unit);\n\n    return isLeftInRange && isRightInRange;\n  }\n\n  /**\n   * Returns flattened object of the date. Does not include literals\n   * @param locale\n   * @param template\n   */\n  parts(\n    locale = this.localization.locale,\n    template: Record<string, unknown> = { dateStyle: 'full', timeStyle: 'long' }\n  ): Record<string, string> {\n    const parts = {};\n    new Intl.DateTimeFormat(locale, template)\n      .formatToParts(this)\n      .filter((x) => x.type !== 'literal')\n      .forEach((x) => (parts[x.type] = x.value));\n    return parts;\n  }\n\n  /**\n   * Shortcut to Date.getSeconds()\n   */\n  get seconds(): number {\n    return this.getSeconds();\n  }\n\n  /**\n   * Shortcut to Date.setSeconds()\n   */\n  set seconds(value: number) {\n    this.setSeconds(value);\n  }\n\n  /**\n   * Returns two digit hours\n   */\n  get secondsFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).second;\n  }\n\n  /**\n   * Shortcut to Date.getMinutes()\n   */\n  get minutes(): number {\n    return this.getMinutes();\n  }\n\n  /**\n   * Shortcut to Date.setMinutes()\n   */\n  set minutes(value: number) {\n    this.setMinutes(value);\n  }\n\n  /**\n   * Returns two digit minutes\n   */\n  get minutesFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).minute;\n  }\n\n  /**\n   * Shortcut to Date.getHours()\n   */\n  get hours(): number {\n    return this.getHours();\n  }\n\n  /**\n   * Shortcut to Date.setHours()\n   */\n  set hours(value: number) {\n    this.setHours(value);\n  }\n\n  /**\n   * Returns two digit hour, e.g. 01...10\n   * @param hourCycle Providing an hour cycle will change 00 to 24 depending on the given value.\n   */\n  getHoursFormatted(hourCycle: Intl.LocaleHourCycleKey = 'h12') {\n    return this.parts(undefined, { ...twoDigitTemplate, hourCycle: hourCycle })\n      .hour;\n  }\n\n  /**\n   * Get the meridiem of the date. E.g. AM or PM.\n   * If the {@link locale} provides a \"dayPeriod\" then this will be returned,\n   * otherwise it will return AM or PM.\n   * @param locale\n   */\n  meridiem(locale: string = this.localization.locale): string {\n    return new Intl.DateTimeFormat(locale, {\n      hour: 'numeric',\n      hour12: true,\n    })\n      .formatToParts(this)\n      .find((p) => p.type === 'dayPeriod')?.value;\n  }\n\n  /**\n   * Shortcut to Date.getDate()\n   */\n  get date(): number {\n    return this.getDate();\n  }\n\n  /**\n   * Shortcut to Date.setDate()\n   */\n  set date(value: number) {\n    this.setDate(value);\n  }\n\n  /**\n   * Return two digit date\n   */\n  get dateFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).day;\n  }\n\n  /**\n   * Shortcut to Date.getDay()\n   */\n  get weekDay(): number {\n    return this.getDay();\n  }\n\n  /**\n   * Shortcut to Date.getMonth()\n   */\n  get month(): number {\n    return this.getMonth();\n  }\n\n  /**\n   * Shortcut to Date.setMonth()\n   */\n  set month(value: number) {\n    const targetMonth = new Date(this.year, value + 1);\n    targetMonth.setDate(0);\n    const endOfMonth = targetMonth.getDate();\n    if (this.date > endOfMonth) {\n      this.date = endOfMonth;\n    }\n    this.setMonth(value);\n  }\n\n  /**\n   * Return two digit, human expected month. E.g. January = 1, December = 12\n   */\n  get monthFormatted(): string {\n    return this.parts(undefined, twoDigitTemplate).month;\n  }\n\n  /**\n   * Shortcut to Date.getFullYear()\n   */\n  get year(): number {\n    return this.getFullYear();\n  }\n\n  /**\n   * Shortcut to Date.setFullYear()\n   */\n  set year(value: number) {\n    this.setFullYear(value);\n  }\n\n  // borrowed a bunch of stuff from Luxon\n  /**\n   * Gets the week of the year\n   */\n  get week(): number {\n    const ordinal = this.computeOrdinal(),\n      weekday = this.getUTCDay();\n\n    let weekNumber = Math.floor((ordinal - weekday + 10) / 7);\n\n    if (weekNumber < 1) {\n      weekNumber = this.weeksInWeekYear();\n    } else if (weekNumber > this.weeksInWeekYear()) {\n      weekNumber = 1;\n    }\n\n    return weekNumber;\n  }\n\n  /**\n   * Returns the number of weeks in the year\n   */\n  weeksInWeekYear() {\n    const p1 =\n        (this.year +\n          Math.floor(this.year / 4) -\n          Math.floor(this.year / 100) +\n          Math.floor(this.year / 400)) %\n        7,\n      last = this.year - 1,\n      p2 =\n        (last +\n          Math.floor(last / 4) -\n          Math.floor(last / 100) +\n          Math.floor(last / 400)) %\n        7;\n    return p1 === 4 || p2 === 3 ? 53 : 52;\n  }\n\n  dateToDataValue(): string {\n    if (!DateTime.isValid(this)) return '';\n\n    return `${this.year}-${this.month.toString().padStart(2, '0')}-${this.date\n      .toString()\n      .padStart(2, '0')}`;\n  }\n\n  /**\n   * Returns true or false depending on if the year is a leap year or not.\n   */\n  get isLeapYear() {\n    return (\n      this.year % 4 === 0 && (this.year % 100 !== 0 || this.year % 400 === 0)\n    );\n  }\n\n  private computeOrdinal() {\n    return (\n      this.date +\n      (this.isLeapYear ? this.leapLadder : this.nonLeapLadder)[this.month]\n    );\n  }\n\n  private nonLeapLadder = [\n    0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n  ];\n  private leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\n  //#region CDF stuff\n\n  private dateTimeRegex =\n    //is regex cannot be simplified beyond what it already is\n    /(\\[[^[\\]]*])|y{1,4}|M{1,4}|d{1,4}|H{1,2}|h{1,2}|t|T|m{1,2}|s{1,2}|f{3}/g; //NOSONAR\n\n  private formattingTokens =\n    /(\\[[^[\\]]*])|([-_:/.,()\\s]+)|(T|t|yyyy|yy?|MM?M?M?|Do|dd?d?d?|hh?|HH?|mm?|ss?)/g; //NOSONAR is regex cannot be simplified beyond what it already is\n\n  /**\n   * Returns a list of month values based on the current locale\n   */\n  private getAllMonths(\n    format: '2-digit' | 'numeric' | 'long' | 'short' | 'narrow' = 'long'\n  ) {\n    const applyFormat = new Intl.DateTimeFormat(this.localization.locale, {\n      month: format,\n    }).format;\n    return [...Array(12).keys()].map((m) => applyFormat(new Date(2021, m)));\n  }\n\n  /**\n   * Replaces an expanded token set (e.g. LT/LTS)\n   */\n  private replaceTokens(formatStr, formats) {\n    /***\n     * _ => match\n     * a => first capture group. Anything between [ and ]\n     * b => second capture group\n     */\n    return formatStr.replace(\n      /(\\[[^[\\]]*])|(LTS?|l{1,4}|L{1,4})/g,\n      (_, a, b) => {\n        const B = b && b.toUpperCase();\n        return a || formats[B] || DefaultFormatLocalization.dateFormats[B];\n      }\n    );\n  }\n\n  private match2 = /\\d\\d/; // 00 - 99\n  private match3 = /\\d{3}/; // 000 - 999\n  private match4 = /\\d{4}/; // 0000 - 9999\n  private match1to2 = /\\d\\d?/; // 0 - 99\n  private matchSigned = /[+-]?\\d+/; // -inf - inf\n  private matchOffset = /[+-]\\d\\d:?(\\d\\d)?|Z/; // +00:00 -00:00 +0000 or -0000 +00 or Z\n  private matchWord = /[^\\d_:/,\\-()\\s]+/; // Word\n\n  private parseTwoDigitYear(input: number) {\n    return input + (input > 68 ? 1900 : 2000);\n  }\n\n  private offsetFromString(input: string) {\n    if (!input) return 0;\n    if (input === 'Z') return 0;\n    const [first, second, third] = input.match(/([+-]|\\d\\d)/g);\n    const minutes = +second * 60 + (+third || 0);\n    const signed = first === '+' ? -minutes : minutes;\n    return minutes === 0 ? 0 : signed; // eslint-disable-line no-nested-ternary\n  }\n\n  /**\n   * z = -4, zz = -04, zzz = -0400\n   * @param date\n   * @param style\n   * @private\n   */\n  private zoneInformation(date: DateTime, style: 'z' | 'zz' | 'zzz') {\n    let name = date\n      .parts(this.localization.locale, { timeZoneName: 'longOffset' })\n      .timeZoneName.replace('GMT', '')\n      .replace(':', '');\n\n    const negative = name.includes('-');\n\n    name = name.replace('-', '');\n\n    if (style === 'z') name = name.substring(1, 2);\n    else if (style === 'zz') name = name.substring(0, 2);\n\n    return `${negative ? '-' : ''}${name}`;\n  }\n\n  private zoneExpressions = [\n    this.matchOffset,\n    (obj, input) => {\n      obj.offset = this.offsetFromString(input);\n    },\n  ];\n\n  private addInput(property) {\n    return (obj, input) => {\n      obj[property] = +input;\n    };\n  }\n\n  private getLocaleAfternoon(): string {\n    return new Intl.DateTimeFormat(this.localization.locale, {\n      hour: 'numeric',\n      hour12: true,\n    })\n      .formatToParts(new Date(2022, 3, 4, 13))\n      .find((p) => p.type === 'dayPeriod')\n      ?.value?.replace(/\\s+/g, ' ');\n  }\n\n  private meridiemMatch(input: string) {\n    return input.toLowerCase() === this.getLocaleAfternoon().toLowerCase();\n  }\n\n  private expressions: FormatExpression = {\n    t: {\n      pattern: undefined, //this.matchWord,\n      parser: (obj, input) => {\n        obj.afternoon = this.meridiemMatch(input);\n      },\n    },\n    T: {\n      pattern: undefined, //this.matchWord,\n      parser: (obj, input) => {\n        obj.afternoon = this.meridiemMatch(input);\n      },\n    },\n    fff: {\n      pattern: this.match3,\n      parser: (obj, input) => {\n        obj.milliseconds = +input;\n      },\n    },\n    s: {\n      pattern: this.match1to2,\n      parser: this.addInput('seconds'),\n    },\n    ss: {\n      pattern: this.match1to2,\n      parser: this.addInput('seconds'),\n    },\n    m: {\n      pattern: this.match1to2,\n      parser: this.addInput('minutes'),\n    },\n    mm: {\n      pattern: this.match1to2,\n      parser: this.addInput('minutes'),\n    },\n    H: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    h: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    HH: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    hh: {\n      pattern: this.match1to2,\n      parser: this.addInput('hours'),\n    },\n    d: {\n      pattern: this.match1to2,\n      parser: this.addInput('day'),\n    },\n    dd: {\n      pattern: this.match2,\n      parser: this.addInput('day'),\n    },\n    Do: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        obj.day = +(input.match(/\\d+/)[0] || 1);\n        if (!this.localization.ordinal) return;\n        for (let i = 1; i <= 31; i += 1) {\n          if (this.localization.ordinal(i).replace(/[[\\]]/g, '') === input) {\n            obj.day = i;\n          }\n        }\n      },\n    },\n    M: {\n      pattern: this.match1to2,\n      parser: this.addInput('month'),\n    },\n    MM: {\n      pattern: this.match2,\n      parser: this.addInput('month'),\n    },\n    MMM: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        const months = this.getAllMonths();\n        const monthsShort = this.getAllMonths('short');\n        const matchIndex =\n          (monthsShort || months.map((_) => _.slice(0, 3))).indexOf(input) + 1;\n        if (matchIndex < 1) {\n          throw new Error();\n        }\n        obj.month = matchIndex % 12 || matchIndex;\n      },\n    },\n    MMMM: {\n      pattern: this.matchWord,\n      parser: (obj, input) => {\n        const months = this.getAllMonths();\n        const matchIndex = months.indexOf(input) + 1;\n        if (matchIndex < 1) {\n          throw new Error();\n        }\n        obj.month = matchIndex % 12 || matchIndex;\n      },\n    },\n    y: {\n      pattern: this.matchSigned,\n      parser: this.addInput('year'),\n    },\n    yy: {\n      pattern: this.match2,\n      parser: (obj, input) => {\n        obj.year = this.parseTwoDigitYear(+input);\n      },\n    },\n    yyyy: {\n      pattern: this.match4,\n      parser: this.addInput('year'),\n    },\n    // z: this.zoneExpressions,\n    // zz: this.zoneExpressions,\n    // zzz: this.zoneExpressions\n  };\n\n  private correctHours(time) {\n    const { afternoon } = time;\n    if (afternoon !== undefined) {\n      const { hours } = time;\n      if (afternoon) {\n        if (hours < 12) {\n          time.hours += 12;\n        }\n      } else if (hours === 12) {\n        time.hours = 0;\n      }\n      delete time.afternoon;\n    }\n  }\n\n  private makeParser(format: string) {\n    format = this.replaceTokens(format, this.localization.dateFormats);\n    const matchArray = format.match(this.formattingTokens);\n    const { length } = matchArray;\n    const expressionArray: (FormatMatch | string)[] = [];\n    for (let i = 0; i < length; i += 1) {\n      const token = matchArray[i];\n      const expression = this.expressions[token] as FormatMatch;\n      if (expression?.parser) {\n        expressionArray[i] = expression;\n      } else {\n        expressionArray[i] = (token as string).replace(/^\\[[^[\\]]*]$/g, '');\n      }\n    }\n\n    return (input: string): parsedTime => {\n      const time = {\n        hours: 0,\n        minutes: 0,\n        seconds: 0,\n        milliseconds: 0,\n      };\n      for (let i = 0, start = 0; i < length; i += 1) {\n        const token = expressionArray[i];\n        if (typeof token === 'string') {\n          start += token.length;\n        } else {\n          const part = input.slice(start);\n          let value = part;\n\n          if (token.pattern) {\n            const match = token.pattern.exec(part);\n            value = match[0];\n          }\n          token.parser.call(this, time, value);\n          input = input.replace(value, '');\n        }\n      }\n      this.correctHours(time);\n      return time;\n    };\n  }\n\n  /**\n   * Attempts to create a DateTime from a string.\n   * @param input date as string\n   * @param localization provides the date template the string is in via the format property\n   */\n  //eslint-disable-next-line @typescript-eslint/no-unused-vars\n  static fromString(input: string, localization: FormatLocalization): DateTime {\n    if (!localization?.format) {\n      Namespace.errorMessages.customDateFormatError('No format was provided');\n    }\n    try {\n      const dt = new DateTime();\n      dt.setLocalization(localization);\n      if (['x', 'X'].indexOf(localization.format) > -1)\n        return new DateTime((localization.format === 'X' ? 1000 : 1) * +input);\n\n      input = input.replace(/\\s+/g, ' ');\n      const parser = dt.makeParser(localization.format);\n      const { year, month, day, hours, minutes, seconds, milliseconds, zone } =\n        parser(input);\n      const d = day || (!year && !month ? dt.getDate() : 1);\n      const y = year || dt.getFullYear();\n      let M = 0;\n      if (!(year && !month)) {\n        M = month > 0 ? month - 1 : dt.getMonth();\n      }\n      if (zone) {\n        return new DateTime(\n          Date.UTC(\n            y,\n            M,\n            d,\n            hours,\n            minutes,\n            seconds,\n            milliseconds + zone.offset * 60 * 1000\n          )\n        );\n      }\n      return new DateTime(y, M, d, hours, minutes, seconds, milliseconds);\n    } catch (e) {\n      Namespace.errorMessages.customDateFormatError(\n        `Unable to parse provided input: ${input}, format: ${localization.format}`\n      );\n    }\n  }\n\n  /**\n   * Returns a string format.\n   * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n   * for valid templates and locale objects\n   * @param template An optional object. If provided, method will use Intl., otherwise the localizations format properties\n   * @param locale Can be a string or an array of strings. Uses browser defaults otherwise.\n   */\n  format(\n    template?: DateTimeFormatOptions | string,\n    locale = this.localization.locale\n  ): string {\n    if (template && typeof template === 'object')\n      return new Intl.DateTimeFormat(locale, template).format(this);\n\n    const formatString = this.replaceTokens(\n      //try template first\n      template ||\n        //otherwise try localization format\n        this.localization.format ||\n        //otherwise try date + time\n        `${DefaultFormatLocalization.dateFormats.L}, ${DefaultFormatLocalization.dateFormats.LT}`,\n      this.localization.dateFormats\n    );\n\n    const formatter = (template) =>\n      new Intl.DateTimeFormat(this.localization.locale, template).format(this);\n\n    if (!this.localization.hourCycle)\n      this.localization.hourCycle = guessHourCycle(this.localization.locale);\n\n    //if the format asks for a twenty-four-hour string but the hour cycle is not, then make a base guess\n    const HHCycle = this.localization.hourCycle.startsWith('h1')\n      ? 'h24'\n      : this.localization.hourCycle;\n    const hhCycle = this.localization.hourCycle.startsWith('h2')\n      ? 'h12'\n      : this.localization.hourCycle;\n\n    const matches = {\n      y: this.year,\n      yy: formatter({ year: '2-digit' }),\n      yyyy: this.year,\n      M: formatter({ month: 'numeric' }),\n      MM: this.monthFormatted,\n      MMM: this.getAllMonths('short')[this.getMonth()],\n      MMMM: this.getAllMonths()[this.getMonth()],\n      d: this.date,\n      dd: this.dateFormatted,\n      ddd: formatter({ weekday: 'short' }),\n      dddd: formatter({ weekday: 'long' }),\n      H: this.getHours(),\n      HH: this.getHoursFormatted(HHCycle),\n      h: this.hours > 12 ? this.hours - 12 : this.hours,\n      hh: this.getHoursFormatted(hhCycle),\n      t: this.meridiem(),\n      T: this.meridiem().toUpperCase(),\n      m: this.minutes,\n      mm: this.minutesFormatted,\n      s: this.seconds,\n      ss: this.secondsFormatted,\n      fff: this.getMilliseconds(),\n      // z: this.zoneInformation(dateTime, 'z'), //-4\n      // zz: this.zoneInformation(dateTime, 'zz'), //-04\n      // zzz: this.zoneInformation(dateTime, 'zzz') //-0400\n    };\n\n    return formatString\n      .replace(this.dateTimeRegex, (match, $1) => {\n        return $1 || matches[match];\n      })\n      .replace(/\\[/g, '')\n      .replace(/]/g, '');\n  }\n\n  //#endregion CDF stuff\n}\n", "//eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport declare type Constructable<T> = new (...args: any[]) => T;\n\nclass ServiceLocator {\n  private cache: Map<Constructable<unknown>, unknown | symbol> = new Map();\n\n  locate<T>(identifier: Constructable<T>): T {\n    const service = this.cache.get(identifier);\n    if (service) return service as T;\n    const value = new identifier();\n    this.cache.set(identifier, value);\n    return value;\n  }\n}\nexport const setupServiceLocator = () => {\n  serviceLocator = new ServiceLocator();\n};\n\nexport let serviceLocator: ServiceLocator;\n", "import { Unit } from '../datetime';\nimport Namespace from './namespace';\nimport ViewMode from './view-mode';\n\nconst CalendarModes: {\n  name: keyof ViewMode;\n  className: string;\n  unit: Unit;\n  step: number;\n}[] = [\n  {\n    name: 'calendar',\n    className: Namespace.css.daysContainer,\n    unit: Unit.month,\n    step: 1,\n  },\n  {\n    name: 'months',\n    className: Namespace.css.monthsContainer,\n    unit: Unit.year,\n    step: 1,\n  },\n  {\n    name: 'years',\n    className: Namespace.css.yearsContainer,\n    unit: Unit.year,\n    step: 10,\n  },\n  {\n    name: 'decades',\n    className: Namespace.css.decadesContainer,\n    unit: Unit.year,\n    step: 100,\n  },\n];\n\nexport default CalendarModes;\n", "import { DateTime } from '../datetime';\nimport CalendarModes from './calendar-modes';\nimport ViewMode from './view-mode';\nimport Options from './options';\n\nexport class OptionsStore {\n  options: Options;\n  element: HTMLElement;\n  toggle: HTMLElement;\n  input: HTMLInputElement;\n  unset: boolean;\n  private _currentCalendarViewMode = 0;\n\n  get currentCalendarViewMode() {\n    return this._currentCalendarViewMode;\n  }\n\n  set currentCalendarViewMode(value) {\n    this._currentCalendarViewMode = value;\n    this.currentView = CalendarModes[value].name;\n  }\n\n  _viewDate = new DateTime();\n\n  get viewDate() {\n    return this._viewDate;\n  }\n\n  set viewDate(v) {\n    this._viewDate = v;\n    if (this.options) this.options.viewDate = v;\n  }\n\n  /**\n   * When switching back to the calendar from the clock,\n   * this sets currentView to the correct calendar view.\n   */\n  refreshCurrentView() {\n    this.currentView = CalendarModes[this.currentCalendarViewMode].name;\n  }\n\n  minimumCalendarViewMode = 0;\n  currentView: keyof ViewMode = 'calendar';\n\n  get isTwelveHour() {\n    return ['h12', 'h11'].includes(this.options.localization.hourCycle);\n  }\n}\n", "import { DateTime, Unit } from './datetime';\nimport { serviceLocator } from './utilities/service-locator';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Main class for date validation rules based on the options provided.\n */\nexport default class Validation {\n  private optionsStore: OptionsStore;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n  }\n\n  /**\n   * Checks to see if the target date is valid based on the rules provided in the options.\n   * Granularity can be provided to check portions of the date instead of the whole.\n   * @param targetDate\n   * @param granularity\n   */\n  isValid(targetDate: DateTime, granularity?: Unit): boolean {\n    if (!this._enabledDisabledDatesIsValid(granularity, targetDate))\n      return false;\n\n    if (\n      granularity !== Unit.month &&\n      granularity !== Unit.year &&\n      this.optionsStore.options.restrictions.daysOfWeekDisabled?.length > 0 &&\n      this.optionsStore.options.restrictions.daysOfWeekDisabled.indexOf(\n        targetDate.weekDay\n      ) !== -1\n    )\n      return false;\n\n    if (!this._minMaxIsValid(granularity, targetDate)) return false;\n\n    if (\n      granularity === Unit.hours ||\n      granularity === Unit.minutes ||\n      granularity === Unit.seconds\n    ) {\n      if (!this._enabledDisabledHoursIsValid(targetDate)) return false;\n\n      if (\n        this.optionsStore.options.restrictions.disabledTimeIntervals?.filter(\n          (internal) => targetDate.isBetween(internal.from, internal.to)\n        ).length !== 0\n      )\n        return false;\n    }\n\n    return true;\n  }\n\n  private _enabledDisabledDatesIsValid(\n    granularity: Unit,\n    targetDate: DateTime\n  ): boolean {\n    if (granularity !== Unit.date) return true;\n\n    if (\n      this.optionsStore.options.restrictions.disabledDates.length > 0 &&\n      this._isInDisabledDates(targetDate)\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.enabledDates.length > 0 &&\n      !this._isInEnabledDates(targetDate)\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks to see if the disabledDates option is in use and returns true (meaning invalid)\n   * if the `testDate` is with in the array. Granularity is by date.\n   * @param testDate\n   * @private\n   */\n  private _isInDisabledDates(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.disabledDates ||\n      this.optionsStore.options.restrictions.disabledDates.length === 0\n    )\n      return false;\n\n    return !!this.optionsStore.options.restrictions.disabledDates.find((x) =>\n      x.isSame(testDate, Unit.date)\n    );\n  }\n\n  /**\n   * Checks to see if the enabledDates option is in use and returns true (meaning valid)\n   * if the `testDate` is with in the array. Granularity is by date.\n   * @param testDate\n   * @private\n   */\n  private _isInEnabledDates(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.enabledDates ||\n      this.optionsStore.options.restrictions.enabledDates.length === 0\n    )\n      return true;\n\n    return !!this.optionsStore.options.restrictions.enabledDates.find((x) =>\n      x.isSame(testDate, Unit.date)\n    );\n  }\n\n  private _minMaxIsValid(granularity: Unit, targetDate: DateTime) {\n    if (\n      this.optionsStore.options.restrictions.minDate &&\n      targetDate.isBefore(\n        this.optionsStore.options.restrictions.minDate,\n        granularity\n      )\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.maxDate &&\n      targetDate.isAfter(\n        this.optionsStore.options.restrictions.maxDate,\n        granularity\n      )\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private _enabledDisabledHoursIsValid(targetDate: DateTime) {\n    if (\n      this.optionsStore.options.restrictions.disabledHours.length > 0 &&\n      this._isInDisabledHours(targetDate)\n    ) {\n      return false;\n    }\n\n    // noinspection RedundantIfStatementJS\n    if (\n      this.optionsStore.options.restrictions.enabledHours.length > 0 &&\n      !this._isInEnabledHours(targetDate)\n    ) {\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Checks to see if the disabledHours option is in use and returns true (meaning invalid)\n   * if the `testDate` is with in the array. Granularity is by hours.\n   * @param testDate\n   * @private\n   */\n  private _isInDisabledHours(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.disabledHours ||\n      this.optionsStore.options.restrictions.disabledHours.length === 0\n    )\n      return false;\n\n    const formattedDate = testDate.hours;\n    return this.optionsStore.options.restrictions.disabledHours.includes(\n      formattedDate\n    );\n  }\n\n  /**\n   * Checks to see if the enabledHours option is in use and returns true (meaning valid)\n   * if the `testDate` is with in the array. Granularity is by hours.\n   * @param testDate\n   * @private\n   */\n  private _isInEnabledHours(testDate: DateTime) {\n    if (\n      !this.optionsStore.options.restrictions.enabledHours ||\n      this.optionsStore.options.restrictions.enabledHours.length === 0\n    )\n      return true;\n\n    const formattedDate = testDate.hours;\n    return this.optionsStore.options.restrictions.enabledHours.includes(\n      formattedDate\n    );\n  }\n\n  dateRangeIsValid(dates: DateTime[], index: number, target: DateTime) {\n    // if we're not using the option, then return valid\n    if (!this.optionsStore.options.dateRange) return true;\n\n    // if we've only selected 0..1 dates, and we're not setting the end date\n    // then return valid. We only want to validate the range if both are selected,\n    // because the other validation on the target has already occurred.\n    if (dates.length !== 2 && index !== 1) return true;\n\n    // initialize start date\n    const start = dates[0].clone;\n    // check if start date is not the same as target date\n    if (start.isSame(target, Unit.date)) return true;\n\n    // add one day to start; start has already been validated\n    start.manipulate(1, Unit.date);\n\n    // check each date in the range to make sure it's valid\n    while (!start.isSame(target, Unit.date)) {\n      const valid = this.isValid(start, Unit.date);\n      if (!valid) return false;\n      start.manipulate(1, Unit.date);\n    }\n\n    return true;\n  }\n}\n", "import { DateTime, Unit } from '../datetime';\nimport ActionTypes from './action-types';\nimport { BaseEvent } from './event-types';\n\nexport type ViewUpdateValues = Unit | 'decade' | 'clock' | 'calendar' | 'all';\n\nclass EventEmitter<T> {\n  private subscribers: ((value?: T) => void)[] = [];\n\n  subscribe(callback: (value: T) => void) {\n    this.subscribers.push(callback);\n    return this.unsubscribe.bind(this, this.subscribers.length - 1);\n  }\n\n  unsubscribe(index: number) {\n    this.subscribers.splice(index, 1);\n  }\n\n  emit(value?: T) {\n    this.subscribers.forEach((callback) => {\n      callback(value);\n    });\n  }\n\n  destroy() {\n    this.subscribers = null;\n    this.subscribers = [];\n  }\n}\n\nexport class EventEmitters {\n  triggerEvent = new EventEmitter<BaseEvent>();\n  viewUpdate = new EventEmitter();\n  updateDisplay = new EventEmitter<ViewUpdateValues>();\n  action = new EventEmitter<{ e: any; action?: ActionTypes }>(); //eslint-disable-line @typescript-eslint/no-explicit-any\n  updateViewDate = new EventEmitter<DateTime>();\n\n  destroy() {\n    this.triggerEvent.destroy();\n    this.viewUpdate.destroy();\n    this.updateDisplay.destroy();\n    this.action.destroy();\n    this.updateViewDate.destroy();\n  }\n}\n", "import Options, { Localization } from './options';\nimport { DateTime } from '../datetime';\nimport DefaultFormatLocalization from './default-format-localization';\n\nconst defaultEnLocalization: Localization = {\n  clear: 'Clear selection',\n  close: 'Close the picker',\n  dateFormats: DefaultFormatLocalization.dateFormats,\n  dayViewHeaderFormat: { month: 'long', year: '2-digit' },\n  decrementHour: 'Decrement Hour',\n  decrementMinute: 'Decrement Minute',\n  decrementSecond: 'Decrement Second',\n  format: DefaultFormatLocalization.format,\n  hourCycle: DefaultFormatLocalization.hourCycle,\n  incrementHour: 'Increment Hour',\n  incrementMinute: 'Increment Minute',\n  incrementSecond: 'Increment Second',\n  locale: DefaultFormatLocalization.locale,\n  maxWeekdayLength: 0,\n  nextCentury: 'Next Century',\n  nextDecade: 'Next Decade',\n  nextMonth: 'Next Month',\n  nextYear: 'Next Year',\n  ordinal: DefaultFormatLocalization.ordinal,\n  pickHour: 'Pick Hour',\n  pickMinute: 'Pick Minute',\n  pickSecond: 'Pick Second',\n  previousCentury: 'Previous Century',\n  previousDecade: 'Previous Decade',\n  previousMonth: 'Previous Month',\n  previousYear: 'Previous Year',\n  selectDate: 'Select Date',\n  selectDecade: 'Select Decade',\n  selectMonth: 'Select Month',\n  selectTime: 'Select Time',\n  selectYear: 'Select Year',\n  startOfTheWeek: 0,\n  today: 'Go to today',\n  toggleMeridiem: 'Toggle Meridiem',\n  toggleAriaLabel: 'Change date',\n};\n\nconst DefaultOptions: Options = {\n  allowInputToggle: false,\n  container: undefined,\n  dateRange: false,\n  debug: false,\n  defaultDate: undefined,\n  display: {\n    icons: {\n      type: 'icons',\n      time: 'fa-solid fa-clock',\n      date: 'fa-solid fa-calendar',\n      up: 'fa-solid fa-arrow-up',\n      down: 'fa-solid fa-arrow-down',\n      previous: 'fa-solid fa-chevron-left',\n      next: 'fa-solid fa-chevron-right',\n      today: 'fa-solid fa-calendar-check',\n      clear: 'fa-solid fa-trash',\n      close: 'fa-solid fa-xmark',\n    },\n    sideBySide: false,\n    calendarWeeks: false,\n    viewMode: 'calendar',\n    toolbarPlacement: 'bottom',\n    keepOpen: false,\n    buttons: {\n      today: false,\n      clear: false,\n      close: false,\n    },\n    components: {\n      calendar: true,\n      date: true,\n      month: true,\n      year: true,\n      decades: true,\n      clock: true,\n      hours: true,\n      minutes: true,\n      seconds: false,\n      useTwentyfourHour: undefined,\n    },\n    inline: false,\n    theme: 'auto',\n    placement: 'bottom',\n    keyboardNavigation: true,\n  },\n  keepInvalid: false,\n  localization: defaultEnLocalization,\n  meta: {},\n  multipleDates: false,\n  multipleDatesSeparator: '; ',\n  promptTimeOnDateChange: false,\n  promptTimeOnDateChangeTransitionDelay: 200,\n  restrictions: {\n    minDate: undefined,\n    maxDate: undefined,\n    disabledDates: [],\n    enabledDates: [],\n    daysOfWeekDisabled: [],\n    disabledTimeIntervals: [],\n    disabledHours: [],\n    enabledHours: [],\n  },\n  stepping: 1,\n  useCurrent: true,\n  viewDate: new DateTime(),\n};\n\nexport default DefaultOptions;\nexport const DefaultEnLocalization = { ...defaultEnLocalization };\n", "import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport { FormatLocalization } from './options';\nimport DefaultFormatLocalization from './default-format-localization';\n\n/**\n * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n * @param d If a string will attempt creating a date from it.\n * @param localization object containing locale and format settings. Only used with the custom formats\n * @private\n */\nexport function tryConvertToDateTime(\n  this: void,\n  d: DateTime | Date | string,\n  localization: FormatLocalization\n): DateTime | null {\n  if (!d) return null;\n  if (d.constructor.name === DateTime.name) return d as DateTime;\n  if (d.constructor.name === Date.name) {\n    return DateTime.convert(d as Date);\n  }\n  if (typeof d === typeof '') {\n    const dateTime = DateTime.fromString(d as unknown as string, localization);\n    if (JSON.stringify(dateTime) === 'null') {\n      return null;\n    }\n    return dateTime;\n  }\n  return null;\n}\n\n/**\n * Attempts to convert `d` to a DateTime object\n * @param d value to convert\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param localization object containing locale and format settings. Only used with the custom formats\n */\nexport function convertToDateTime(\n  this: void,\n  d: DateTime | Date | string,\n  optionName: string,\n  localization: FormatLocalization\n): DateTime {\n  if (typeof d === typeof '' && optionName !== 'input') {\n    Namespace.errorMessages.dateString();\n  }\n\n  const converted = tryConvertToDateTime(d, localization);\n\n  if (!converted) {\n    Namespace.errorMessages.failedToParseDate(\n      optionName,\n      d,\n      optionName === 'input'\n    );\n  }\n  return converted;\n}\n\n/**\n * Type checks that `value` is an array of Date or DateTime\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n * @param localization\n */\nexport function typeCheckDateArray(\n  this: void,\n  optionName: string,\n  value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string,\n  localization: FormatLocalization = DefaultFormatLocalization\n) {\n  if (!Array.isArray(value)) {\n    Namespace.errorMessages.typeMismatch(\n      optionName,\n      providedType,\n      'array of DateTime or Date'\n    );\n  }\n  for (let i = 0; i < value.length; i++) {\n    const d = value[i];\n    const dateTime = convertToDateTime(d, optionName, localization);\n    dateTime.setLocalization(localization);\n    value[i] = dateTime;\n  }\n}\n\n/**\n * Type checks that `value` is an array of numbers\n * @param optionName Provides text to error messages e.g. disabledDates\n * @param value Option value\n * @param providedType Used to provide text to error messages\n */\nexport function typeCheckNumberArray(\n  this: void,\n  optionName: string,\n  value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string\n) {\n  if (!Array.isArray(value) || value.some((x) => typeof x !== typeof 0)) {\n    Namespace.errorMessages.typeMismatch(\n      optionName,\n      providedType,\n      'array of numbers'\n    );\n  }\n}\n", "import Namespace from './namespace';\nimport type { FormatLocalization } from './options';\nimport {\n  convertToDateTime,\n  typeCheckNumberArray,\n  typeCheckDateArray,\n} from './typeChecker';\n\ninterface OptionProcessorFunctionArguments {\n  key: string;\n  value: any; //eslint-disable-line @typescript-eslint/no-explicit-any\n  providedType: string;\n  defaultType: string;\n  path: string;\n  localization: FormatLocalization;\n}\n\ntype OptionProcessorFunction = (\n  this: void,\n  args: OptionProcessorFunctionArguments\n) => any; //eslint-disable-line @typescript-eslint/no-explicit-any\n\nfunction mandatoryDate(key: string): OptionProcessorFunction {\n  return ({ value, localization }) => {\n    const dateTime = convertToDateTime(value, key, localization);\n    if (dateTime !== undefined) {\n      dateTime.setLocalization(localization);\n      return dateTime;\n    }\n  };\n}\n\nfunction optionalDate(key: string): OptionProcessorFunction {\n  const mandatory = mandatoryDate(key);\n  return (args) => {\n    if (args.value === undefined) {\n      return args.value;\n    }\n    return mandatory(args);\n  };\n}\n\nfunction numbersInRange(\n  key: string,\n  lower: number,\n  upper: number\n): OptionProcessorFunction {\n  return ({ value, providedType }) => {\n    if (value === undefined) {\n      return [];\n    }\n    typeCheckNumberArray(key, value, providedType);\n    if ((value as number[]).some((x) => x < lower || x > upper))\n      Namespace.errorMessages.numbersOutOfRange(key, lower, upper);\n    return value;\n  };\n}\n\nfunction validHourRange(key: string): OptionProcessorFunction {\n  return numbersInRange(key, 0, 23);\n}\n\nfunction validDateArray(key: string): OptionProcessorFunction {\n  return ({ value, providedType, localization }) => {\n    if (value === undefined) {\n      return [];\n    }\n    typeCheckDateArray(key, value, providedType, localization);\n    return value;\n  };\n}\n\nfunction validKeyOption(keyOptions: string[]): OptionProcessorFunction {\n  return ({ value, path }) => {\n    if (!keyOptions.includes(value))\n      Namespace.errorMessages.unexpectedOptionValue(\n        path.substring(1),\n        value,\n        keyOptions\n      );\n    return value;\n  };\n}\n\nconst optionProcessors: { [key: string]: OptionProcessorFunction } =\n  Object.freeze({\n    defaultDate: mandatoryDate('defaultDate'),\n    viewDate: mandatoryDate('viewDate'),\n    minDate: optionalDate('restrictions.minDate'),\n    maxDate: optionalDate('restrictions.maxDate'),\n    disabledHours: validHourRange('restrictions.disabledHours'),\n    enabledHours: validHourRange('restrictions.enabledHours'),\n    disabledDates: validDateArray('restrictions.disabledDates'),\n    enabledDates: validDateArray('restrictions.enabledDates'),\n    daysOfWeekDisabled: numbersInRange('restrictions.daysOfWeekDisabled', 0, 6),\n    disabledTimeIntervals: ({ key, value, providedType, localization }) => {\n      if (value === undefined) {\n        return [];\n      }\n      if (!Array.isArray(value)) {\n        Namespace.errorMessages.typeMismatch(\n          key,\n          providedType,\n          'array of { from: DateTime|Date, to: DateTime|Date }'\n        );\n      }\n      const valueObject = value as { from: any; to: any }[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n      for (let i = 0; i < valueObject.length; i++) {\n        Object.keys(valueObject[i]).forEach((vk) => {\n          const subOptionName = `${key}[${i}].${vk}`;\n          const d = valueObject[i][vk];\n          const dateTime = convertToDateTime(d, subOptionName, localization);\n          dateTime.setLocalization(localization);\n          valueObject[i][vk] = dateTime;\n        });\n      }\n      return valueObject;\n    },\n    toolbarPlacement: validKeyOption(['top', 'bottom', 'default']),\n    type: validKeyOption(['icons', 'sprites']),\n    viewMode: validKeyOption([\n      'clock',\n      'calendar',\n      'months',\n      'years',\n      'decades',\n    ]),\n    theme: validKeyOption(['light', 'dark', 'auto']),\n    placement: validKeyOption(['top', 'bottom']),\n    meta: ({ value }) => value,\n    dayViewHeaderFormat: ({ value }) => value,\n    container: ({ value, path }) => {\n      if (\n        value &&\n        !(\n          value instanceof HTMLElement ||\n          value instanceof Element ||\n          value?.appendChild\n        )\n      ) {\n        Namespace.errorMessages.typeMismatch(\n          path.substring(1),\n          typeof value,\n          'HTMLElement'\n        );\n      }\n      return value;\n    },\n    useTwentyfourHour: ({ value, path, providedType, defaultType }) => {\n      Namespace.errorMessages.deprecatedWarning(\n        'useTwentyfourHour',\n        'Please use \"options.localization.hourCycle\" instead'\n      );\n      if (value === undefined || providedType === 'boolean') return value;\n      Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n    },\n    hourCycle: validKeyOption(['h11', 'h12', 'h23', 'h24']),\n  });\n\nconst defaultProcessor: OptionProcessorFunction = ({\n  value,\n  defaultType,\n  providedType,\n  path,\n}) => {\n  switch (defaultType) {\n    case 'boolean':\n      return value === 'true' || value === true;\n    case 'number':\n      return +value;\n    case 'string':\n      return value.toString();\n    case 'object':\n      return {};\n    case 'function':\n      return value;\n    default:\n      Namespace.errorMessages.typeMismatch(path, providedType, defaultType);\n  }\n};\n\nexport function processKey(this: void, args: OptionProcessorFunctionArguments) {\n  return (optionProcessors[args.key] || defaultProcessor)(args);\n}\n", "import Namespace from './namespace';\nimport { DateTime } from '../datetime';\nimport DefaultOptions from './default-options';\nimport Options, { FormatLocalization } from './options';\nimport { processKey } from './optionProcessor';\nimport {\n  convertToDateTime,\n  tryConvertToDateTime,\n  typeCheckDateArray,\n  typeCheckNumberArray,\n} from './typeChecker';\n\nexport class OptionConverter {\n  private static ignoreProperties = [\n    'meta',\n    'dayViewHeaderFormat',\n    'container',\n    'dateForms',\n    'ordinal',\n  ];\n\n  static deepCopy(input): Options {\n    const o = {};\n\n    Object.keys(input).forEach((key) => {\n      const inputElement = input[key];\n\n      if (inputElement instanceof DateTime) {\n        o[key] = inputElement.clone;\n        return;\n      } else if (inputElement instanceof Date) {\n        o[key] = new Date(inputElement.valueOf());\n        return;\n      }\n\n      o[key] = inputElement;\n      if (\n        typeof inputElement !== 'object' ||\n        inputElement instanceof HTMLElement ||\n        inputElement instanceof Element\n      )\n        return;\n      if (!Array.isArray(inputElement)) {\n        o[key] = OptionConverter.deepCopy(inputElement);\n      }\n    });\n\n    return o;\n  }\n\n  private static isValue = (a) => a != null; // everything except undefined + null\n\n  /**\n   * Finds value out of an object based on a string, period delimited, path\n   * @param paths\n   * @param obj\n   */\n  static objectPath(paths: string, obj) {\n    if (paths.charAt(0) === '.') paths = paths.slice(1);\n    if (!paths) return obj;\n    return paths\n      .split('.')\n      .reduce(\n        (value, key) =>\n          OptionConverter.isValue(value) || OptionConverter.isValue(value[key])\n            ? value[key]\n            : undefined,\n        obj\n      );\n  }\n\n  /**\n   * The spread operator caused sub keys to be missing after merging.\n   * This is to fix that issue by using spread on the child objects first.\n   * Also handles complex options like disabledDates\n   * @param provided An option from new providedOptions\n   * @param copyTo Destination object. This was added to prevent reference copies\n   * @param localization\n   * @param path\n   */\n  static spread(provided, copyTo, localization: FormatLocalization, path = '') {\n    const defaultOptions = OptionConverter.objectPath(path, DefaultOptions);\n\n    const unsupportedOptions = Object.keys(provided).filter(\n      (x) => !Object.keys(defaultOptions).includes(x)\n    );\n\n    if (unsupportedOptions.length > 0) {\n      const flattenedOptions = OptionConverter.getFlattenDefaultOptions();\n\n      const errors = unsupportedOptions.map((x) => {\n        const d = path ? '.' : '';\n        let error = `\"${path}${d}${x}\" is not a known option.`;\n        const didYouMean = flattenedOptions.find((y) => y.includes(x));\n        if (didYouMean) error += ` Did you mean \"${didYouMean}\"?`;\n        return error;\n      });\n      Namespace.errorMessages.unexpectedOptions(errors);\n    }\n\n    Object.keys(provided)\n      .filter((key) => key !== '__proto__' && key !== 'constructor')\n      .forEach((key) => {\n        path += `.${key}`;\n        if (path.charAt(0) === '.') path = path.slice(1);\n\n        const defaultOptionValue = defaultOptions[key];\n        const providedType = typeof provided[key];\n        const defaultType = typeof defaultOptionValue;\n        const value = provided[key];\n\n        if (value === undefined || value === null) {\n          copyTo[key] = value;\n          path = path.substring(0, path.lastIndexOf(`.${key}`));\n          return;\n        }\n\n        if (\n          typeof defaultOptionValue === 'object' &&\n          !Array.isArray(provided[key]) &&\n          !(\n            defaultOptionValue instanceof Date ||\n            OptionConverter.ignoreProperties.includes(key)\n          )\n        ) {\n          OptionConverter.spread(\n            provided[key],\n            copyTo[key],\n            localization,\n            path\n          );\n        } else {\n          copyTo[key] = OptionConverter.processKey(\n            key,\n            value,\n            providedType,\n            defaultType,\n            path,\n            localization\n          );\n        }\n\n        path = path.substring(0, path.lastIndexOf(`.${key}`));\n      });\n  }\n\n  static processKey(\n    key: string,\n    value: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    providedType: string,\n    defaultType: string,\n    path: string,\n    localization: FormatLocalization\n  ) {\n    return processKey({\n      key,\n      value,\n      providedType,\n      defaultType,\n      path,\n      localization,\n    });\n  }\n\n  static _mergeOptions(providedOptions: Options, mergeTo: Options): Options {\n    const newConfig = OptionConverter.deepCopy(mergeTo);\n    //see if the options specify a locale\n    const localization =\n      mergeTo.localization?.locale !== 'default'\n        ? mergeTo.localization\n        : providedOptions?.localization || DefaultOptions.localization;\n\n    OptionConverter.spread(providedOptions, newConfig, localization, '');\n\n    return newConfig;\n  }\n\n  static _dataToOptions(element, options: Options): Options {\n    const eData = JSON.parse(JSON.stringify(element.dataset));\n\n    if (eData?.tdTargetInput) delete eData.tdTargetInput;\n    if (eData?.tdTargetToggle) delete eData.tdTargetToggle;\n\n    if (!eData || Object.keys(eData).length === 0) return options;\n    const dataOptions = {} as Options;\n\n    // because dataset returns camelCase including the 'td' key the option\n    // key won't align\n    const objectToNormalized = (object) => {\n      const lowered = {};\n      Object.keys(object).forEach((x) => {\n        lowered[x.toLowerCase()] = x;\n      });\n\n      return lowered;\n    };\n\n    const normalizeObject = this.normalizeObject(objectToNormalized);\n    const optionsLower = objectToNormalized(options);\n\n    Object.keys(eData)\n      .filter((x) => x.startsWith(Namespace.dataKey))\n      .map((x) => x.substring(2))\n      .forEach((key) => {\n        let keyOption = optionsLower[key.toLowerCase()];\n\n        // dataset merges dashes to camelCase... yay\n        // i.e. key = display_components_seconds\n        if (key.includes('_')) {\n          // [display, components, seconds]\n          const split = key.split('_');\n          // display\n          keyOption = optionsLower[split[0].toLowerCase()];\n          if (\n            keyOption !== undefined &&\n            options[keyOption].constructor === Object\n          ) {\n            dataOptions[keyOption] = normalizeObject(\n              split,\n              1,\n              options[keyOption],\n              eData[`td${key}`]\n            );\n          }\n        }\n        // or key = multipleDate\n        else if (keyOption !== undefined) {\n          dataOptions[keyOption] = eData[`td${key}`];\n        }\n      });\n\n    return this._mergeOptions(dataOptions, options);\n  }\n\n  //todo clean this up\n  private static normalizeObject(objectToNormalized: (object) => object) {\n    const normalizeObject = (\n      split: string[],\n      index: number,\n      optionSubgroup: unknown,\n      value: unknown\n    ) => {\n      // first round = display { ... }\n      const normalizedOptions = objectToNormalized(optionSubgroup);\n\n      const keyOption = normalizedOptions[split[index].toLowerCase()];\n      const internalObject = {};\n\n      if (keyOption === undefined) return internalObject;\n\n      // if this is another object, continue down the rabbit hole\n      if (optionSubgroup[keyOption]?.constructor === Object) {\n        index++;\n        internalObject[keyOption] = normalizeObject(\n          split,\n          index,\n          optionSubgroup[keyOption],\n          value\n        );\n      } else {\n        internalObject[keyOption] = value;\n      }\n      return internalObject;\n    };\n    return normalizeObject;\n  }\n\n  /**\n   * Attempts to prove `d` is a DateTime or Date or can be converted into one.\n   * @param d If a string will attempt creating a date from it.\n   * @param localization object containing locale and format settings. Only used with the custom formats\n   * @private\n   */\n  static _dateTypeCheck(\n    d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    localization: FormatLocalization\n  ): DateTime | null {\n    return tryConvertToDateTime(d, localization);\n  }\n\n  /**\n   * Type checks that `value` is an array of Date or DateTime\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param value Option value\n   * @param providedType Used to provide text to error messages\n   * @param localization\n   */\n  static _typeCheckDateArray(\n    optionName: string,\n    value,\n    providedType: string,\n    localization: FormatLocalization\n  ) {\n    return typeCheckDateArray(optionName, value, providedType, localization);\n  }\n\n  /**\n   * Type checks that `value` is an array of numbers\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param value Option value\n   * @param providedType Used to provide text to error messages\n   */\n  static _typeCheckNumberArray(\n    optionName: string,\n    value,\n    providedType: string\n  ) {\n    return typeCheckNumberArray(optionName, value, providedType);\n  }\n\n  /**\n   * Attempts to convert `d` to a DateTime object\n   * @param d value to convert\n   * @param optionName Provides text to error messages e.g. disabledDates\n   * @param localization object containing locale and format settings. Only used with the custom formats\n   */\n  static dateConversion(\n    d: any, //eslint-disable-line @typescript-eslint/no-explicit-any\n    optionName: string,\n    localization: FormatLocalization\n  ): DateTime {\n    return convertToDateTime(d, optionName, localization);\n  }\n\n  private static _flattenDefaults: string[];\n\n  private static getFlattenDefaultOptions(): string[] {\n    if (this._flattenDefaults) return this._flattenDefaults;\n    const deepKeys = (t, pre = []) => {\n      if (Array.isArray(t)) return [];\n      if (Object(t) === t) {\n        return Object.entries(t).flatMap(([k, v]) => deepKeys(v, [...pre, k]));\n      } else {\n        return pre.join('.');\n      }\n    };\n\n    this._flattenDefaults = deepKeys(DefaultOptions);\n\n    return this._flattenDefaults;\n  }\n\n  /**\n   * Some options conflict like min/max date. Verify that these kinds of options\n   * are set correctly.\n   * @param config\n   */\n  static _validateConflicts(config: Options) {\n    if (\n      config.display.sideBySide &&\n      (!config.display.components.clock ||\n        !(\n          config.display.components.hours ||\n          config.display.components.minutes ||\n          config.display.components.seconds\n        ))\n    ) {\n      Namespace.errorMessages.conflictingConfiguration(\n        'Cannot use side by side mode without the clock components'\n      );\n    }\n\n    if (config.restrictions.minDate && config.restrictions.maxDate) {\n      if (config.restrictions.minDate.isAfter(config.restrictions.maxDate)) {\n        Namespace.errorMessages.conflictingConfiguration(\n          'minDate is after maxDate'\n        );\n      }\n\n      if (config.restrictions.maxDate.isBefore(config.restrictions.minDate)) {\n        Namespace.errorMessages.conflictingConfiguration(\n          'maxDate is before minDate'\n        );\n      }\n    }\n\n    if (config.multipleDates && config.dateRange) {\n      Namespace.errorMessages.conflictingConfiguration(\n        'Cannot uss option \"multipleDates\" with \"dateRange\"'\n      );\n    }\n  }\n}\n", "import { DateTime, getFormatByUnit, Unit } from './datetime';\nimport Namespace from './utilities/namespace';\nimport {\n  ChangeEvent,\n  FailEvent,\n  ParseErrorEvent,\n} from './utilities/event-types';\nimport Validation from './validation';\nimport { serviceLocator } from './utilities/service-locator';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\nexport default class Dates {\n  private _dates: DateTime[] = [];\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private _eventEmitters: EventEmitters;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n  }\n\n  /**\n   * Returns the array of selected dates\n   */\n  get picked(): DateTime[] {\n    return [...this._dates];\n  }\n\n  /**\n   * Returns the last picked value.\n   */\n  get lastPicked(): DateTime {\n    return this._dates[this.lastPickedIndex]?.clone;\n  }\n\n  /**\n   * Returns the length of picked dates -1 or 0 if none are selected.\n   */\n  get lastPickedIndex(): number {\n    if (this._dates.length === 0) return 0;\n    return this._dates.length - 1;\n  }\n\n  /**\n   * Formats a DateTime object to a string. Used when setting the input value.\n   * @param date\n   */\n  formatInput(date: DateTime): string {\n    if (!date) return '';\n    date.localization = this.optionsStore.options.localization;\n    return date.format();\n  }\n\n  /**\n   * parse the value into a DateTime object.\n   * this can be overwritten to supply your own parsing.\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  parseInput(value: any): DateTime {\n    try {\n      return OptionConverter.dateConversion(\n        value,\n        'input',\n        this.optionsStore.options.localization\n      );\n    } catch (e) {\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.error,\n        reason: Namespace.errorMessages.failedToParseInput,\n        format: this.optionsStore.options.localization.format,\n        value: value,\n      } as ParseErrorEvent);\n      return undefined;\n    }\n  }\n\n  /**\n   * Tries to convert the provided value to a DateTime object.\n   * If value is null|undefined then clear the value of the provided index (or 0).\n   * @param value Value to convert or null|undefined\n   * @param index When using multidates this is the index in the array\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  setFromInput(value: any, index?: number) {\n    if (!value) {\n      this.setValue(undefined, index);\n      return;\n    }\n    const converted = this.parseInput(value);\n    if (converted) {\n      converted.setLocalization(this.optionsStore.options.localization);\n      this.setValue(converted, index);\n    }\n  }\n\n  /**\n   * Adds a new DateTime to selected dates array\n   * @param date\n   */\n  add(date: DateTime): void {\n    this._dates.push(date);\n  }\n\n  /**\n   * Returns true if the `targetDate` is part of the selected dates array.\n   * If `unit` is provided then a granularity to that unit will be used.\n   * @param targetDate\n   * @param unit\n   */\n  isPicked(targetDate: DateTime, unit?: Unit): boolean {\n    if (!DateTime.isValid(targetDate)) return false;\n    if (!unit)\n      return this._dates.find((x) => x.isSame(targetDate)) !== undefined;\n\n    const format = getFormatByUnit(unit);\n\n    const innerDateFormatted = targetDate.format(format);\n\n    return (\n      this._dates\n        .map((x) => x.format(format))\n        .find((x) => x === innerDateFormatted) !== undefined\n    );\n  }\n\n  /**\n   * Returns the index at which `targetDate` is in the array.\n   * This is used for updating or removing a date when multi-date is used\n   * If `unit` is provided then a granularity to that unit will be used.\n   * @param targetDate\n   * @param unit\n   */\n  pickedIndex(targetDate: DateTime, unit?: Unit): number {\n    if (!DateTime.isValid(targetDate)) return -1;\n    if (!unit)\n      return this._dates.map((x) => x.valueOf()).indexOf(targetDate.valueOf());\n\n    const format = getFormatByUnit(unit);\n\n    const innerDateFormatted = targetDate.format(format);\n\n    return this._dates.map((x) => x.format(format)).indexOf(innerDateFormatted);\n  }\n\n  /**\n   * Clears all selected dates.\n   */\n  clear() {\n    this.optionsStore.unset = true;\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.change,\n      date: undefined,\n      oldDate: this.lastPicked,\n      isClear: true,\n      isValid: true,\n    } as ChangeEvent);\n    this._dates = [];\n    if (this.optionsStore.input) this.optionsStore.input.value = '';\n    this._eventEmitters.updateDisplay.emit('all');\n  }\n\n  /**\n   * Find the \"book end\" years given a `year` and a `factor`\n   * @param factor e.g. 100 for decades\n   * @param year e.g. 2021\n   */\n  static getStartEndYear(\n    factor: number,\n    year: number\n  ): [number, number, number] {\n    const step = factor / 10,\n      startYear = Math.floor(year / factor) * factor,\n      endYear = startYear + step * 9,\n      focusValue = Math.floor(year / step) * step;\n    return [startYear, endYear, focusValue];\n  }\n\n  updateInput(target?: DateTime) {\n    if (!this.optionsStore.input) return;\n\n    let newValue = this.formatInput(target);\n    if (\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.dateRange\n    ) {\n      newValue = this._dates\n        .map((d) => this.formatInput(d))\n        .join(this.optionsStore.options.multipleDatesSeparator);\n    }\n    if (this.optionsStore.input.value != newValue)\n      this.optionsStore.input.value = newValue;\n  }\n\n  /**\n   * Attempts to either clear or set the `target` date at `index`.\n   * If the `target` is null then the date will be cleared.\n   * If multi-date is being used then it will be removed from the array.\n   * If `target` is valid and multi-date is used then if `index` is\n   * provided the date at that index will be replaced, otherwise it is appended.\n   * @param target\n   * @param index\n   */\n  setValue(target?: DateTime, index?: number): void {\n    const noIndex = typeof index === 'undefined',\n      isClear = !target && noIndex;\n    let oldDate = this.optionsStore.unset ? null : this._dates[index]?.clone;\n    if (!oldDate && !this.optionsStore.unset && noIndex && isClear) {\n      oldDate = this.lastPicked;\n    }\n\n    if (target && oldDate?.isSame(target)) {\n      this.updateInput(target);\n      return;\n    }\n\n    // case of calling setValue(null)\n    if (!target) {\n      this._setValueNull(isClear, index, oldDate);\n      return;\n    }\n\n    index = index || 0;\n    target = target.clone;\n\n    // minute stepping is being used, force the minute to the closest value\n    if (this.optionsStore.options.stepping !== 1) {\n      target.minutes =\n        Math.round(target.minutes / this.optionsStore.options.stepping) *\n        this.optionsStore.options.stepping;\n      target.startOf(Unit.minutes);\n    }\n\n    const onUpdate = (isValid: boolean) => {\n      this._dates[index] = target;\n      this._eventEmitters.updateViewDate.emit(target.clone);\n\n      this.updateInput(target);\n\n      this.optionsStore.unset = false;\n      this._eventEmitters.updateDisplay.emit('all');\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.change,\n        date: target,\n        oldDate,\n        isClear,\n        isValid: isValid,\n      } as ChangeEvent);\n    };\n\n    if (\n      this.validation.isValid(target) &&\n      this.validation.dateRangeIsValid(this.picked, index, target)\n    ) {\n      onUpdate(true);\n      return;\n    }\n\n    if (this.optionsStore.options.keepInvalid) {\n      onUpdate(false);\n    }\n\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.error,\n      reason: Namespace.errorMessages.failedToSetInvalidDate,\n      date: target,\n      oldDate,\n    } as FailEvent);\n  }\n\n  private _setValueNull(isClear: boolean, index: number, oldDate: DateTime) {\n    if (\n      !this.optionsStore.options.multipleDates ||\n      this._dates.length === 1 ||\n      isClear\n    ) {\n      this.optionsStore.unset = true;\n      this._dates = [];\n    } else {\n      this._dates.splice(index, 1);\n    }\n\n    this.updateInput();\n\n    this._eventEmitters.triggerEvent.emit({\n      type: Namespace.events.change,\n      date: undefined,\n      oldDate,\n      isClear,\n      isValid: true,\n    } as ChangeEvent);\n\n    this._eventEmitters.updateDisplay.emit('all');\n  }\n}\n", "enum ActionTypes {\n  next = 'next',\n  previous = 'previous',\n  changeCalendarView = 'changeCalendarView',\n  selectMonth = 'selectMonth',\n  selectYear = 'selectYear',\n  selectDecade = 'selectDecade',\n  selectDay = 'selectDay',\n  selectHour = 'selectHour',\n  selectMinute = 'selectMinute',\n  selectSecond = 'selectSecond',\n  incrementHours = 'incrementHours',\n  incrementMinutes = 'incrementMinutes',\n  incrementSeconds = 'incrementSeconds',\n  decrementHours = 'decrementHours',\n  decrementMinutes = 'decrementMinutes',\n  decrementSeconds = 'decrementSeconds',\n  toggleMeridiem = 'toggleMeridiem',\n  togglePicker = 'togglePicker',\n  showClock = 'showClock',\n  showHours = 'showHours',\n  showMinutes = 'showMinutes',\n  showSeconds = 'showSeconds',\n  clear = 'clear',\n  close = 'close',\n  today = 'today',\n}\n\nexport default ActionTypes;\n", "import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `date`\n */\nexport default class DateDisplay {\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.daysContainer);\n    container.role = 'grid';\n\n    container.append(...this._daysOfTheWeek());\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      const div = document.createElement('div');\n      div.classList.add(Namespace.css.calendarWeeks, Namespace.css.noHighlight);\n      container.appendChild(div);\n    }\n\n    const { rangeHoverEvent, rangeHoverOutEvent } =\n      this.handleMouseEvents(container);\n\n    for (let i = 0; i < 42; i++) {\n      if (i !== 0 && i % 7 === 0) {\n        if (this.optionsStore.options.display.calendarWeeks) {\n          const div = document.createElement('div');\n          div.classList.add(\n            Namespace.css.calendarWeeks,\n            Namespace.css.noHighlight\n          );\n          div.tabIndex = -1;\n          container.appendChild(div);\n        }\n      }\n\n      const div = document.createElement('div');\n      div.setAttribute('data-action', ActionTypes.selectDay);\n      div.role = 'gridcell';\n      div.tabIndex = -1;\n      container.appendChild(div);\n\n      // if hover is supported then add the events\n      if (\n        matchMedia('(hover: hover)').matches &&\n        this.optionsStore.options.dateRange\n      ) {\n        div.addEventListener('mouseover', rangeHoverEvent);\n        div.addEventListener('mouseout', rangeHoverOutEvent);\n      }\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.daysContainer\n    )[0] as HTMLElement;\n\n    this._updateCalendarView(container);\n\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf(Unit.month)\n      .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n      .manipulate(12, Unit.hours);\n\n    this._handleCalendarWeeks(container, innerDate.clone);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectDay}\"]`)\n      .forEach((element: HTMLElement) => {\n        const classes: string[] = [];\n        classes.push(Namespace.css.day);\n\n        if (innerDate.isBefore(this.optionsStore.viewDate, Unit.month)) {\n          classes.push(Namespace.css.old);\n        }\n        if (innerDate.isAfter(this.optionsStore.viewDate, Unit.month)) {\n          classes.push(Namespace.css.new);\n        }\n\n        if (\n          !this.optionsStore.unset &&\n          !this.optionsStore.options.dateRange &&\n          this.dates.isPicked(innerDate, Unit.date)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.date)) {\n          classes.push(Namespace.css.disabled);\n        }\n        if (innerDate.isSame(new DateTime(), Unit.date)) {\n          classes.push(Namespace.css.today);\n        }\n        if (innerDate.weekDay === 0 || innerDate.weekDay === 6) {\n          classes.push(Namespace.css.weekend);\n        }\n\n        this._handleDateRange(innerDate, classes);\n\n        paint(Unit.date, innerDate, classes, element);\n\n        element.classList.remove(...element.classList);\n        element.classList.add(...classes);\n        element.setAttribute('data-value', innerDate.dateToDataValue());\n        element.setAttribute('data-day', `${innerDate.date}`);\n        element.innerText = innerDate.parts(undefined, {\n          day: 'numeric',\n        }).day;\n        element.ariaLabel = innerDate.format('MMMM dd, yyyy');\n\n        innerDate.manipulate(1, Unit.date);\n      });\n  }\n\n  private _handleDateRange(innerDate: DateTime, classes: string[]) {\n    const rangeStart = this.dates.picked[0];\n    const rangeEnd = this.dates.picked[1];\n\n    if (this.optionsStore.options.dateRange) {\n      if (innerDate.isBetween(rangeStart, rangeEnd, Unit.date)) {\n        classes.push(Namespace.css.rangeIn);\n      }\n\n      if (innerDate.isSame(rangeStart, Unit.date)) {\n        classes.push(Namespace.css.rangeStart);\n      }\n\n      if (innerDate.isSame(rangeEnd, Unit.date)) {\n        classes.push(Namespace.css.rangeEnd);\n      }\n    }\n  }\n\n  private handleMouseEvents(container: HTMLElement) {\n    const rangeHoverEvent = (e: MouseEvent) => {\n      const currentTarget = e?.currentTarget as HTMLElement;\n\n      // if we have 0 or 2 selected or if the target is disabled then ignore\n      if (\n        this.dates.picked.length !== 1 ||\n        currentTarget.classList.contains(Namespace.css.disabled)\n      )\n        return;\n\n      // select all the date divs\n      const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n      // get the date value from the element being hovered over\n      const attributeValue = currentTarget.getAttribute('data-value');\n\n      // format the string to a date\n      const innerDate = DateTime.fromString(attributeValue, {\n        format: 'yyyy-MM-dd',\n      });\n\n      // find the position of the target in the date container\n      const dayIndex = allDays.findIndex(\n        (e) => e.getAttribute('data-value') === attributeValue\n      );\n\n      // find the first and second selected dates\n      const rangeStart = this.dates.picked[0];\n      const rangeEnd = this.dates.picked[1];\n\n      //format the start date so that it can be found by the attribute\n      const rangeStartFormatted = rangeStart.dateToDataValue();\n      const rangeStartIndex = allDays.findIndex(\n        (e) => e.getAttribute('data-value') === rangeStartFormatted\n      );\n      const rangeStartElement = allDays[rangeStartIndex];\n\n      //make sure we don't leave start/end classes if we don't need them\n      if (!innerDate.isSame(rangeStart, Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeStart);\n      }\n\n      if (!innerDate.isSame(rangeEnd, Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeEnd);\n      }\n\n      // the following figures out which direct from start date is selected\n      // the selection \"cap\" classes are applied if needed\n      // otherwise all the dates between will get the `rangeIn` class.\n      // We make this selection based on the element's index and the rangeStart index\n\n      let lambda: (_, index: number) => boolean;\n\n      if (innerDate.isBefore(rangeStart)) {\n        currentTarget.classList.add(Namespace.css.rangeStart);\n        rangeStartElement?.classList.remove(Namespace.css.rangeStart);\n        rangeStartElement?.classList.add(Namespace.css.rangeEnd);\n        lambda = (_, index) => index > dayIndex && index < rangeStartIndex;\n      } else {\n        currentTarget.classList.add(Namespace.css.rangeEnd);\n        rangeStartElement?.classList.remove(Namespace.css.rangeEnd);\n        rangeStartElement?.classList.add(Namespace.css.rangeStart);\n        lambda = (_, index) => index < dayIndex && index > rangeStartIndex;\n      }\n\n      allDays.filter(lambda).forEach((e) => {\n        e.classList.add(Namespace.css.rangeIn);\n      });\n    };\n\n    const rangeHoverOutEvent = (e: MouseEvent) => {\n      // find all the dates in the container\n      const allDays = [...container.querySelectorAll('.day')] as HTMLElement[];\n\n      // if only the start is selected, remove all the rangeIn classes\n      // we do this because once the user hovers over a new date the range will be recalculated.\n      if (this.dates.picked.length === 1)\n        allDays.forEach((e) => e.classList.remove(Namespace.css.rangeIn));\n\n      // if we have 0 or 2 dates selected then ignore\n      if (this.dates.picked.length !== 1) return;\n\n      const currentTarget = e?.currentTarget as HTMLElement;\n\n      // get the elements date from the attribute value\n      const innerDate = new DateTime(currentTarget.getAttribute('data-value'));\n\n      // verify selections and remove invalid classes\n      if (!innerDate.isSame(this.dates.picked[0], Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeStart);\n      }\n\n      if (!innerDate.isSame(this.dates.picked[1], Unit.date)) {\n        currentTarget.classList.remove(Namespace.css.rangeEnd);\n      }\n    };\n\n    return { rangeHoverEvent, rangeHoverOutEvent };\n  }\n\n  private _updateCalendarView(container: Element) {\n    if (this.optionsStore.currentView !== 'calendar') return;\n    const [previous, switcher, next] = container.parentElement\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n    switcher.setAttribute(\n      Namespace.css.daysContainer,\n      this.optionsStore.viewDate.format(\n        this.optionsStore.options.localization.dayViewHeaderFormat\n      )\n    );\n    this.optionsStore.options.display.components.month\n      ? switcher.classList.remove(Namespace.css.disabled)\n      : switcher.classList.add(Namespace.css.disabled);\n\n    this.validation.isValid(\n      this.optionsStore.viewDate.clone.manipulate(-1, Unit.month),\n      Unit.month\n    )\n      ? previous.classList.remove(Namespace.css.disabled)\n      : previous.classList.add(Namespace.css.disabled);\n    this.validation.isValid(\n      this.optionsStore.viewDate.clone.manipulate(1, Unit.month),\n      Unit.month\n    )\n      ? next.classList.remove(Namespace.css.disabled)\n      : next.classList.add(Namespace.css.disabled);\n  }\n\n  /***\n   * Generates a html row that contains the days of the week.\n   * @private\n   */\n  private _daysOfTheWeek(): HTMLElement[] {\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf('weekDay', this.optionsStore.options.localization.startOfTheWeek)\n      .startOf(Unit.date);\n    const row = [];\n    document.createElement('div');\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      const htmlDivElement = document.createElement('div');\n      htmlDivElement.classList.add(\n        Namespace.css.calendarWeeks,\n        Namespace.css.noHighlight\n      );\n      htmlDivElement.innerText = '#';\n      row.push(htmlDivElement);\n    }\n\n    for (let i = 0; i < 7; i++) {\n      const htmlDivElement = document.createElement('div');\n      htmlDivElement.classList.add(\n        Namespace.css.dayOfTheWeek,\n        Namespace.css.noHighlight\n      );\n      let weekDay = innerDate.format({ weekday: 'short' });\n      if (this.optionsStore.options.localization.maxWeekdayLength > 0)\n        weekDay = weekDay.substring(\n          0,\n          this.optionsStore.options.localization.maxWeekdayLength\n        );\n      htmlDivElement.innerText = weekDay;\n      htmlDivElement.ariaLabel = innerDate.format({ weekday: 'long' });\n      innerDate.manipulate(1, Unit.date);\n      row.push(htmlDivElement);\n    }\n\n    return row;\n  }\n\n  private _handleCalendarWeeks(container: HTMLElement, innerDate: DateTime) {\n    [...container.querySelectorAll(`.${Namespace.css.calendarWeeks}`)]\n      .filter((e: HTMLElement) => e.innerText !== '#')\n      .forEach((element: HTMLElement) => {\n        element.innerText = `${innerDate.week}`;\n        innerDate.manipulate(7, Unit.date);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `month`\n */\nexport default class MonthDisplay {\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.monthsContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectMonth);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.monthsContainer\n    )[0] as HTMLElement;\n\n    if (this.optionsStore.currentView === 'months') {\n      const [previous, switcher, next] = container.parentElement\n        .getElementsByClassName(Namespace.css.calendarHeader)[0]\n        .getElementsByTagName('div');\n\n      switcher.setAttribute(\n        Namespace.css.monthsContainer,\n        this.optionsStore.viewDate.format({ year: 'numeric' })\n      );\n\n      this.optionsStore.options.display.components.year\n        ? switcher.classList.remove(Namespace.css.disabled)\n        : switcher.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(\n        this.optionsStore.viewDate.clone.manipulate(-1, Unit.year),\n        Unit.year\n      )\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(\n        this.optionsStore.viewDate.clone.manipulate(1, Unit.year),\n        Unit.year\n      )\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectMonth}\"]`)\n      .forEach((containerClone: HTMLElement, index) => {\n        const classes = [];\n        classes.push(Namespace.css.month);\n\n        if (\n          !this.optionsStore.unset &&\n          this.dates.isPicked(innerDate, Unit.month)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.month)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.month, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${index}`);\n        containerClone.innerText = `${innerDate.format({ month: 'short' })}`;\n        innerDate.manipulate(1, Unit.month);\n      });\n  }\n}\n", "import { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Dates from '../../dates';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `year`\n */\nexport default class YearDisplay {\n  private _startYear: DateTime;\n  private _endYear: DateTime;\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.yearsContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectYear);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint) {\n    this._startYear = this.optionsStore.viewDate.clone.manipulate(\n      -1,\n      Unit.year\n    );\n    this._endYear = this.optionsStore.viewDate.clone.manipulate(10, Unit.year);\n\n    const container = widget.getElementsByClassName(\n      Namespace.css.yearsContainer\n    )[0] as HTMLElement;\n\n    if (this.optionsStore.currentView === 'years') {\n      const [previous, switcher, next] = container.parentElement\n        .getElementsByClassName(Namespace.css.calendarHeader)[0]\n        .getElementsByTagName('div');\n\n      switcher.setAttribute(\n        Namespace.css.yearsContainer,\n        `${this._startYear.format({ year: 'numeric' })}-${this._endYear.format({\n          year: 'numeric',\n        })}`\n      );\n\n      this.optionsStore.options.display.components.decades\n        ? switcher.classList.remove(Namespace.css.disabled)\n        : switcher.classList.add(Namespace.css.disabled);\n\n      this.validation.isValid(this._startYear, Unit.year)\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n      this.validation.isValid(this._endYear, Unit.year)\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const innerDate = this.optionsStore.viewDate.clone\n      .startOf(Unit.year)\n      .manipulate(-1, Unit.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectYear}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.year);\n\n        if (\n          !this.optionsStore.unset &&\n          this.dates.isPicked(innerDate, Unit.year)\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (!this.validation.isValid(innerDate, Unit.year)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.year, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.year}`);\n        containerClone.innerText = innerDate.format({ year: 'numeric' });\n\n        innerDate.manipulate(1, Unit.year);\n      });\n  }\n}\n", "import Dates from '../../dates';\nimport { DateTime, Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { Paint } from '../index';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class DecadeDisplay {\n  private _startDecade: DateTime;\n  private _endDecade: DateTime;\n  private optionsStore: OptionsStore;\n  private dates: Dates;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker() {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.decadesContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectDecade);\n      container.appendChild(div);\n    }\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint) {\n    const [start, end] = Dates.getStartEndYear(\n      100,\n      this.optionsStore.viewDate.year\n    );\n    this._startDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n    this._startDecade.year = start;\n    this._endDecade = this.optionsStore.viewDate.clone.startOf(Unit.year);\n    this._endDecade.year = end;\n\n    const container = widget.getElementsByClassName(\n      Namespace.css.decadesContainer\n    )[0] as HTMLElement;\n\n    const [previous, switcher, next] = container.parentElement\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n\n    const isPreviousEnabled = this.validation.isValid(\n      this._startDecade,\n      Unit.year\n    );\n    if (this.optionsStore.currentView === 'decades') {\n      switcher.setAttribute(\n        Namespace.css.decadesContainer,\n        `${this._startDecade.format({\n          year: 'numeric',\n        })}-${this._endDecade.format({ year: 'numeric' })}`\n      );\n\n      isPreviousEnabled\n        ? previous.classList.remove(Namespace.css.disabled)\n        : previous.classList.add(Namespace.css.disabled);\n      this.validation.isValid(this._endDecade, Unit.year)\n        ? next.classList.remove(Namespace.css.disabled)\n        : next.classList.add(Namespace.css.disabled);\n    }\n\n    const pickedYears = this.dates.picked.map((x) => x.year);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectDecade}\"]`)\n      .forEach((containerClone: HTMLElement, index) => {\n        if (index === 0) {\n          containerClone.classList.add(Namespace.css.old);\n          if (this._startDecade.year - 10 < 0) {\n            containerClone.textContent = ' ';\n            previous.classList.add(Namespace.css.disabled);\n            containerClone.classList.add(Namespace.css.disabled);\n            containerClone.setAttribute('data-value', '');\n          }\n          return;\n        }\n\n        const classes = [];\n        classes.push(Namespace.css.decade);\n        const startDecadeYear = this._startDecade.year;\n        const endDecadeYear = this._startDecade.year + 9;\n\n        if (\n          !this.optionsStore.unset &&\n          pickedYears.filter((x) => x >= startDecadeYear && x <= endDecadeYear)\n            .length > 0\n        ) {\n          classes.push(Namespace.css.active);\n        }\n        if (\n          !isPreviousEnabled &&\n          !this.validation.isValid(\n            this._startDecade.clone.manipulate(10, Unit.year),\n            Unit.year\n          )\n        ) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint('decade', this._startDecade, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${this._startDecade.year}`);\n        containerClone.innerText = `${this._startDecade.format({\n          year: 'numeric',\n        })}`;\n\n        this._startDecade.manipulate(10, Unit.year);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport Dates from '../../dates';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates the clock display\n */\nexport default class TimeDisplay {\n  private _gridColumns = '';\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n  }\n\n  /**\n   * Build the container html for the clock display\n   * @private\n   */\n  getPicker(iconTag: (iconClass: string) => HTMLElement): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.clockContainer);\n\n    container.append(...this._grid(iconTag));\n\n    return container;\n  }\n\n  /**\n   * Populates the various elements with in the clock display\n   * like the current hour and if the manipulation icons are enabled.\n   * @private\n   */\n  _update(widget: HTMLElement): void {\n    const timesDiv = <HTMLElement>(\n      widget.getElementsByClassName(Namespace.css.clockContainer)[0]\n    );\n\n    let lastPicked = this.dates.lastPicked?.clone;\n    if (!lastPicked && this.optionsStore.options.useCurrent)\n      lastPicked = this.optionsStore.viewDate.clone;\n\n    timesDiv\n      .querySelectorAll('.disabled')\n      .forEach((element) => element.classList.remove(Namespace.css.disabled));\n\n    if (this.optionsStore.options.display.components.hours) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.hours),\n          Unit.hours\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementHours}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.hours),\n          Unit.hours\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementHours}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.hours}]`\n      ).innerText = lastPicked\n        ? lastPicked.getHoursFormatted(\n            this.optionsStore.options.localization.hourCycle\n          )\n        : '--';\n    }\n\n    if (this.optionsStore.options.display.components.minutes) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.minutes),\n          Unit.minutes\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementMinutes}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.minutes),\n          Unit.minutes\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementMinutes}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.minutes}]`\n      ).innerText = lastPicked ? lastPicked.minutesFormatted : '--';\n    }\n\n    if (this.optionsStore.options.display.components.seconds) {\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(1, Unit.seconds),\n          Unit.seconds\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.incrementSeconds}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n\n      if (\n        !this.validation.isValid(\n          this.optionsStore.viewDate.clone.manipulate(-1, Unit.seconds),\n          Unit.seconds\n        )\n      ) {\n        timesDiv\n          .querySelector(`[data-action=${ActionTypes.decrementSeconds}]`)\n          .classList.add(Namespace.css.disabled);\n      }\n      timesDiv.querySelector<HTMLElement>(\n        `[data-time-component=${Unit.seconds}]`\n      ).innerText = lastPicked ? lastPicked.secondsFormatted : '--';\n    }\n\n    if (this.optionsStore.isTwelveHour) {\n      const toggle = timesDiv.querySelector<HTMLElement>(\n        `[data-action=${ActionTypes.toggleMeridiem}]`\n      );\n\n      const meridiemDate = (lastPicked || this.optionsStore.viewDate).clone;\n\n      toggle.innerText = meridiemDate.meridiem();\n\n      if (\n        !this.validation.isValid(\n          meridiemDate.manipulate(\n            meridiemDate.hours >= 12 ? -12 : 12,\n            Unit.hours\n          )\n        )\n      ) {\n        toggle.classList.add(Namespace.css.disabled);\n      } else {\n        toggle.classList.remove(Namespace.css.disabled);\n      }\n    }\n\n    timesDiv.style.gridTemplateAreas = `\"${this._gridColumns}\"`;\n  }\n\n  /**\n   * Creates the table for the clock display depending on what options are selected.\n   * @private\n   */\n  private _grid(iconTag: (iconClass: string) => HTMLElement): HTMLElement[] {\n    this._gridColumns = '';\n    const top = [],\n      middle = [],\n      bottom = [],\n      separator = document.createElement('div'),\n      upIcon = iconTag(this.optionsStore.options.display.icons.up),\n      downIcon = iconTag(this.optionsStore.options.display.icons.down);\n\n    separator.classList.add(Namespace.css.separator, Namespace.css.noHighlight);\n    const separatorColon = <HTMLElement>separator.cloneNode(true);\n    separatorColon.innerHTML = ':';\n\n    const getSeparator = (colon = false): HTMLElement => {\n      return colon\n        ? <HTMLElement>separatorColon.cloneNode(true)\n        : <HTMLElement>separator.cloneNode(true);\n    };\n\n    if (this.optionsStore.options.display.components.hours) {\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementHours);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.showHours);\n      divElement.setAttribute('data-time-component', Unit.hours);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementHour\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementHours);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n      this._gridColumns += 'a';\n    }\n\n    if (this.optionsStore.options.display.components.minutes) {\n      this._gridColumns += ' a';\n      if (this.optionsStore.options.display.components.hours) {\n        top.push(getSeparator());\n        middle.push(getSeparator(true));\n        bottom.push(getSeparator());\n        this._gridColumns += ' a';\n      }\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementMinutes);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.showMinutes);\n      divElement.setAttribute('data-time-component', Unit.minutes);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementMinute\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementMinutes);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n    }\n\n    if (this.optionsStore.options.display.components.seconds) {\n      this._gridColumns += ' a';\n      if (this.optionsStore.options.display.components.minutes) {\n        top.push(getSeparator());\n        middle.push(getSeparator(true));\n        bottom.push(getSeparator());\n        this._gridColumns += ' a';\n      }\n      let divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.incrementSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.incrementSeconds);\n      divElement.appendChild(upIcon.cloneNode(true));\n      top.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.pickSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.showSeconds);\n      divElement.setAttribute('data-time-component', Unit.seconds);\n      middle.push(divElement);\n\n      divElement = document.createElement('div');\n      divElement.tabIndex = -1;\n      divElement.setAttribute(\n        'title',\n        this.optionsStore.options.localization.decrementSecond\n      );\n      divElement.setAttribute('data-action', ActionTypes.decrementSeconds);\n      divElement.appendChild(downIcon.cloneNode(true));\n      bottom.push(divElement);\n    }\n\n    if (this.optionsStore.isTwelveHour) {\n      this._gridColumns += ' a';\n      let divElement = getSeparator();\n      top.push(divElement);\n\n      const button = document.createElement('button');\n      button.tabIndex = -1;\n      button.setAttribute('type', 'button');\n      button.setAttribute(\n        'title',\n        this.optionsStore.options.localization.toggleMeridiem\n      );\n      button.setAttribute('data-action', ActionTypes.toggleMeridiem);\n      button.setAttribute('tabindex', '-1');\n      if (Namespace.css.toggleMeridiem.includes(',')) {\n        //todo move this to paint function?\n        button.classList.add(...Namespace.css.toggleMeridiem.split(','));\n      } else button.classList.add(Namespace.css.toggleMeridiem);\n\n      divElement = document.createElement('div');\n      divElement.classList.add(Namespace.css.noHighlight);\n      divElement.appendChild(button);\n      middle.push(divElement);\n\n      divElement = getSeparator();\n      bottom.push(divElement);\n    }\n\n    this._gridColumns = this._gridColumns.trim();\n\n    return [...top, ...middle, ...bottom];\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\nimport Dates from '../../dates';\n\n/**\n * Creates and updates the grid for `hours`\n */\nexport default class HourDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this.dates = serviceLocator.locate(Dates);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.hourContainer);\n\n    for (let i = 0; i < (this.optionsStore.isTwelveHour ? 12 : 24); i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectHour);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.hourContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.date);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectHour}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.hour);\n\n        if (!this.validation.isValid(innerDate, Unit.hours)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.hours, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.hours}`);\n        containerClone.innerText = innerDate.getHoursFormatted(\n          this.optionsStore.options.localization.hourCycle\n        );\n        innerDate.manipulate(1, Unit.hours);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `minutes`\n */\nexport default class MinuteDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.minuteContainer);\n\n    const step =\n      this.optionsStore.options.stepping === 1\n        ? 5\n        : this.optionsStore.options.stepping;\n    for (let i = 0; i < 60 / step; i++) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.selectMinute);\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.minuteContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.hours);\n    const step =\n      this.optionsStore.options.stepping === 1\n        ? 5\n        : this.optionsStore.options.stepping;\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectMinute}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.minute);\n\n        if (!this.validation.isValid(innerDate, Unit.minutes)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.minutes, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.minutes}`);\n        containerClone.innerText = innerDate.minutesFormatted;\n        innerDate.manipulate(step, Unit.minutes);\n      });\n  }\n}\n", "import { Unit } from '../../datetime';\nimport Namespace from '../../utilities/namespace';\nimport Validation from '../../validation';\nimport { serviceLocator } from '../../utilities/service-locator';\nimport { Paint } from '../index';\nimport ActionTypes from '../../utilities/action-types';\nimport { OptionsStore } from '../../utilities/optionsStore';\n\n/**\n * Creates and updates the grid for `seconds`\n */\nexport default class secondDisplay {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n  }\n  /**\n   * Build the container html for the display\n   * @private\n   */\n  getPicker(): HTMLElement {\n    const container = document.createElement('div');\n    container.classList.add(Namespace.css.secondContainer);\n\n    for (let i = 0; i < 12; i++) {\n      const div = document.createElement('div');\n      div.setAttribute('data-action', ActionTypes.selectSecond);\n      div.tabIndex = -1;\n      container.appendChild(div);\n    }\n\n    return container;\n  }\n\n  /**\n   * Populates the grid and updates enabled states\n   * @private\n   */\n  _update(widget: HTMLElement, paint: Paint): void {\n    const container = widget.getElementsByClassName(\n      Namespace.css.secondContainer\n    )[0] as HTMLElement;\n\n    const innerDate = this.optionsStore.viewDate.clone.startOf(Unit.minutes);\n\n    container\n      .querySelectorAll(`[data-action=\"${ActionTypes.selectSecond}\"]`)\n      .forEach((containerClone: HTMLElement) => {\n        const classes = [];\n        classes.push(Namespace.css.second);\n\n        if (!this.validation.isValid(innerDate, Unit.seconds)) {\n          classes.push(Namespace.css.disabled);\n        }\n\n        paint(Unit.seconds, innerDate, classes, containerClone);\n\n        containerClone.classList.remove(...containerClone.classList);\n        containerClone.classList.add(...classes);\n        containerClone.setAttribute('data-value', `${innerDate.seconds}`);\n        containerClone.innerText = innerDate.secondsFormatted;\n        innerDate.manipulate(5, Unit.seconds);\n      });\n  }\n}\n", "import Namespace from '../utilities/namespace';\n\n/**\n * Provides a collapse functionality to the view changes\n */\nexport default class Collapse {\n  /**\n   * Flips the show/hide state of `target`\n   * @param target html element to affect.\n   */\n  static toggle(target: HTMLElement) {\n    if (target.classList.contains(Namespace.css.show)) {\n      this.hide(target);\n    } else {\n      this.show(target);\n    }\n  }\n\n  /**\n   * Skips any animation or timeouts and immediately set the element to show.\n   * @param target\n   */\n  static showImmediately(target: HTMLElement) {\n    target.classList.remove(Namespace.css.collapsing);\n    target.classList.add(Namespace.css.collapse, Namespace.css.show);\n    target.style.height = '';\n  }\n\n  /**\n   * If `target` is not already showing, then show after the animation.\n   * @param target\n   */\n  static show(target: HTMLElement) {\n    if (\n      target.classList.contains(Namespace.css.collapsing) ||\n      target.classList.contains(Namespace.css.show)\n    )\n      return;\n\n    let timeOut = null;\n    const complete = () => {\n      Collapse.showImmediately(target);\n      timeOut = null;\n    };\n\n    target.style.height = '0';\n    target.classList.remove(Namespace.css.collapse);\n    target.classList.add(Namespace.css.collapsing);\n\n    //eslint-disable-next-line @typescript-eslint/no-unused-vars\n    timeOut = setTimeout(\n      complete,\n      this.getTransitionDurationFromElement(target)\n    );\n    target.style.height = `${target.scrollHeight}px`;\n  }\n\n  /**\n   * Skips any animation or timeouts and immediately set the element to hide.\n   * @param target\n   */\n  static hideImmediately(target: HTMLElement) {\n    if (!target) return;\n    target.classList.remove(Namespace.css.collapsing, Namespace.css.show);\n    target.classList.add(Namespace.css.collapse);\n  }\n\n  /**\n   * If `target` is not already hidden, then hide after the animation.\n   * @param target HTML Element\n   */\n  static hide(target: HTMLElement) {\n    if (\n      target.classList.contains(Namespace.css.collapsing) ||\n      !target.classList.contains(Namespace.css.show)\n    )\n      return;\n\n    let timeOut = null;\n    const complete = () => {\n      Collapse.hideImmediately(target);\n      timeOut = null;\n    };\n\n    target.style.height = `${target.getBoundingClientRect()['height']}px`;\n\n    const reflow = (element) => element.offsetHeight;\n\n    reflow(target);\n\n    target.classList.remove(Namespace.css.collapse, Namespace.css.show);\n    target.classList.add(Namespace.css.collapsing);\n    target.style.height = '';\n\n    //eslint-disable-next-line @typescript-eslint/no-unused-vars\n    timeOut = setTimeout(\n      complete,\n      this.getTransitionDurationFromElement(target)\n    );\n  }\n\n  /**\n   * Gets the transition duration from the `element` by getting css properties\n   * `transition-duration` and `transition-delay`\n   * @param element HTML Element\n   */\n  private static getTransitionDurationFromElement = (element: HTMLElement) => {\n    if (!element) {\n      return 0;\n    }\n\n    // Get transition-duration of the element\n    let { transitionDuration, transitionDelay } =\n      window.getComputedStyle(element);\n\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n    // Return 0 if element or transition duration is not found\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    }\n\n    // If multiple durations are defined, take the first\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n\n    return (\n      (Number.parseFloat(transitionDuration) +\n        Number.parseFloat(transitionDelay)) *\n      1000\n    );\n  };\n}\n", "import DateDisplay from './calendar/date-display';\nimport MonthDisplay from './calendar/month-display';\nimport YearDisplay from './calendar/year-display';\nimport DecadeDisplay from './calendar/decade-display';\nimport TimeDisplay from './time/time-display';\nimport HourDisplay from './time/hour-display';\nimport MinuteDisplay from './time/minute-display';\nimport SecondDisplay from './time/second-display';\nimport { DateTime, Unit } from '../datetime';\nimport Namespace from '../utilities/namespace';\nimport { HideEvent } from '../utilities/event-types';\nimport Collapse from './collapse';\nimport Validation from '../validation';\nimport Dates from '../dates';\nimport { EventEmitters, ViewUpdateValues } from '../utilities/event-emitter';\nimport { serviceLocator } from '../utilities/service-locator';\nimport ActionTypes from '../utilities/action-types';\nimport CalendarModes from '../utilities/calendar-modes';\nimport { OptionsStore } from '../utilities/optionsStore';\n\n/**\n * Main class for all things display related.\n */\nexport default class Display {\n  private _widget: HTMLElement;\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _popperInstance: any;\n  private _isVisible = false;\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n  private _eventEmitters: EventEmitters;\n  private _keyboardEventBound = this._keyboardEvent.bind(this);\n\n  dateDisplay: DateDisplay;\n  monthDisplay: MonthDisplay;\n  yearDisplay: YearDisplay;\n  decadeDisplay: DecadeDisplay;\n  timeDisplay: TimeDisplay;\n  hourDisplay: HourDisplay;\n  minuteDisplay: MinuteDisplay;\n  secondDisplay: SecondDisplay;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.validation = serviceLocator.locate(Validation);\n    this.dates = serviceLocator.locate(Dates);\n\n    this.dateDisplay = serviceLocator.locate(DateDisplay);\n    this.monthDisplay = serviceLocator.locate(MonthDisplay);\n    this.yearDisplay = serviceLocator.locate(YearDisplay);\n    this.decadeDisplay = serviceLocator.locate(DecadeDisplay);\n    this.timeDisplay = serviceLocator.locate(TimeDisplay);\n    this.hourDisplay = serviceLocator.locate(HourDisplay);\n    this.minuteDisplay = serviceLocator.locate(MinuteDisplay);\n    this.secondDisplay = serviceLocator.locate(SecondDisplay);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n    this._widget = undefined;\n\n    this._eventEmitters.updateDisplay.subscribe((result: ViewUpdateValues) => {\n      this._update(result);\n    });\n  }\n\n  /**\n   * Returns the widget body or undefined\n   * @private\n   */\n  get widget(): HTMLElement | undefined {\n    return this._widget;\n  }\n\n  get dateContainer(): HTMLElement | undefined {\n    return this.widget?.querySelector(`div.${Namespace.css.dateContainer}`);\n  }\n\n  get timeContainer(): HTMLElement | undefined {\n    return this.widget?.querySelector(`div.${Namespace.css.timeContainer}`);\n  }\n\n  /**\n   * Returns this visible state of the picker (shown)\n   */\n  get isVisible() {\n    return this._isVisible;\n  }\n\n  /**\n   * Updates the table for a particular unit. Used when an option as changed or\n   * whenever the class list might need to be refreshed.\n   * @param unit\n   * @private\n   */\n  _update(unit: ViewUpdateValues): void {\n    if (!this.widget) return;\n    switch (unit) {\n      case Unit.seconds:\n        this.secondDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.minutes:\n        this.minuteDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.hours:\n        this.hourDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.date:\n        this.dateDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.month:\n        this.monthDisplay._update(this.widget, this.paint);\n        break;\n      case Unit.year:\n        this.yearDisplay._update(this.widget, this.paint);\n        break;\n      case 'decade':\n        this.decadeDisplay._update(this.widget, this.paint);\n        break;\n      case 'clock':\n        if (!this._hasTime) break;\n        this.timeDisplay._update(this.widget);\n        this._update(Unit.hours);\n        this._update(Unit.minutes);\n        this._update(Unit.seconds);\n        break;\n      case 'calendar':\n        this._update(Unit.date);\n        this._update(Unit.year);\n        this._update(Unit.month);\n        this.decadeDisplay._update(this.widget, this.paint);\n        this._updateCalendarHeader();\n        break;\n      case 'all':\n        if (this._hasTime) {\n          this._update('clock');\n        }\n        if (this._hasDate) {\n          this._update('calendar');\n        }\n    }\n  }\n\n  // noinspection JSUnusedLocalSymbols\n  /**\n   * Allows developers to add/remove classes from an element.\n   * @param _unit\n   * @param _date\n   * @param _classes\n   * @param _element\n   */\n\n  /* eslint-disable @typescript-eslint/no-unused-vars */\n  paint(\n    _unit: Unit | 'decade',\n    _date: DateTime,\n    _classes: string[],\n    _element: HTMLElement\n  ) {\n    // implemented in plugin\n  }\n\n  /**\n   * Shows the picker and creates a Popper instance if needed.\n   * Add document click event to hide when clicking outside the picker.\n   * fires Events#show\n   */\n  show(): void {\n    if (this.widget == undefined) {\n      this._showSetDefaultIfNeeded();\n\n      this._buildWidget();\n      this._updateTheme();\n\n      this._showSetupViewMode();\n\n      if (!this.optionsStore.options.display.inline) {\n        // If needed to change the parent container\n        const container = this.optionsStore.options?.container || document.body;\n        const placement =\n          this.optionsStore.options?.display?.placement || 'bottom';\n\n        container.appendChild(this.widget);\n        const handleFocus = this._handleFocus.bind(this);\n        this.createPopup(this.optionsStore.element, this.widget, {\n          modifiers: [\n            { name: 'eventListeners', enabled: true },\n            {\n              name: 'focusDate',\n              enabled: true,\n              phase: 'afterWrite',\n              fn() {\n                handleFocus();\n              },\n            },\n          ],\n          //#2400\n          placement:\n            document.documentElement.dir === 'rtl'\n              ? `${placement}-end`\n              : `${placement}-start`,\n        }).then(() => {\n          this._handleFocus();\n        });\n      } else {\n        this.optionsStore.element.appendChild(this.widget);\n      }\n\n      if (this.optionsStore.options.display.viewMode == 'clock') {\n        this._eventEmitters.action.emit({\n          e: null,\n          action: ActionTypes.showClock,\n        });\n      }\n\n      this.widget\n        .querySelectorAll('[data-action]')\n        .forEach((element) =>\n          element.addEventListener('click', this._actionsClickEvent)\n        );\n\n      // show the clock when using sideBySide\n      if (this._hasTime && this.optionsStore.options.display.sideBySide) {\n        this.timeDisplay._update(this.widget);\n        (\n          this.widget.getElementsByClassName(\n            Namespace.css.clockContainer\n          )[0] as HTMLElement\n        ).style.display = 'grid';\n      }\n    }\n\n    this.widget.classList.add(Namespace.css.show);\n    if (!this.optionsStore.options.display.inline) {\n      this.updatePopup();\n      document.addEventListener('click', this._documentClickEvent);\n    }\n    this._eventEmitters.triggerEvent.emit({ type: Namespace.events.show });\n    this._isVisible = true;\n\n    if (this.optionsStore.options.display.keyboardNavigation) {\n      this.widget.addEventListener('keydown', this._keyboardEventBound);\n    }\n  }\n\n  private _showSetupViewMode() {\n    // If modeView is only clock\n    const onlyClock = this._hasTime && !this._hasDate;\n\n    // reset the view to the clock if there's no date components\n    if (onlyClock) {\n      this.optionsStore.currentView = 'clock';\n      this._eventEmitters.action.emit({\n        e: null,\n        action: ActionTypes.showClock,\n      });\n    }\n    // otherwise return to the calendar view\n    else if (!this.optionsStore.currentCalendarViewMode) {\n      this.optionsStore.currentCalendarViewMode =\n        this.optionsStore.minimumCalendarViewMode;\n    }\n\n    if (!onlyClock && this.optionsStore.options.display.viewMode !== 'clock') {\n      if (this._hasTime) {\n        if (!this.optionsStore.options.display.sideBySide) {\n          Collapse.hideImmediately(this.timeContainer);\n        } else {\n          Collapse.show(this.timeContainer);\n        }\n      }\n      Collapse.show(this.dateContainer);\n    }\n\n    if (this._hasDate) {\n      this._showMode();\n    }\n  }\n\n  private _showSetDefaultIfNeeded() {\n    if (this.dates.picked.length != 0) return;\n\n    if (\n      this.optionsStore.options.useCurrent &&\n      !this.optionsStore.options.defaultDate\n    ) {\n      const date = new DateTime().setLocalization(\n        this.optionsStore.options.localization\n      );\n      if (!this.optionsStore.options.keepInvalid) {\n        let tries = 0;\n        let direction = 1;\n        if (this.optionsStore.options.restrictions.maxDate?.isBefore(date)) {\n          direction = -1;\n        }\n        while (!this.validation.isValid(date) && tries > 31) {\n          date.manipulate(direction, Unit.date);\n          tries++;\n        }\n      }\n      this.dates.setValue(date);\n    }\n\n    if (this.optionsStore.options.defaultDate) {\n      this.dates.setValue(this.optionsStore.options.defaultDate);\n    }\n  }\n\n  async createPopup(\n    element: HTMLElement,\n    widget: HTMLElement,\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    options: any\n  ): Promise<void> {\n    let createPopperFunction;\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if ((window as any)?.Popper) {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      createPopperFunction = (window as any)?.Popper?.createPopper;\n    } else {\n      const { createPopper } = await import('@popperjs/core');\n      createPopperFunction = createPopper;\n    }\n    if (createPopperFunction) {\n      this._popperInstance = createPopperFunction(element, widget, options);\n    }\n  }\n\n  updatePopup(): void {\n    if (!this._popperInstance) return;\n    this._popperInstance.update();\n    //this._handleFocus();\n  }\n\n  /**\n   * Changes the calendar view mode. E.g. month <-> year\n   * @param direction -/+ number to move currentViewMode\n   * @private\n   */\n  _showMode(direction?: number): void {\n    if (!this.widget) {\n      return;\n    }\n    if (direction) {\n      const max = Math.max(\n        this.optionsStore.minimumCalendarViewMode,\n        Math.min(3, this.optionsStore.currentCalendarViewMode + direction)\n      );\n      if (this.optionsStore.currentCalendarViewMode == max) return;\n      this.optionsStore.currentCalendarViewMode = max;\n    }\n\n    this.widget\n      .querySelectorAll(\n        `.${Namespace.css.dateContainer} > div:not(.${Namespace.css.calendarHeader}), .${Namespace.css.timeContainer} > div:not(.${Namespace.css.clockContainer})`\n      )\n      .forEach((e: HTMLElement) => (e.style.display = 'none'));\n\n    const datePickerMode =\n      CalendarModes[this.optionsStore.currentCalendarViewMode];\n    const picker: HTMLElement = this.widget.querySelector(\n      `.${datePickerMode.className}`\n    );\n\n    switch (datePickerMode.className) {\n      case Namespace.css.decadesContainer:\n        this.decadeDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.yearsContainer:\n        this.yearDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.monthsContainer:\n        this.monthDisplay._update(this.widget, this.paint);\n        break;\n      case Namespace.css.daysContainer:\n        this.dateDisplay._update(this.widget, this.paint);\n        break;\n    }\n\n    picker.style.display = 'grid';\n\n    if (this.optionsStore.options.display.sideBySide)\n      (<HTMLElement>(\n        this.widget.querySelectorAll(`.${Namespace.css.clockContainer}`)[0]\n      )).style.display = 'grid';\n\n    this._updateCalendarHeader();\n    this._eventEmitters.viewUpdate.emit();\n    this.findViewDateElement()?.focus();\n  }\n\n  /**\n   * Changes the theme. E.g. light, dark or auto\n   * @param theme the theme name\n   * @private\n   */\n  _updateTheme(theme?: 'light' | 'dark' | 'auto'): void {\n    if (!this.widget) {\n      return;\n    }\n    if (theme) {\n      if (this.optionsStore.options.display.theme === theme) return;\n      this.optionsStore.options.display.theme = theme;\n    }\n\n    this.widget.classList.remove('light', 'dark');\n    this.widget.classList.add(this._getThemeClass());\n\n    if (this.optionsStore.options.display.theme === 'auto') {\n      window\n        .matchMedia(Namespace.css.isDarkPreferredQuery)\n        .addEventListener('change', () => this._updateTheme());\n    } else {\n      window\n        .matchMedia(Namespace.css.isDarkPreferredQuery)\n        .removeEventListener('change', () => this._updateTheme());\n    }\n  }\n\n  _getThemeClass(): string {\n    const currentTheme = this.optionsStore.options.display.theme || 'auto';\n\n    const isDarkMode =\n      window.matchMedia &&\n      window.matchMedia(Namespace.css.isDarkPreferredQuery).matches;\n\n    switch (currentTheme) {\n      case 'light':\n        return Namespace.css.lightTheme;\n      case 'dark':\n        return Namespace.css.darkTheme;\n      case 'auto':\n        return isDarkMode ? Namespace.css.darkTheme : Namespace.css.lightTheme;\n    }\n  }\n\n  _updateCalendarHeader() {\n    if (!this._hasDate) return;\n    const showing = [\n      ...this.widget.querySelector(\n        `.${Namespace.css.dateContainer} div[style*=\"display: grid\"]`\n      ).classList,\n    ].find((x) => x.startsWith(Namespace.css.dateContainer));\n\n    const [previous, switcher, next] = this.widget\n      .getElementsByClassName(Namespace.css.calendarHeader)[0]\n      .getElementsByTagName('div');\n\n    switch (showing) {\n      case Namespace.css.decadesContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousCentury\n        );\n        switcher.setAttribute('title', '');\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextCentury\n        );\n        break;\n      case Namespace.css.yearsContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousDecade\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectDecade\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextDecade\n        );\n        break;\n      case Namespace.css.monthsContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousYear\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectYear\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextYear\n        );\n        break;\n      case Namespace.css.daysContainer:\n        previous.setAttribute(\n          'title',\n          this.optionsStore.options.localization.previousMonth\n        );\n        switcher.setAttribute(\n          'title',\n          this.optionsStore.options.localization.selectMonth\n        );\n        next.setAttribute(\n          'title',\n          this.optionsStore.options.localization.nextMonth\n        );\n        switcher.setAttribute(\n          showing,\n          this.optionsStore.viewDate.format(\n            this.optionsStore.options.localization.dayViewHeaderFormat\n          )\n        );\n        break;\n    }\n    switcher.innerText = switcher.getAttribute(showing);\n  }\n\n  /**\n   * Hides the picker if needed.\n   * Remove document click event to hide when clicking outside the picker.\n   * fires Events#hide\n   */\n  hide(): void {\n    if (!this.widget || !this._isVisible) return;\n\n    this.widget.classList.remove(Namespace.css.show);\n\n    if (this._isVisible) {\n      this._eventEmitters.triggerEvent.emit({\n        type: Namespace.events.hide,\n        date: this.optionsStore.unset ? null : this.dates.lastPicked?.clone,\n      } as HideEvent);\n      this._isVisible = false;\n    }\n\n    document.removeEventListener('click', this._documentClickEvent);\n    if (this.optionsStore.options.display.keyboardNavigation) {\n      this.widget.removeEventListener('keydown', this._keyboardEventBound);\n    }\n    if (this.optionsStore.toggle) this.optionsStore.toggle.focus();\n    else if (this.optionsStore.input) this.optionsStore.input.focus();\n  }\n\n  /**\n   * Toggles the picker's open state. Fires a show/hide event depending.\n   */\n  toggle() {\n    return this._isVisible ? this.hide() : this.show();\n  }\n\n  /**\n   * Removes document and data-action click listener and reset the widget\n   * @private\n   */\n  _dispose() {\n    document.removeEventListener('click', this._documentClickEvent);\n    if (this._popperInstance) this._popperInstance.destroy();\n    if (!this.widget) return;\n    this.widget\n      .querySelectorAll('[data-action]')\n      .forEach((element) =>\n        element.removeEventListener('click', this._actionsClickEvent)\n      );\n    this.widget.parentNode.removeChild(this.widget);\n    this._widget = undefined;\n  }\n\n  /**\n   * Builds the widgets html template.\n   * @private\n   */\n  private _buildWidget(): HTMLElement {\n    const template = document.createElement('div');\n    template.tabIndex = -1;\n    template.classList.add(Namespace.css.widget);\n    template.setAttribute('role', 'widget');\n\n    const dateView = document.createElement('div');\n    dateView.tabIndex = -1;\n    dateView.classList.add(Namespace.css.dateContainer);\n    dateView.append(\n      this.getHeadTemplate(),\n      this.decadeDisplay.getPicker(),\n      this.yearDisplay.getPicker(),\n      this.monthDisplay.getPicker(),\n      this.dateDisplay.getPicker()\n    );\n\n    const timeView = document.createElement('div');\n    timeView.tabIndex = -1;\n    timeView.classList.add(Namespace.css.timeContainer);\n    timeView.appendChild(this.timeDisplay.getPicker(this._iconTag.bind(this)));\n    timeView.appendChild(this.hourDisplay.getPicker());\n    timeView.appendChild(this.minuteDisplay.getPicker());\n    timeView.appendChild(this.secondDisplay.getPicker());\n\n    const toolbar = document.createElement('div');\n    toolbar.tabIndex = -1;\n    toolbar.classList.add(Namespace.css.toolbar);\n    toolbar.append(...this.getToolbarElements());\n\n    if (this.optionsStore.options.display.inline) {\n      template.classList.add(Namespace.css.inline);\n    }\n\n    if (this.optionsStore.options.display.calendarWeeks) {\n      template.classList.add('calendarWeeks');\n    }\n\n    if (this.optionsStore.options.display.sideBySide && this._hasDateAndTime) {\n      this._buildWidgetSideBySide(template, dateView, timeView, toolbar);\n      return;\n    }\n\n    if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n      template.appendChild(toolbar);\n    }\n\n    const setupComponentView = (\n      hasFirst: boolean,\n      hasSecond: boolean,\n      element: HTMLElement,\n      shouldShow: boolean\n    ) => {\n      if (!hasFirst) return;\n      if (hasSecond) {\n        element.classList.add(Namespace.css.collapse);\n        if (shouldShow) element.classList.add(Namespace.css.show);\n      }\n      template.appendChild(element);\n    };\n\n    setupComponentView(\n      this._hasDate,\n      this._hasTime,\n      dateView,\n      this.optionsStore.options.display.viewMode !== 'clock'\n    );\n\n    setupComponentView(\n      this._hasTime,\n      this._hasDate,\n      timeView,\n      this.optionsStore.options.display.viewMode === 'clock'\n    );\n\n    if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n      template.appendChild(toolbar);\n    }\n\n    const arrow = document.createElement('div');\n    arrow.classList.add('arrow');\n    arrow.setAttribute('data-popper-arrow', '');\n    template.appendChild(arrow);\n\n    this._widget = template;\n  }\n\n  private _buildWidgetSideBySide(\n    template: HTMLDivElement,\n    dateView: HTMLDivElement,\n    timeView: HTMLDivElement,\n    toolbar: HTMLDivElement\n  ) {\n    template.classList.add(Namespace.css.sideBySide);\n    if (this.optionsStore.options.display.toolbarPlacement === 'top') {\n      template.appendChild(toolbar);\n    }\n    const row = document.createElement('div');\n    row.classList.add('td-row');\n    dateView.classList.add('td-half');\n    timeView.classList.add('td-half');\n\n    row.appendChild(dateView);\n    row.appendChild(timeView);\n    template.appendChild(row);\n    if (this.optionsStore.options.display.toolbarPlacement === 'bottom') {\n      template.appendChild(toolbar);\n    }\n    this._widget = template;\n  }\n\n  /**\n   * Returns true if the hours, minutes, or seconds component is turned on\n   */\n  get _hasTime(): boolean {\n    return (\n      this.optionsStore.options.display.components.clock &&\n      (this.optionsStore.options.display.components.hours ||\n        this.optionsStore.options.display.components.minutes ||\n        this.optionsStore.options.display.components.seconds)\n    );\n  }\n\n  /**\n   * Returns true if the year, month, or date component is turned on\n   */\n  get _hasDate(): boolean {\n    return (\n      this.optionsStore.options.display.components.calendar &&\n      (this.optionsStore.options.display.components.year ||\n        this.optionsStore.options.display.components.month ||\n        this.optionsStore.options.display.components.date)\n    );\n  }\n\n  get _hasDateAndTime(): boolean {\n    return this._hasDate && this._hasTime;\n  }\n\n  /**\n   * Get the toolbar html based on options like buttons => today\n   * @private\n   */\n  getToolbarElements(): HTMLElement[] {\n    const toolbar = [];\n\n    if (this.optionsStore.options.display.buttons.today) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.today);\n      div.setAttribute('title', this.optionsStore.options.localization.today);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.today)\n      );\n      toolbar.push(div);\n    }\n    if (\n      !this.optionsStore.options.display.sideBySide &&\n      this._hasDate &&\n      this._hasTime\n    ) {\n      let title, icon;\n      if (this.optionsStore.options.display.viewMode === 'clock') {\n        title = this.optionsStore.options.localization.selectDate;\n        icon = this.optionsStore.options.display.icons.date;\n      } else {\n        title = this.optionsStore.options.localization.selectTime;\n        icon = this.optionsStore.options.display.icons.time;\n      }\n\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.togglePicker);\n      div.setAttribute('title', title);\n\n      div.appendChild(this._iconTag(icon));\n      toolbar.push(div);\n    }\n    if (this.optionsStore.options.display.buttons.clear) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.clear);\n      div.setAttribute('title', this.optionsStore.options.localization.clear);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.clear)\n      );\n      toolbar.push(div);\n    }\n    if (this.optionsStore.options.display.buttons.close) {\n      const div = document.createElement('div');\n      div.tabIndex = -1;\n      div.setAttribute('data-action', ActionTypes.close);\n      div.setAttribute('title', this.optionsStore.options.localization.close);\n\n      div.appendChild(\n        this._iconTag(this.optionsStore.options.display.icons.close)\n      );\n      toolbar.push(div);\n    }\n\n    return toolbar;\n  }\n\n  /***\n   * Builds the base header template with next and previous icons\n   * @private\n   */\n  getHeadTemplate(): HTMLElement {\n    const calendarHeader = document.createElement('div');\n    calendarHeader.classList.add(Namespace.css.calendarHeader);\n\n    const previous = document.createElement('div');\n    previous.classList.add(Namespace.css.previous);\n    previous.setAttribute('data-action', ActionTypes.previous);\n    previous.appendChild(\n      this._iconTag(this.optionsStore.options.display.icons.previous)\n    );\n    previous.tabIndex = -1;\n\n    const switcher = document.createElement('div');\n    switcher.classList.add(Namespace.css.switch);\n    switcher.setAttribute('data-action', ActionTypes.changeCalendarView);\n    switcher.tabIndex = -1;\n\n    const next = document.createElement('div');\n    next.classList.add(Namespace.css.next);\n    next.setAttribute('data-action', ActionTypes.next);\n    next.appendChild(\n      this._iconTag(this.optionsStore.options.display.icons.next)\n    );\n    next.tabIndex = -1;\n\n    calendarHeader.append(previous, switcher, next);\n    return calendarHeader;\n  }\n\n  /**\n   * Builds an icon tag as either an `<i>`\n   * or with icons => type is `sprites` then a svg tag instead\n   * @param iconClass\n   * @private\n   */\n  _iconTag(iconClass: string): HTMLElement | SVGElement {\n    if (this.optionsStore.options.display.icons.type === 'sprites') {\n      const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n      const icon = document.createElementNS(\n        'http://www.w3.org/2000/svg',\n        'use'\n      );\n      icon.setAttribute('xlink:href', iconClass); // Deprecated. Included for backward compatibility\n      icon.setAttribute('href', iconClass);\n      svg.appendChild(icon);\n\n      return svg;\n    }\n    const icon = document.createElement('i');\n    icon.classList.add(...iconClass.split(' '));\n    return icon;\n  }\n\n  /**\n   * A document click event to hide the widget if click is outside\n   * @private\n   * @param e MouseEvent\n   */\n  private _documentClickEvent = (e: MouseEvent) => {\n    if (this.optionsStore.options.debug || (window as any).debug) return; //eslint-disable-line @typescript-eslint/no-explicit-any\n\n    if (\n      this._isVisible &&\n      !e.composedPath().includes(this.widget) && // click inside the widget\n      !e.composedPath()?.includes(this.optionsStore.element) // click on the element\n    ) {\n      this.hide();\n    }\n  };\n\n  /**\n   * Click event for any action like selecting a date\n   * @param e MouseEvent\n   * @private\n   */\n  private _actionsClickEvent = (e: MouseEvent) => {\n    this._eventEmitters.action.emit({ e: e });\n  };\n\n  /**\n   * Causes the widget to get rebuilt on next show. If the picker is already open\n   * then hide and reshow it.\n   * @private\n   */\n  _rebuild() {\n    const wasVisible = this._isVisible;\n    this._dispose();\n    if (wasVisible) this.show();\n  }\n\n  refreshCurrentView() {\n    //if the widget is not showing, just destroy it\n    if (!this._isVisible) this._dispose();\n\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        this._update('clock');\n        break;\n      case 'calendar':\n        this._update(Unit.date);\n        break;\n      case 'months':\n        this._update(Unit.month);\n        break;\n      case 'years':\n        this._update(Unit.year);\n        break;\n      case 'decades':\n        this._update('decade');\n        break;\n    }\n  }\n\n  private _keyboardEvent(event: KeyboardEvent) {\n    if (this.optionsStore.currentView === 'clock') {\n      this._handleKeyDownClock(event);\n      return;\n    }\n    this._handleKeyDownDate(event);\n    return false;\n  }\n\n  public findViewDateElement(): HTMLElement {\n    let selector = '';\n    let dataValue = '';\n\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        break;\n      case 'calendar':\n        selector = Namespace.css.daysContainer;\n        dataValue = this.optionsStore.viewDate.dateToDataValue();\n        break;\n      case 'months':\n        selector = Namespace.css.monthsContainer;\n        dataValue = this.optionsStore.viewDate.month.toString();\n        break;\n      case 'years':\n        selector = Namespace.css.yearsContainer;\n        dataValue = this.optionsStore.viewDate.year.toString();\n        break;\n      case 'decades':\n        selector = Namespace.css.decadesContainer;\n        dataValue = (\n          Math.floor(this.optionsStore.viewDate.year / 10) * 10\n        ).toString();\n        break;\n    }\n\n    return this.widget.querySelector(\n      `.${selector} > div[data-value=\"${dataValue}\"]`\n    );\n  }\n\n  private _handleKeyDownDate(event: KeyboardEvent) {\n    let flag = false;\n    const activeElement = document.activeElement as HTMLElement;\n\n    let unit = null;\n    let verticalChange = 7;\n    let horizontalChange = 1;\n    let change = 1;\n    const currentView = this.optionsStore.currentView;\n    switch (currentView) {\n      case 'calendar':\n        unit = Unit.date;\n        break;\n      case 'months':\n        unit = Unit.month;\n        verticalChange = 3;\n        horizontalChange = 1;\n        break;\n      case 'years':\n        unit = Unit.year;\n        verticalChange = 3;\n        horizontalChange = 1;\n        break;\n      case 'decades':\n        unit = Unit.year;\n        verticalChange = 30;\n        horizontalChange = 10;\n        break;\n    }\n\n    switch (event.key) {\n      case 'Esc':\n      case 'Escape':\n        this._eventEmitters.action.emit({ e: null, action: ActionTypes.close });\n        break;\n\n      case ' ':\n      case 'Enter':\n        activeElement.click();\n\n        event.stopPropagation();\n        event.preventDefault();\n        return;\n\n      case 'Tab':\n        this._handleTab(activeElement, event);\n        return;\n\n      case 'Right':\n      case 'ArrowRight':\n        change = horizontalChange;\n        flag = true;\n        break;\n\n      case 'Left':\n      case 'ArrowLeft':\n        flag = true;\n        change = -horizontalChange;\n        break;\n\n      case 'Down':\n      case 'ArrowDown':\n        flag = true;\n        change = verticalChange;\n        break;\n\n      case 'Up':\n      case 'ArrowUp':\n        flag = true;\n        change = -verticalChange;\n        break;\n\n      case 'PageDown':\n        switch (currentView) {\n          case 'calendar':\n            unit = event.shiftKey ? Unit.year : Unit.month;\n            change = 1;\n            break;\n          case 'months':\n            unit = Unit.year;\n            change = event.shiftKey ? 10 : 1;\n            break;\n          case 'years':\n          case 'decades':\n            unit = Unit.year;\n            change = event.shiftKey ? 100 : 10;\n            break;\n        }\n        flag = true;\n        break;\n\n      case 'PageUp':\n        switch (currentView) {\n          case 'calendar':\n            unit = event.shiftKey ? Unit.year : Unit.month;\n            change = -1;\n            break;\n          case 'months':\n            unit = Unit.year;\n            change = -(event.shiftKey ? 10 : 1);\n            break;\n          case 'years':\n          case 'decades':\n            unit = Unit.year;\n            change = -(event.shiftKey ? 100 : 10);\n            break;\n        }\n        flag = true;\n        break;\n\n      case 'Home':\n        this.optionsStore.viewDate = this.optionsStore.viewDate.clone.startOf(\n          'weekDay',\n          this.optionsStore.options.localization.startOfTheWeek\n        );\n        flag = true;\n        unit = null;\n        break;\n\n      case 'End':\n        this.optionsStore.viewDate = this.optionsStore.viewDate.clone.endOf(\n          'weekDay',\n          this.optionsStore.options.localization.startOfTheWeek\n        );\n        flag = true;\n        unit = null;\n        break;\n    }\n\n    if (!flag) return;\n\n    let newViewDate = this.optionsStore.viewDate;\n\n    if (unit) {\n      newViewDate = newViewDate.clone.manipulate(change, unit);\n    }\n\n    this._eventEmitters.updateViewDate.emit(newViewDate);\n\n    const divWithValue = this.findViewDateElement();\n    if (divWithValue) {\n      divWithValue.focus();\n    }\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleKeyDownClock(event: KeyboardEvent) {\n    let flag = false;\n    const activeElement = document.activeElement as HTMLElement;\n\n    // Should find which of hour, minute, or seconds sub-windows is open\n    const visibleElement = this.widget.querySelector(\n      `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"]`\n    );\n\n    let subView = Namespace.css.clockContainer;\n\n    if (visibleElement.classList.contains(Namespace.css.hourContainer)) {\n      subView = Namespace.css.hourContainer;\n    }\n    if (visibleElement.classList.contains(Namespace.css.minuteContainer)) {\n      subView = Namespace.css.minuteContainer;\n    }\n    if (visibleElement.classList.contains(Namespace.css.secondContainer)) {\n      subView = Namespace.css.secondContainer;\n    }\n\n    switch (event.key) {\n      case 'Esc':\n      case 'Escape':\n        this._eventEmitters.action.emit({ e: null, action: ActionTypes.close });\n        break;\n\n      case ' ':\n      case 'Enter':\n        activeElement.click();\n\n        event.stopPropagation();\n        event.preventDefault();\n        return;\n\n      case 'Tab':\n        this._handleTab(activeElement, event);\n        return;\n    }\n\n    if (subView === Namespace.css.clockContainer) return;\n\n    const cells = [...visibleElement.querySelectorAll('div')];\n    const currentIndex = cells.indexOf(\n      document.activeElement as HTMLDivElement\n    );\n    const columnCount = 4;\n\n    let targetIndex: number;\n    switch (event.key) {\n      case 'Right':\n      case 'ArrowRight':\n        targetIndex = currentIndex < cells.length - 1 ? currentIndex + 1 : null;\n        flag = true;\n        break;\n\n      case 'Left':\n      case 'ArrowLeft':\n        flag = true;\n        targetIndex = currentIndex > 0 ? currentIndex - 1 : null;\n        break;\n\n      case 'Down':\n      case 'ArrowDown':\n        targetIndex =\n          currentIndex + columnCount < cells.length\n            ? currentIndex + columnCount\n            : null;\n        flag = true;\n        break;\n\n      case 'Up':\n      case 'ArrowUp':\n        targetIndex =\n          currentIndex - columnCount >= 0 ? currentIndex - columnCount : null;\n        flag = true;\n        break;\n    }\n\n    if (!flag) return;\n\n    if (targetIndex !== undefined && targetIndex !== null) {\n      cells[targetIndex].focus();\n    }\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleTab(activeElement: HTMLElement, event: KeyboardEvent) {\n    const shiftKey = event.shiftKey;\n    // gather tab targets\n    const addCalendarHeaderTargets = () => {\n      const calendarHeaderItems = this.widget.querySelectorAll(\n        `.${Namespace.css.calendarHeader} > div`\n      ) as NodeListOf<HTMLElement>;\n      tabTargets.push(...calendarHeaderItems);\n    };\n\n    const tabTargets: HTMLElement[] = [];\n    console.log(this.optionsStore.currentView);\n    switch (this.optionsStore.currentView) {\n      case 'clock':\n        {\n          tabTargets.push(\n            ...(this.widget.querySelectorAll(\n              `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"] > div[data-action]`\n            ) as NodeListOf<HTMLElement>)\n          );\n\n          const clock = this.widget.querySelectorAll(\n            `.${Namespace.css.clockContainer}`\n          )[0] as HTMLElement;\n\n          // add meridiem if it's in view\n          if (clock?.style.display === 'grid') {\n            tabTargets.push(\n              ...(this.widget.querySelectorAll(\n                `.${Namespace.css.toggleMeridiem}`\n              ) as NodeListOf<HTMLElement>)\n            );\n          }\n        }\n        break;\n      case 'calendar':\n      case 'months':\n      case 'years':\n      case 'decades':\n        addCalendarHeaderTargets();\n        tabTargets.push(this.findViewDateElement());\n        break;\n    }\n\n    const toolbarItems = this.widget.querySelectorAll(\n      `.${Namespace.css.toolbar} > div`\n    ) as NodeListOf<HTMLElement>;\n    tabTargets.push(...toolbarItems);\n\n    const index = tabTargets.indexOf(activeElement);\n    if (index === -1) return;\n\n    if (shiftKey) {\n      if (index === 0) {\n        tabTargets[tabTargets.length - 1].focus();\n      } else {\n        tabTargets[index - 1].focus();\n      }\n    } else {\n      if (index === tabTargets.length - 1) {\n        tabTargets[0].focus();\n      } else {\n        tabTargets[index + 1].focus();\n      }\n    }\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  private _handleFocus() {\n    if (this.optionsStore.currentView === 'clock') this._handleFocusClock();\n    else this.findViewDateElement().focus();\n  }\n\n  private _handleFocusClock() {\n    (\n      this.widget.querySelector(\n        `.${Namespace.css.timeContainer} > div[style*=\"display: grid\"]`\n      ).children[0] as HTMLElement\n    ).focus();\n  }\n}\n\nexport type Paint = (\n  unit: Unit | 'decade',\n  innerDate: DateTime,\n  classes: string[],\n  element: HTMLElement\n) => void;\n", "import { DateTime, Unit } from './datetime';\nimport Collapse from './display/collapse';\nimport Namespace from './utilities/namespace';\nimport Dates from './dates';\nimport Validation from './validation';\nimport Display from './display';\nimport { EventEmitters } from './utilities/event-emitter';\nimport { serviceLocator } from './utilities/service-locator.js';\nimport ActionTypes from './utilities/action-types';\nimport CalendarModes from './utilities/calendar-modes';\nimport { OptionsStore } from './utilities/optionsStore';\n\n/**\n * Logic for various click actions\n */\nexport default class Actions {\n  private optionsStore: OptionsStore;\n  private validation: Validation;\n  private dates: Dates;\n  private display: Display;\n  private _eventEmitters: EventEmitters;\n\n  constructor() {\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.dates = serviceLocator.locate(Dates);\n    this.validation = serviceLocator.locate(Validation);\n    this.display = serviceLocator.locate(Display);\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n\n    this._eventEmitters.action.subscribe((result) => {\n      this.do(result.e, result.action);\n    });\n  }\n\n  /**\n   * Performs the selected `action`. See ActionTypes\n   * @param e This is normally a click event\n   * @param action If not provided, then look for a [data-action]\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  do(e: any, action?: ActionTypes) {\n    const currentTarget = e?.currentTarget as HTMLElement;\n    if (currentTarget?.classList?.contains(Namespace.css.disabled)) return;\n    action = action || (currentTarget?.dataset?.action as ActionTypes);\n    const lastPicked = (this.dates.lastPicked || this.optionsStore.viewDate)\n      .clone;\n\n    switch (action) {\n      case ActionTypes.next:\n      case ActionTypes.previous:\n        this.handleNextPrevious(action);\n        break;\n      case ActionTypes.changeCalendarView:\n        this.display._showMode(1);\n        this.display._updateCalendarHeader();\n        break;\n      case ActionTypes.selectMonth:\n      case ActionTypes.selectYear:\n      case ActionTypes.selectDecade:\n        this.handleSelectCalendarMode(action, currentTarget);\n        break;\n      case ActionTypes.selectDay:\n        this.handleSelectDay(currentTarget);\n        break;\n      case ActionTypes.selectHour: {\n        let hour = +currentTarget.dataset.value;\n        if (lastPicked.hours >= 12 && this.optionsStore.isTwelveHour)\n          hour += 12;\n        lastPicked.hours = hour;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.selectMinute: {\n        lastPicked.minutes = +currentTarget.dataset.value;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.selectSecond: {\n        lastPicked.seconds = +currentTarget.dataset.value;\n        this.dates.setValue(lastPicked, this.dates.lastPickedIndex);\n        this.hideOrClock(e);\n        break;\n      }\n      case ActionTypes.incrementHours:\n        this.manipulateAndSet(lastPicked, Unit.hours);\n        break;\n      case ActionTypes.incrementMinutes:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.minutes,\n          this.optionsStore.options.stepping\n        );\n        break;\n      case ActionTypes.incrementSeconds:\n        this.manipulateAndSet(lastPicked, Unit.seconds);\n        break;\n      case ActionTypes.decrementHours:\n        this.manipulateAndSet(lastPicked, Unit.hours, -1);\n        break;\n      case ActionTypes.decrementMinutes:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.minutes,\n          this.optionsStore.options.stepping * -1\n        );\n        break;\n      case ActionTypes.decrementSeconds:\n        this.manipulateAndSet(lastPicked, Unit.seconds, -1);\n        break;\n      case ActionTypes.toggleMeridiem:\n        this.manipulateAndSet(\n          lastPicked,\n          Unit.hours,\n          this.dates.lastPicked.hours >= 12 ? -12 : 12\n        );\n        break;\n      case ActionTypes.togglePicker:\n        this.handleToggle(currentTarget);\n        break;\n      case ActionTypes.showClock:\n      case ActionTypes.showHours:\n      case ActionTypes.showMinutes:\n      case ActionTypes.showSeconds:\n        //make sure the clock is actually displaying\n        if (\n          !this.optionsStore.options.display.sideBySide &&\n          this.optionsStore.currentView !== 'clock'\n        ) {\n          //hide calendar\n          Collapse.hideImmediately(this.display.dateContainer);\n          //show clock\n          Collapse.showImmediately(this.display.timeContainer);\n        }\n        this.handleShowClockContainers(action);\n        break;\n      case ActionTypes.clear:\n        this.dates.setValue(null);\n        this.display._updateCalendarHeader();\n        break;\n      case ActionTypes.close:\n        this.display.hide();\n        break;\n      case ActionTypes.today: {\n        const day = new DateTime().setLocalization(\n          this.optionsStore.options.localization\n        );\n        this._eventEmitters.updateViewDate.emit(day);\n\n        if (!this.validation.isValid(day, Unit.date)) break;\n\n        if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n        else if (this.optionsStore.options.multipleDates) {\n          this.handleMultiDate(day);\n        } else {\n          this.dates.setValue(day, this.dates.lastPickedIndex);\n        }\n        break;\n      }\n    }\n  }\n\n  private handleShowClockContainers(action: ActionTypes) {\n    if (!this.display._hasTime) {\n      Namespace.errorMessages.throwError(\n        'Cannot show clock containers when time is disabled.'\n      );\n      /* ignore coverage: should never happen */\n      return;\n    }\n\n    this.optionsStore.currentView = 'clock';\n    this.display.widget\n      .querySelectorAll(`.${Namespace.css.timeContainer} > div`)\n      .forEach(\n        (htmlElement: HTMLElement) => (htmlElement.style.display = 'none')\n      );\n\n    let classToUse = '';\n    switch (action) {\n      case ActionTypes.showClock:\n        classToUse = Namespace.css.clockContainer;\n        this.display._update('clock');\n        break;\n      case ActionTypes.showHours:\n        classToUse = Namespace.css.hourContainer;\n        this.display._update(Unit.hours);\n        break;\n      case ActionTypes.showMinutes:\n        classToUse = Namespace.css.minuteContainer;\n        this.display._update(Unit.minutes);\n        break;\n      case ActionTypes.showSeconds:\n        classToUse = Namespace.css.secondContainer;\n        this.display._update(Unit.seconds);\n        break;\n    }\n\n    const element = this.display.widget.getElementsByClassName(\n      classToUse\n    )[0] as HTMLElement;\n    element.style.display = 'grid';\n    (<HTMLElement>element.children[0])?.focus();\n  }\n\n  private handleNextPrevious(action: ActionTypes) {\n    const { unit, step } =\n      CalendarModes[this.optionsStore.currentCalendarViewMode];\n    if (action === ActionTypes.next)\n      this.optionsStore.viewDate.manipulate(step, unit);\n    else this.optionsStore.viewDate.manipulate(step * -1, unit);\n    this._eventEmitters.viewUpdate.emit();\n\n    this.display._showMode();\n  }\n\n  /**\n   * After setting the value it will either show the clock or hide the widget.\n   * @param e\n   */\n  private hideOrClock(e) {\n    if (\n      !this.optionsStore.isTwelveHour &&\n      !this.optionsStore.options.display.components.minutes &&\n      !this.optionsStore.options.display.keepOpen &&\n      !this.optionsStore.options.display.inline\n    ) {\n      this.display.hide();\n    } else {\n      this.do(e, ActionTypes.showClock);\n    }\n  }\n\n  /**\n   * Common function to manipulate {@link lastPicked} by `unit`.\n   * @param lastPicked\n   * @param unit\n   * @param value Value to change by\n   */\n  private manipulateAndSet(lastPicked: DateTime, unit: Unit, value = 1) {\n    const newDate = lastPicked.manipulate(value, unit);\n    if (this.validation.isValid(newDate, unit)) {\n      this.dates.setValue(newDate, this.dates.lastPickedIndex);\n    }\n  }\n\n  private handleSelectCalendarMode(\n    action:\n      | ActionTypes.selectMonth\n      | ActionTypes.selectYear\n      | ActionTypes.selectDecade,\n    currentTarget: HTMLElement\n  ) {\n    const value = +currentTarget.dataset.value;\n    switch (action) {\n      case ActionTypes.selectMonth:\n        this.optionsStore.viewDate.month = value;\n        break;\n      case ActionTypes.selectYear:\n      case ActionTypes.selectDecade:\n        this.optionsStore.viewDate.year = value;\n        break;\n    }\n\n    if (\n      this.optionsStore.currentCalendarViewMode ===\n      this.optionsStore.minimumCalendarViewMode\n    ) {\n      this.dates.setValue(\n        this.optionsStore.viewDate,\n        this.dates.lastPickedIndex\n      );\n\n      if (!this.optionsStore.options.display.inline) {\n        this.display.hide();\n      }\n    } else {\n      this.display._showMode(-1);\n    }\n  }\n\n  private handleToggle(currentTarget: HTMLElement) {\n    if (\n      currentTarget.getAttribute('title') ===\n      this.optionsStore.options.localization.selectDate\n    ) {\n      currentTarget.setAttribute(\n        'title',\n        this.optionsStore.options.localization.selectTime\n      );\n      currentTarget.innerHTML = this.display._iconTag(\n        this.optionsStore.options.display.icons.time\n      ).outerHTML;\n\n      this.display._updateCalendarHeader();\n      this.optionsStore.refreshCurrentView();\n    } else {\n      currentTarget.setAttribute(\n        'title',\n        this.optionsStore.options.localization.selectDate\n      );\n      currentTarget.innerHTML = this.display._iconTag(\n        this.optionsStore.options.display.icons.date\n      ).outerHTML;\n      if (this.display._hasTime) {\n        this.handleShowClockContainers(ActionTypes.showClock);\n        this.display._update('clock');\n      }\n    }\n\n    this.display.widget\n      .querySelectorAll(\n        `.${Namespace.css.dateContainer}, .${Namespace.css.timeContainer}`\n      )\n      .forEach((htmlElement: HTMLElement) => Collapse.toggle(htmlElement));\n    this._eventEmitters.viewUpdate.emit();\n    const visible = this.display.widget.querySelector(\n      `.${Namespace.css.collapsing} > div[style*=\"display: grid\"]`\n    ) as HTMLElement;\n    visible?.focus();\n  }\n\n  private handleSelectDay(currentTarget: HTMLElement) {\n    const day = this.optionsStore.viewDate.clone;\n    if (currentTarget.classList.contains(Namespace.css.old)) {\n      day.manipulate(-1, Unit.month);\n    }\n    if (currentTarget.classList.contains(Namespace.css.new)) {\n      day.manipulate(1, Unit.month);\n    }\n\n    day.date = +currentTarget.dataset.day;\n    if (this.optionsStore.options.dateRange) this.handleDateRange(day);\n    else if (this.optionsStore.options.multipleDates) {\n      this.handleMultiDate(day);\n    } else {\n      this.dates.setValue(day, this.dates.lastPickedIndex);\n    }\n\n    if (\n      !this.display._hasTime &&\n      !this.optionsStore.options.display.keepOpen &&\n      !this.optionsStore.options.display.inline &&\n      !this.optionsStore.options.multipleDates &&\n      !this.optionsStore.options.dateRange\n    ) {\n      this.display.hide();\n    }\n  }\n\n  private handleMultiDate(day: DateTime) {\n    let index = this.dates.pickedIndex(day, Unit.date);\n    if (index !== -1) {\n      this.dates.setValue(null, index); //deselect multi-date\n    } else {\n      index = this.dates.lastPickedIndex + 1;\n      if (this.dates.picked.length === 0) index = 0;\n\n      this.dates.setValue(day, index);\n    }\n  }\n\n  private handleDateRange(day: DateTime) {\n    switch (this.dates.picked.length) {\n      case 2: {\n        this.dates.clear();\n        break;\n      }\n      case 1: {\n        const other = this.dates.picked[0];\n        if (day.getTime() === other.getTime()) {\n          this.dates.clear();\n          break;\n        }\n        if (day.isBefore(other)) {\n          this.dates.setValue(day, 0);\n          this.dates.setValue(other, 1);\n          return;\n        } else {\n          this.dates.setValue(day, 1);\n          return;\n        }\n      }\n    }\n\n    this.dates.setValue(day, 0);\n  }\n}\n", "import Display from './display/index';\nimport Dates from './dates';\nimport Actions from './actions';\nimport {\n  DateTime,\n  DateTimeFormatOptions,\n  guessHourCycle,\n  Unit,\n} from './datetime';\nimport Namespace from './utilities/namespace';\nimport Options from './utilities/options';\nimport {\n  BaseEvent,\n  ChangeEvent,\n  ViewUpdateEvent,\n} from './utilities/event-types';\nimport { EventEmitters } from './utilities/event-emitter';\nimport {\n  serviceLocator,\n  setupServiceLocator,\n} from './utilities/service-locator';\nimport CalendarModes from './utilities/calendar-modes';\nimport DefaultOptions, {\n  DefaultEnLocalization,\n} from './utilities/default-options';\nimport ActionTypes from './utilities/action-types';\nimport { OptionsStore } from './utilities/optionsStore';\nimport { OptionConverter } from './utilities/optionConverter';\n\n/**\n * A robust and powerful date/time picker component.\n */\nclass TempusDominus {\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  _subscribers: { [key: string]: ((event: any) => Record<string, unknown>)[] } =\n    {};\n  private _isDisabled = false;\n  private _currentPromptTimeTimeout: NodeJS.Timeout;\n  private actions: Actions;\n  private optionsStore: OptionsStore;\n  private _eventEmitters: EventEmitters;\n  display: Display;\n  dates: Dates;\n\n  constructor(element: HTMLElement, options: Options = {} as Options) {\n    setupServiceLocator();\n    this._eventEmitters = serviceLocator.locate(EventEmitters);\n    this.optionsStore = serviceLocator.locate(OptionsStore);\n    this.display = serviceLocator.locate(Display);\n    this.dates = serviceLocator.locate(Dates);\n    this.actions = serviceLocator.locate(Actions);\n\n    if (!element) {\n      Namespace.errorMessages.mustProvideElement();\n    }\n\n    this.optionsStore.element = element;\n    this._initializeOptions(options, DefaultOptions, true);\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.optionsStore.unset = true;\n\n    this._initializeInput();\n    this._initializeToggle();\n\n    if (this.optionsStore.options.display.inline) this.display.show();\n\n    this._eventEmitters.triggerEvent.subscribe((e) => {\n      this._triggerEvent(e);\n    });\n\n    this._eventEmitters.viewUpdate.subscribe(() => {\n      this._viewUpdate();\n    });\n\n    this._eventEmitters.updateViewDate.subscribe((dateTime) => {\n      this.viewDate = dateTime;\n    });\n  }\n\n  get viewDate() {\n    return this.optionsStore.viewDate;\n  }\n\n  set viewDate(value) {\n    this.optionsStore.viewDate = value;\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.display._update(\n      this.optionsStore.currentView === 'clock' ? 'clock' : 'calendar'\n    );\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Update the picker options. If `reset` is provide `options` will be merged with DefaultOptions instead.\n   * @param options\n   * @param reset\n   * @public\n   */\n  updateOptions(options, reset = false): void {\n    if (reset) this._initializeOptions(options, DefaultOptions);\n    else this._initializeOptions(options, this.optionsStore.options);\n\n    this.optionsStore.viewDate.setLocalization(\n      this.optionsStore.options.localization\n    );\n    this.display.refreshCurrentView();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Toggles the picker open or closed. If the picker is disabled, nothing will happen.\n   * @public\n   */\n  toggle(): void {\n    if (this._isDisabled) return;\n    this.display.toggle();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Shows the picker unless the picker is disabled.\n   * @public\n   */\n  show(): void {\n    if (this._isDisabled) return;\n    this.display.show();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Hides the picker unless the picker is disabled.\n   * @public\n   */\n  hide(): void {\n    this.display.hide();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Disables the picker and the target input field.\n   * @public\n   */\n  disable(): void {\n    this._isDisabled = true;\n    // todo this might be undesired. If a dev disables the input field to\n    // only allow using the picker, this will break that.\n    this.optionsStore.input?.setAttribute('disabled', 'disabled');\n    this.display.hide();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Enables the picker and the target input field.\n   * @public\n   */\n  enable(): void {\n    this._isDisabled = false;\n    this.optionsStore.input?.removeAttribute('disabled');\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Clears all the selected dates\n   * @public\n   */\n  clear(): void {\n    this.optionsStore.input.value = '';\n    this.dates.clear();\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Allows for a direct subscription to picker events, without having to use addEventListener on the element.\n   * @param eventTypes See Namespace.Events\n   * @param callbacks Function to call when event is triggered\n   * @public\n   */\n  subscribe(\n    eventTypes: string | string[],\n    callbacks: (event: any) => void | ((event: any) => void)[] //eslint-disable-line @typescript-eslint/no-explicit-any\n  ): { unsubscribe: () => void } | { unsubscribe: () => void }[] {\n    if (typeof eventTypes === 'string') {\n      eventTypes = [eventTypes];\n    }\n    let callBackArray: any[]; //eslint-disable-line @typescript-eslint/no-explicit-any\n    if (!Array.isArray(callbacks)) {\n      callBackArray = [callbacks];\n    } else {\n      callBackArray = callbacks;\n    }\n\n    if (eventTypes.length !== callBackArray.length) {\n      Namespace.errorMessages.subscribeMismatch();\n    }\n\n    const returnArray = [];\n\n    for (let i = 0; i < eventTypes.length; i++) {\n      const eventType = eventTypes[i];\n      if (!Array.isArray(this._subscribers[eventType])) {\n        this._subscribers[eventType] = [];\n      }\n\n      this._subscribers[eventType].push(callBackArray[i]);\n\n      returnArray.push({\n        unsubscribe: this._unsubscribe.bind(\n          this,\n          eventType,\n          this._subscribers[eventType].length - 1\n        ),\n      });\n\n      if (eventTypes.length === 1) {\n        return returnArray[0];\n      }\n    }\n\n    return returnArray;\n  }\n\n  // noinspection JSUnusedGlobalSymbols\n  /**\n   * Hides the picker and removes event listeners\n   */\n  dispose() {\n    this.display.hide();\n    // this will clear the document click event listener\n    this.display._dispose();\n    this._eventEmitters.destroy();\n    this.optionsStore.input?.removeEventListener(\n      'change',\n      this._inputChangeEvent\n    );\n    if (this.optionsStore.options.allowInputToggle) {\n      this.optionsStore.input?.removeEventListener(\n        'click',\n        this._openClickEvent\n      );\n      this.optionsStore.input?.removeEventListener(\n        'focus',\n        this._openClickEvent\n      );\n    }\n    this.optionsStore.toggle?.removeEventListener(\n      'click',\n      this._toggleClickEvent\n    );\n    this.optionsStore.toggle?.removeEventListener(\n      'keydown',\n      this._handleToggleKeydown\n    );\n    this._subscribers = {};\n  }\n\n  /**\n   * Updates the options to use the provided language.\n   * THe language file must be loaded first.\n   * @param language\n   */\n  locale(language: string) {\n    const asked = loadedLocales[language];\n    if (!asked) return;\n    this.updateOptions({\n      localization: asked,\n    });\n  }\n\n  /**\n   * Triggers an event like ChangeEvent when the picker has updated the value\n   * of a selected date.\n   * @param event Accepts a BaseEvent object.\n   * @private\n   */\n  private _triggerEvent(event: BaseEvent) {\n    event.viewMode = this.optionsStore.currentView;\n\n    const isChangeEvent = event.type === Namespace.events.change;\n    if (isChangeEvent) {\n      const { date, oldDate, isClear } = event as ChangeEvent;\n      if (\n        (date && oldDate && date.isSame(oldDate)) ||\n        (!isClear && !date && !oldDate)\n      ) {\n        return;\n      }\n      this._handleAfterChangeEvent(event as ChangeEvent);\n\n      this.optionsStore.input?.dispatchEvent(\n        //eslint-disable-next-line @typescript-eslint/no-explicit-any\n        new CustomEvent('change', { detail: event as any })\n      );\n\n      if (this.optionsStore.toggle) {\n        let label = this.optionsStore.options.localization.toggleAriaLabel;\n        if (this.dates.picked.length > 0) {\n          const picked = this.dates.picked.map((x) => x.format()).join(', ');\n          label = `${label}, ${picked}`;\n        }\n\n        this.optionsStore.toggle.ariaLabel = label;\n      }\n    }\n\n    this.optionsStore.element.dispatchEvent(\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      new CustomEvent(event.type, { detail: event as any })\n    );\n\n    //eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if ((window as any).jQuery) {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const $ = (window as any).jQuery;\n\n      if (isChangeEvent && this.optionsStore.input) {\n        $(this.optionsStore.input).trigger(event);\n      } else {\n        $(this.optionsStore.element).trigger(event);\n      }\n    }\n\n    this._publish(event);\n  }\n\n  private _publish(event: BaseEvent) {\n    // return if event is not subscribed\n    if (!Array.isArray(this._subscribers[event.type])) {\n      return;\n    }\n\n    // Trigger callback for each subscriber\n    this._subscribers[event.type].forEach((callback) => {\n      callback(event);\n    });\n  }\n\n  /**\n   * Fires a ViewUpdate event when, for example, the month view is changed.\n   * @private\n   */\n  private _viewUpdate() {\n    this._triggerEvent({\n      type: Namespace.events.update,\n      viewDate: this.optionsStore.viewDate.clone,\n    } as ViewUpdateEvent);\n  }\n\n  private _unsubscribe(eventName, index) {\n    this._subscribers[eventName].splice(index, 1);\n  }\n\n  /**\n   * Merges two Option objects together and validates options type\n   * @param config new Options\n   * @param mergeTo Options to merge into\n   * @param includeDataset When true, the elements data-td attributes will be included in the\n   * @private\n   */\n  private _initializeOptions(\n    config: Options,\n    mergeTo: Options,\n    includeDataset = false\n  ): void {\n    let newConfig = OptionConverter.deepCopy(config);\n    newConfig = OptionConverter._mergeOptions(newConfig, mergeTo);\n    if (includeDataset)\n      newConfig = OptionConverter._dataToOptions(\n        this.optionsStore.element,\n        newConfig\n      );\n\n    OptionConverter._validateConflicts(newConfig);\n\n    newConfig.viewDate = newConfig.viewDate.setLocalization(\n      newConfig.localization\n    );\n\n    if (!this.optionsStore.viewDate.isSame(newConfig.viewDate)) {\n      this.optionsStore.viewDate = newConfig.viewDate;\n    }\n\n    /**\n     * Sets the minimum view allowed by the picker. For example the case of only\n     * allowing year and month to be selected but not date.\n     */\n    if (newConfig.display.components.year) {\n      this.optionsStore.minimumCalendarViewMode = 2;\n    }\n    if (newConfig.display.components.month) {\n      this.optionsStore.minimumCalendarViewMode = 1;\n    }\n    if (newConfig.display.components.date) {\n      this.optionsStore.minimumCalendarViewMode = 0;\n    }\n\n    this.optionsStore.currentCalendarViewMode = Math.max(\n      this.optionsStore.minimumCalendarViewMode,\n      this.optionsStore.currentCalendarViewMode\n    );\n\n    // Update view mode if needed\n    if (\n      CalendarModes[this.optionsStore.currentCalendarViewMode].name !==\n      newConfig.display.viewMode\n    ) {\n      this.optionsStore.currentCalendarViewMode = Math.max(\n        CalendarModes.findIndex((x) => x.name === newConfig.display.viewMode),\n        this.optionsStore.minimumCalendarViewMode\n      );\n    }\n\n    if (this.display?.isVisible) {\n      this.display._update('all');\n    }\n\n    if (\n      newConfig.display.components.useTwentyfourHour &&\n      newConfig.localization.hourCycle === undefined\n    )\n      newConfig.localization.hourCycle = 'h24';\n    else if (newConfig.localization.hourCycle === undefined) {\n      newConfig.localization.hourCycle = guessHourCycle(\n        newConfig.localization.locale\n      );\n    }\n\n    this.optionsStore.options = newConfig;\n\n    if (\n      newConfig.restrictions.maxDate &&\n      this.viewDate.isAfter(newConfig.restrictions.maxDate)\n    )\n      this.viewDate = newConfig.restrictions.maxDate.clone;\n\n    if (\n      newConfig.restrictions.minDate &&\n      this.viewDate.isBefore(newConfig.restrictions.minDate)\n    )\n      this.viewDate = newConfig.restrictions.minDate.clone;\n  }\n\n  /**\n   * Checks if an input field is being used, attempts to locate one and sets an\n   * event listener if found.\n   * @private\n   */\n  private _initializeInput() {\n    if (this.optionsStore.element.tagName == 'INPUT') {\n      this.optionsStore.input = this.optionsStore.element as HTMLInputElement;\n    } else {\n      const query = this.optionsStore.element.dataset.tdTargetInput;\n      if (query == undefined || query == 'nearest') {\n        this.optionsStore.input =\n          this.optionsStore.element.querySelector('input');\n      } else {\n        this.optionsStore.input =\n          this.optionsStore.element.querySelector(query);\n      }\n    }\n\n    if (!this.optionsStore.input) return;\n\n    if (!this.optionsStore.input.value && this.optionsStore.options.defaultDate)\n      this.optionsStore.input.value = this.dates.formatInput(\n        this.optionsStore.options.defaultDate\n      );\n\n    this.optionsStore.input.addEventListener('change', this._inputChangeEvent);\n    if (this.optionsStore.options.allowInputToggle) {\n      this.optionsStore.input.addEventListener('click', this._openClickEvent);\n      this.optionsStore.input.addEventListener('focus', this._openClickEvent);\n    }\n\n    if (this.optionsStore.input.value) {\n      this._inputChangeEvent();\n    }\n  }\n\n  /**\n   * Attempts to locate a toggle for the picker and sets an event listener\n   * @private\n   */\n  private _initializeToggle() {\n    if (this.optionsStore.options.display.inline) return;\n    let query = this.optionsStore.element.dataset.tdTargetToggle;\n    if (query == 'nearest') {\n      query = '[data-td-toggle=\"datetimepicker\"]';\n    }\n    this.optionsStore.toggle =\n      query == undefined\n        ? this.optionsStore.element\n        : this.optionsStore.element.querySelector(query);\n\n    if (this.optionsStore.toggle == undefined) return;\n\n    this.optionsStore.toggle.addEventListener('click', this._toggleClickEvent);\n\n    if (this.optionsStore.toggle !== this.optionsStore.element) {\n      this.optionsStore.toggle.addEventListener(\n        'keydown',\n        this._handleToggleKeydown.bind(this)\n      );\n    }\n  }\n\n  /**\n   * If the option is enabled this will render the clock view after a date pick.\n   * @param e change event\n   * @private\n   */\n  private _handleAfterChangeEvent(e: ChangeEvent) {\n    if (\n      // options is disabled\n      !this.optionsStore.options.promptTimeOnDateChange ||\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.display.inline ||\n      this.optionsStore.options.display.sideBySide ||\n      // time is disabled\n      !this.display._hasTime ||\n      // clock component is already showing\n      this.display.widget\n        ?.getElementsByClassName(Namespace.css.show)[0]\n        .classList.contains(Namespace.css.timeContainer)\n    )\n      return;\n\n    // First time ever. If useCurrent option is set to true (default), do nothing\n    // because the first date is selected automatically.\n    // or date didn't change (time did) or date changed because time did.\n    if (\n      (!e.oldDate && this.optionsStore.options.useCurrent) ||\n      (e.oldDate && e.date?.isSame(e.oldDate))\n    ) {\n      return;\n    }\n\n    clearTimeout(this._currentPromptTimeTimeout);\n    this._currentPromptTimeTimeout = setTimeout(() => {\n      if (this.display.widget) {\n        this._eventEmitters.action.emit({\n          e: {\n            currentTarget: this.display.widget.querySelector(\n              '[data-action=\"togglePicker\"]'\n            ),\n          },\n          action: ActionTypes.togglePicker,\n        });\n      }\n    }, this.optionsStore.options.promptTimeOnDateChangeTransitionDelay);\n  }\n\n  /**\n   * Event for when the input field changes. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  //eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private _inputChangeEvent = (event?: any) => {\n    const internallyTriggered = event?.detail;\n    if (internallyTriggered) return;\n\n    const setViewDate = () => {\n      if (this.dates.lastPicked)\n        this.optionsStore.viewDate = this.dates.lastPicked.clone;\n    };\n\n    const value = this.optionsStore.input.value;\n    if (\n      this.optionsStore.options.multipleDates ||\n      this.optionsStore.options.dateRange\n    ) {\n      try {\n        const valueSplit = value.split(\n          this.optionsStore.options.multipleDatesSeparator\n        );\n        for (let i = 0; i < valueSplit.length; i++) {\n          this.dates.setFromInput(valueSplit[i], i);\n        }\n        setViewDate();\n      } catch {\n        console.warn(\n          'TD: Something went wrong trying to set the multipleDates values from the input field.'\n        );\n      }\n    } else {\n      this.dates.setFromInput(value, 0);\n      setViewDate();\n    }\n  };\n\n  /**\n   * Event for when the toggle is clicked. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  private _toggleClickEvent = () => {\n    if (\n      (this.optionsStore.element as HTMLInputElement)?.disabled ||\n      this.optionsStore.input?.disabled ||\n      //if we just have the input and allow input toggle is enabled, then don't cause a toggle\n      (this.optionsStore.toggle.nodeName === 'INPUT' &&\n        (this.optionsStore.toggle as HTMLInputElement)?.type === 'text' &&\n        this.optionsStore.options.allowInputToggle)\n    )\n      return;\n    this.toggle();\n  };\n\n  private _handleToggleKeydown(event: KeyboardEvent) {\n    if (event.key !== ' ' && event.key !== 'Enter') return;\n\n    this.optionsStore.toggle.click();\n\n    event.stopPropagation();\n    event.preventDefault();\n  }\n\n  /**\n   * Event for when the toggle is clicked. This is a class level method so there's\n   * something for the remove listener function.\n   * @private\n   */\n  private _openClickEvent = () => {\n    if (\n      (this.optionsStore.element as HTMLInputElement)?.disabled ||\n      this.optionsStore.input?.disabled\n    )\n      return;\n    if (!this.display.isVisible) this.show();\n  };\n}\n\n/**\n * Whenever a locale is loaded via a plugin then store it here based on the\n * locale name. E.g. loadedLocales['ru']\n */\nconst loadedLocales = {};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a locale plugin.\n * @param l locale object for localization options\n */\nconst loadLocale = (l) => {\n  if (loadedLocales[l.name]) return;\n  loadedLocales[l.name] = l.localization;\n};\n\n/**\n * A sets the global localization options to the provided locale name.\n * `loadLocale` MUST be called first.\n * @param l\n */\nconst locale = (l: string) => {\n  const asked = loadedLocales[l];\n  if (!asked) return;\n  DefaultOptions.localization = asked;\n};\n\n// noinspection JSUnusedGlobalSymbols\n/**\n * Called from a plugin to extend or override picker defaults.\n * @param plugin\n * @param option\n */\nconst extend = function (plugin, option = undefined) {\n  if (!plugin) return tempusDominus;\n  if (!plugin.installed) {\n    // install plugin only once\n    plugin(\n      option,\n      { TempusDominus, Dates, Display, DateTime, Namespace },\n      tempusDominus\n    );\n    plugin.installed = true;\n  }\n  return tempusDominus;\n};\n\nconst version = 'v6.10.4';\n\nconst tempusDominus = {\n  TempusDominus,\n  extend,\n  loadLocale,\n  locale,\n  Namespace,\n  DefaultOptions,\n  DateTime,\n  Unit,\n  version,\n  DefaultEnLocalization,\n};\n\nexport {\n  TempusDominus,\n  extend,\n  loadLocale,\n  locale,\n  Namespace,\n  DefaultOptions,\n  DateTime,\n  Unit,\n  version,\n  DateTimeFormatOptions,\n  Options,\n  DefaultEnLocalization,\n};\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Handles confirmation dialogs for links/buttons that have Turbo disabled\n// Usage: data-controller=\"confirm\" data-confirm-message-value=\"Are you sure?\"\n//        data-action=\"click->confirm#confirm\"\nexport default class extends Controller {\n  static values = {\n    message: String\n  }\n\n  confirm(event) {\n    if (!window.confirm(this.messageValue)) {\n      event.preventDefault()\n      event.stopPropagation()\n    }\n  }\n}\n", "import DataTable from 'datatables.net-bs5'\n\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = []\n  \n  initialize() {\n    // $(\"#oc-table-with-locations\").dataTable({\n    //   retrieve: true,\n    //   paging: false,\n    //   searching: false,\n    //   scrollY: 300,\n    //   order: [6, 'desc']});\n\n    $(\"#oc-table\").dataTable({\n      retrieve: true,\n      paging: false,\n      searching: false,\n      scrollY: 400,\n      scrollCollapse: true,\n      stateSave: true,\n      order: [5, 'desc']});\n\n    $(\"#documents-table\").dataTable({\n      retrieve: true,\n      paging: false,\n      searching: false,\n      stateSave: true,\n      scrollY: 400,\n      scrollCollapse: true});\n  }\n}\n", "/*!\n * jQuery JavaScript Library v4.0.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.com/license/\n *\n * Date: 2026-01-18T00:20Z\n */\n// For ECMAScript module environments where a proper `window`\n// is present, execute the factory and get jQuery.\nfunction jQueryFactory( window, noGlobal ) {\n\nif ( typeof window === \"undefined\" || !window.document ) {\n\tthrow new Error( \"jQuery requires a window with a document\" );\n}\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\n// Support: IE 11+\n// IE doesn't have Array#flat; provide a fallback.\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\n// [[Class]] -> type pairs\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\n// All support tests are defined in their respective modules.\nvar support = {};\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\treturn typeof obj === \"object\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n\nfunction isWindow( obj ) {\n\treturn obj != null && obj === obj.window;\n}\n\nfunction isArrayLike( obj ) {\n\n\tvar length = !!obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( typeof obj === \"function\" || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\nvar document$1 = window.document;\n\nvar preservedScriptAttributes = {\n\ttype: true,\n\tsrc: true,\n\tnonce: true,\n\tnoModule: true\n};\n\nfunction DOMEval( code, node, doc ) {\n\tdoc = doc || document$1;\n\n\tvar i,\n\t\tscript = doc.createElement( \"script\" );\n\n\tscript.text = code;\n\tfor ( i in preservedScriptAttributes ) {\n\t\tif ( node && node[ i ] ) {\n\t\t\tscript[ i ] = node[ i ];\n\t\t}\n\t}\n\n\tif ( doc.head.appendChild( script ).parentNode ) {\n\t\tscript.parentNode.removeChild( script );\n\t}\n}\n\nvar version = \"4.0.0\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t}\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && typeof target !== \"function\" ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Note: an element does not contain itself\n\tcontains: function( a, b ) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains( bup ) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t) );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction nodeName( elem, name ) {\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nvar pop = arr.pop;\n\n// https://www.w3.org/TR/css3-selectors/#whitespace\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\nvar isIE = document$1.documentMode;\n\nvar rbuggyQSA = isIE && new RegExp(\n\n\t// Support: IE 9 - 11+\n\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\":enabled|:disabled|\" +\n\n\t// Support: IE 11+\n\t// IE 11 doesn't find elements on a `[name='']` query in some cases.\n\t// Adding a temporary attribute to the document before the selection works\n\t// around the issue.\n\t\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\twhitespace + \"*(?:''|\\\"\\\")\"\n\n);\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\nvar identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\";\n\nvar rleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" +\n\twhitespace + \")\" + whitespace + \"*\" );\n\nvar rdescend = new RegExp( whitespace + \"|>\" );\n\nvar rsibling = /[+~]/;\n\nvar documentElement$1 = document$1.documentElement;\n\n// Support: IE 9 - 11+\n// IE requires a prefix.\nvar matches = documentElement$1.matches || documentElement$1.msMatchesSelector;\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > jQuery.expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\nvar attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t// Operator (capture 2)\n\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\twhitespace + \"*\\\\]\";\n\nvar pseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t// 2. simple (capture 6)\n\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t// 3. anything else (capture 2)\n\t\".*\" +\n\t\")\\\\)|)\";\n\nvar filterMatchExpr = {\n\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\tATTR: new RegExp( \"^\" + attributes ),\n\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\tCHILD: new RegExp(\n\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" )\n};\n\nvar rpseudo = new RegExp( pseudos );\n\n// CSS escapes\n// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\nvar runescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t};\n\nfunction unescapeSelector( sel ) {\n\treturn sel.replace( runescape, funescape );\n}\n\nfunction selectorError( msg ) {\n\tjQuery.error( \"Syntax error, unrecognized expression: \" + msg );\n}\n\nvar rcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" );\n\nvar tokenCache = createCache();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = jQuery.expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in filterMatchExpr ) {\n\t\t\tif ( ( match = jQuery.expr.match[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tselectorError( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nvar preFilter = {\n\tATTR: function( match ) {\n\t\tmatch[ 1 ] = unescapeSelector( match[ 1 ] );\n\n\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\tmatch[ 3 ] = unescapeSelector( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" );\n\n\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t}\n\n\t\treturn match.slice( 0, 4 );\n\t},\n\n\tCHILD: function( match ) {\n\n\t\t/* matches from filterMatchExpr[\"CHILD\"]\n\t\t\t1 type (only|nth|...)\n\t\t\t2 what (child|of-type)\n\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t5 sign of xn-component\n\t\t\t6 x of xn-component\n\t\t\t7 sign of y-component\n\t\t\t8 y of y-component\n\t\t*/\n\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t// nth-* requires argument\n\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\tselectorError( match[ 0 ] );\n\t\t\t}\n\n\t\t\t// numeric x and y parameters for jQuery.expr.filter.CHILD\n\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t);\n\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t// other types prohibit arguments\n\t\t} else if ( match[ 3 ] ) {\n\t\t\tselectorError( match[ 0 ] );\n\t\t}\n\n\t\treturn match;\n\t},\n\n\tPSEUDO: function( match ) {\n\t\tvar excess,\n\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\tif ( filterMatchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Accept quoted arguments as-is\n\t\tif ( match[ 3 ] ) {\n\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t// Strip excess characters from unquoted arguments\n\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t// Get excess from tokenize (recursively)\n\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t// advance to the next closing parenthesis\n\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) -\n\t\t\t\tunquoted.length ) ) {\n\n\t\t\t// excess is a negative index\n\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t}\n\n\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\treturn match.slice( 0, 3 );\n\t}\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nfunction access( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( typeof value !== \"function\" ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n}\n\n// Only count HTML whitespace\n// Other whitespace should count in values\n// https://infra.spec.whatwg.org/#ascii-whitespace\nvar rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ||\n\n\t\t\t\t// For compat with previous handling of boolean attributes,\n\t\t\t\t// remove when `false` passed. For ARIA attributes -\n\t\t\t\t// many of which recognize a `\"false\"` value - continue to\n\t\t\t\t// set the `\"false\"` value as jQuery <4 did.\n\t\t\t\t( value === false && name.toLowerCase().indexOf( \"aria-\" ) !== 0 ) ) {\n\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = elem.getAttribute( name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Support: IE <=11+\n// An input loses its value after becoming a radio\nif ( isIE ) {\n\tjQuery.attrHooks.type = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( value === \"radio\" && nodeName( elem, \"input\" ) ) {\n\t\t\t\tvar val = elem.value;\n\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\tif ( val ) {\n\t\t\t\t\telem.value = val;\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n}\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nvar sort = arr.sort;\n\nvar splice = arr.splice;\n\nvar hasDuplicate;\n\n// Document order sorting\nfunction sortOrder( a, b ) {\n\n\t// Flag for duplicate removal\n\tif ( a === b ) {\n\t\thasDuplicate = true;\n\t\treturn 0;\n\t}\n\n\t// Sort on method existence if only one input has compareDocumentPosition\n\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\tif ( compare ) {\n\t\treturn compare;\n\t}\n\n\t// Calculate position if both inputs belong to the same document\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\ta.compareDocumentPosition( b ) :\n\n\t\t// Otherwise we know they are disconnected\n\t\t1;\n\n\t// Disconnected nodes\n\tif ( compare & 1 ) {\n\n\t\t// Choose the first element that is related to the document\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( a == document$1 || a.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, a ) ) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t// Support: IE 11+\n\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tif ( b == document$1 || b.ownerDocument == document$1 &&\n\t\t\tjQuery.contains( document$1, b ) ) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Maintain original order\n\t\treturn 0;\n\t}\n\n\treturn compare & 4 ? -1 : 1;\n}\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\thasDuplicate = false;\n\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nvar i,\n\toutermostContext,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\n\t// Instance-specific data\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\n\t// Regular expressions\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = jQuery.extend( {\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t}, filterMatchExpr ),\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr$1 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr$1.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tjQuery.contains( context, elem ) ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// Outside of IE, if we're not changing the context we can\n\t\t\t\t\t// use :scope instead of an ID.\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || isIE ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = jQuery.expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === jQuery.expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ jQuery.expando ] = true;\n\treturn fn;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : document$1;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 ) {\n\t\treturn;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: IE 9 - 11+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t// Support: IE 11+\n\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( isIE && document$1 != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\treturn matches.call( elem, expr );\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\njQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tfind: {\n\t\tID: function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t},\n\n\t\tTAG: function( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t},\n\n\t\tCLASS: function( className, context ) {\n\t\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\t\treturn context.getElementsByClassName( className );\n\t\t\t}\n\t\t}\n\t},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: preFilter,\n\n\tfilter: {\n\t\tID: function( id ) {\n\t\t\tvar attrId = unescapeSelector( id );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t},\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = unescapeSelector( nodeNameSelector ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = jQuery.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t( parent[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\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\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t( elem[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ jQuery.expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ jQuery.expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar fn = jQuery.expr.pseudos[ pseudo ] ||\n\t\t\t\tjQuery.expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\tselectorError( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ jQuery.expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ jQuery.expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = unescapeSelector( text );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tselectorError( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = unescapeSelector( lang ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( isIE && elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !jQuery.expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\";\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\njQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tjQuery.expr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tjQuery.expr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = jQuery.expr.pseudos;\njQuery.expr.setFilters = new setFilters();\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ jQuery.expando ] || ( elem[ jQuery.expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ jQuery.expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ jQuery.expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = jQuery.expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || jQuery.expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = jQuery.expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = jQuery.expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ jQuery.expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( jQuery.expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && jQuery.expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 );\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t// IE sometimes throws a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ jQuery.expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML &&\n\t\t\t\tjQuery.expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( jQuery.expr.find.ID(\n\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( jQuery.expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = jQuery.expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\tunescapeSelector( token.matches[ 0 ] ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// Initialize against the default document\nsetDocument();\n\njQuery.find = find;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfunction dir( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n}\n\nfunction siblings( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n}\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n// rsingleTag matches a string consisting of a single HTML element with no attributes\n// and captures the element's name\nvar rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\nfunction isObviousHtml( input ) {\n\treturn input[ 0 ] === \"<\" &&\n\t\tinput[ input.length - 1 ] === \">\" &&\n\t\tinput.length >= 3;\n}\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( typeof qualifier === \"function\" ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n// Initialize a jQuery object\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\tif ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( typeof selector === \"function\" ) {\n\t\t\treturn rootjQuery.ready !== undefined ?\n\t\t\t\trootjQuery.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\n\t\t} else {\n\n\t\t\t// Handle obvious HTML strings\n\t\t\tmatch = selector + \"\";\n\t\t\tif ( isObviousHtml( match ) ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip\n\t\t\t\t// the regex check. This also handles browser-supported HTML wrappers\n\t\t\t\t// like TrustedHTML.\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t// Handle HTML strings or selectors\n\t\t\t} else if ( typeof selector === \"string\" ) {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t} else {\n\t\t\t\treturn jQuery.makeArray( selector, this );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t// Note: match[1] may be a string or a TrustedHTML wrapper\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document$1,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( typeof this[ match ] === \"function\" ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document$1.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr) & $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || rootjQuery ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\t\t}\n\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document$1 );\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11+\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( typeof arg === \"function\" ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && typeof( method = value.promise ) === \"function\" ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && typeof( method = value.then ) === \"function\" ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\t\treject( value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tcatch: function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = typeof fns[ tuple[ 4 ] ] === \"function\" &&\n\t\t\t\t\t\t\t\tfns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && typeof returned.promise === \"function\" ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( typeof then === \"function\" ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onProgress === \"function\" ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onFulfilled === \"function\" ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\ttypeof onRejected === \"function\" ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\ttypeof( resolveValues[ i ] && resolveValues[ i ].then ) === \"function\" ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\tif ( error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn(\n\t\t\t\"jQuery.Deferred exception\",\n\t\t\terror,\n\t\t\tasyncError\n\t\t);\n\t}\n};\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document$1, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument$1.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\nif ( document$1.readyState !== \"loading\" ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument$1.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n// Matches dashed string for camelizing\nvar rdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase\nfunction camelCase( string ) {\n\treturn string.replace( rdashAlpha, fcamelCase );\n}\n\n/**\n * Determines whether an object can have data\n */\nfunction acceptData( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n}\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = Object.create( null );\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\n\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.set( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.set( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\nvar pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\n// isHiddenWithinTree reports if an element has a non-\"none\" display style (inline and/or\n// through the CSS cascade), which is useful in deciding whether or not to make it visible.\n// It differs from the :hidden selector (jQuery.expr.pseudos.hidden) in two important ways:\n// * A hidden ancestor does not force an element to be classified as hidden.\n// * Being disconnected from the document does not force an element to be classified as hidden.\n// These differences improve the behavior of .toggle() et al. when applied to elements that are\n// detached or contained within hidden ancestors (gh-2404, gh-2863).\nfunction isHiddenWithinTree( elem, el ) {\n\n\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\n\t// Inline style trumps all\n\treturn elem.style.display === \"none\" ||\n\t\telem.style.display === \"\" &&\n\t\tjQuery.css( elem, \"display\" ) === \"none\";\n}\n\nvar ralphaStart = /^[a-z]/,\n\n\t// The regex visualized:\n\t//\n\t//                         /----------\\\n\t//                        |            |    /-------\\\n\t//                        |  / Top  \\  |   |         |\n\t//         /--- Border ---+-| Right  |-+---+- Width -+---\\\n\t//        |                 | Bottom |                    |\n\t//        |                  \\ Left /                     |\n\t//        |                                               |\n\t//        |                              /----------\\     |\n\t//        |          /-------------\\    |            |    |- END\n\t//        |         |               |   |  / Top  \\  |    |\n\t//        |         |  / Margin  \\  |   | | Right  | |    |\n\t//        |---------+-|           |-+---+-| Bottom |-+----|\n\t//        |            \\ Padding /         \\ Left /       |\n\t// BEGIN -|                                               |\n\t//        |                /---------\\                    |\n\t//        |               |           |                   |\n\t//        |               |  / Min \\  |    / Width  \\     |\n\t//         \\--------------+-|       |-+---|          |---/\n\t//                           \\ Max /       \\ Height /\n\trautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;\n\nfunction isAutoPx( prop ) {\n\n\t// The first test is used to ensure that:\n\t// 1. The prop starts with a lowercase letter (as we uppercase it for the second regex).\n\t// 2. The prop is not empty.\n\treturn ralphaStart.test( prop ) &&\n\t\trautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) );\n}\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( isAutoPx( prop ) ? \"px\" : \"\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( !isAutoPx( prop ) || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54 - 66+\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/;\n\n// Convert dashed to camelCase, handle vendor prefixes.\n// Used by the css & effects modules.\n// Support: IE <=9 - 11+\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction cssCamelCase( string ) {\n\treturn camelCase( string.replace( rmsPrefix, \"ms-\" ) );\n}\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\nvar isAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t},\n\tcomposed = { composed: true };\n\n// Support: IE 9 - 11+\n// Check attachment across shadow DOM boundaries when possible (gh-3504).\n// Provide a fallback for browsers without Shadow DOM v1 support.\nif ( !documentElement$1.getRootNode ) {\n\tisAttached = function( elem ) {\n\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t};\n}\n\n// rtagName captures the name from the first start tag in a string of HTML\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-open-state\n// https://html.spec.whatwg.org/multipage/syntax.html#tag-name-state\nvar rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n\nvar wrapMap = {\n\n\t// Table parts need to be wrapped with `<table>` or they're\n\t// stripped to their contents when put in a div.\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do, so we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ \"table\" ],\n\tcol: [ \"colgroup\", \"table\" ],\n\ttr: [ \"tbody\", \"table\" ],\n\ttd: [ \"tr\", \"tbody\", \"table\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\n\t\t// Use slice to snapshot the live collection from gEBTN\n\t\tret = arr.slice.call( context.getElementsByTagName( tag || \"*\" ) );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\nvar rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" && ( elem.nodeType || isArrayLike( elem ) ) ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || arr;\n\n\t\t\t\t// Create wrappers & descend into them.\n\t\t\t\tj = wrap.length;\n\t\t\t\twhile ( --j > -1 ) {\n\t\t\t\t\ttmp = tmp.appendChild( context.createElement( wrap[ j ] ) );\n\t\t\t\t}\n\n\t\t\t\ttmp.innerHTML = jQuery.htmlPrefilter( elem );\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\tif ( valueIsFunction ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.get( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce,\n\t\t\t\t\t\t\t\t\tcrossOrigin: node.crossOrigin\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent, node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nvar rcheckableType = /^(?:checkbox|radio)$/i;\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement$1, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: Firefox <=42 - 66+\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11+\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: typeof hook === \"function\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: jQuery.extend( Object.create( null ), {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\t\t\t\tif ( event.result !== undefined ) {\n\n\t\t\t\t\t// Setting `event.originalEvent.returnValue` in modern\n\t\t\t\t\t// browsers does the same as just calling `preventDefault()`,\n\t\t\t\t\t// the browsers ignore the value anyway.\n\t\t\t\t\t// Incidentally, IE 11 is the only browser from our supported\n\t\t\t\t\t// ones which respects the value returned from a `beforeunload`\n\t\t\t\t\t// handler attached by `addEventListener`; other browsers do\n\t\t\t\t\t// so only for inline handlers, so not setting the value\n\t\t\t\t\t// directly shouldn't reduce any functionality.\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} )\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\t// This controller function is invoked under multiple circumstances,\n\t\t\t// differentiated by the stored value in `saved`:\n\t\t\t// 1. For an outer synthetic `.trigger()`ed event (detected by\n\t\t\t//    `event.isTrigger & 1` and non-array `saved`), it records arguments\n\t\t\t//    as an array and fires an [inner] native event to prompt state\n\t\t\t//    changes that should be observed by registered listeners (such as\n\t\t\t//    checkbox toggling and focus updating), then clears the stored value.\n\t\t\t// 2. For an [inner] native event (detected by `saved` being\n\t\t\t//    an array), it triggers an inner synthetic event, records the\n\t\t\t//    result, and preempts propagation to further jQuery listeners.\n\t\t\t// 3. For an inner synthetic event (detected by `event.isTrigger & 1` and\n\t\t\t//    array `saved`), it prevents double-propagation of surrogate events\n\t\t\t//    but otherwise allows everything to proceed (particularly including\n\t\t\t//    further listeners).\n\t\t\t// Possible `saved` data shapes: `[...], `{ value }`, `false`.\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object),\n\t\t\t\t\t// so this array will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is\n\t\t\t\t\t\t// blurred by clicking outside of it, it invokes the handler\n\t\t\t\t\t\t// synchronously. If that handler calls `.remove()` on\n\t\t\t\t\t\t// the element, the data is cleared, leaving `result`\n\t\t\t\t\t\t// undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling\n\t\t\t\t// surrogate (focus or blur), assume that the surrogate already\n\t\t\t\t// propagated from triggering the native event and prevent that\n\t\t\t\t// from happening again here.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order.\n\t\t\t// Fire an inner synthetic event with the original arguments.\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\t\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\tthis.target = src.target;\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\t// Support: IE 11+\n\t// Attach a single focusin/focusout handler on the document while someone wants focus/blur.\n\t// This is because the former are synchronous in IE while the latter are async. In other\n\t// browsers, all those handlers are invoked synchronously.\n\tfunction focusMappedHandler( nativeEvent ) {\n\n\t\t// `eventHandle` would already wrap the event, but we need to change the `type` here.\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\tevent.isSimulated = true;\n\n\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t// invoking the handler at the lower level.\n\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t// by this point.\n\t\t\tdataPriv.get( this, \"handle\" )( event );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tif ( isIE ) {\n\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\nvar\n\n\t// Support: IE <=10 - 11+\n\t// In IE using regex groups here causes severe slowdowns.\n\trnoInnerhtml = /<script|<style|<link/i;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar type, i, l,\n\t\tevents = dataPriv.get( src, \"events\" );\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( events ) {\n\t\tdataPriv.remove( dest, \"handle events\" );\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tdataUser.set( dest, jQuery.extend( {}, dataUser.get( src ) ) );\n\t}\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( isIE && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// IE fails to set the defaultValue to the correct value when\n\t\t\t\t// cloning textareas.\n\t\t\t\tif ( nodeName( destElements[ i ], \"textarea\" ) ) {\n\t\t\t\t\tdestElements[ i ].defaultValue = srcElements[ i ].defaultValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\t\t\tpush.apply( ret, elems );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\nfunction getStyles( elem ) {\n\n\t// Support: IE <=11+ (trac-14150)\n\t// In IE popup's `window` is the opener window which makes `window.getComputedStyle( elem )`\n\t// break. Using `elem.ownerDocument.defaultView` avoids the issue.\n\tvar view = elem.ownerDocument.defaultView;\n\n\t// `document.implementation.createHTMLDocument( \"\" )` has a `null` `defaultView`\n\t// property; check `defaultView` truthiness to fallback to window in such a case.\n\tif ( !view ) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle( elem );\n}\n\n// A method for quickly swapping in/out CSS properties to get correct calculations.\nfunction swap( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n}\n\nfunction curCSS( elem, name, computed ) {\n\tvar ret,\n\t\tisCustomProp = rcustomProp.test( name );\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for `.css('--customProperty')` (gh-3144)\n\tif ( computed ) {\n\n\t\t// A fallback to direct property access is needed as `computed`, being\n\t\t// the output of `getComputedStyle`, contains camelCased keys and\n\t\t// `getPropertyValue` requires kebab-case ones.\n\t\t//\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105 - 135+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document$1.createElement( \"div\" ).style;\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped vendor prefixed property\nfunction finalPropName( name ) {\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorPropName( name ) || name;\n}\n\nvar reliableTrDimensionsVal, reliableColDimensionsVal,\n\ttable = document$1.createElement( \"table\" );\n\n// Executing table tests requires only one layout, so they're executed\n// at the same time to save the second computation.\nfunction computeTableStyleTests() {\n\tif (\n\n\t\t// This is a singleton, we need to execute it only once\n\t\t!table ||\n\n\t\t// Finish early in limited (non-browser) environments\n\t\t!table.style\n\t) {\n\t\treturn;\n\t}\n\n\tvar trStyle,\n\t\tcol = document$1.createElement( \"col\" ),\n\t\ttr = document$1.createElement( \"tr\" ),\n\t\ttd = document$1.createElement( \"td\" );\n\n\ttable.style.cssText = \"position:absolute;left:-11111px;\" +\n\t\t\"border-collapse:separate;border-spacing:0\";\n\ttr.style.cssText = \"box-sizing:content-box;border:1px solid;height:1px\";\n\ttd.style.cssText = \"height:9px;width:9px;padding:0\";\n\n\tcol.span = 2;\n\n\tdocumentElement$1\n\t\t.appendChild( table )\n\t\t.appendChild( col )\n\t\t.parentNode\n\t\t.appendChild( tr )\n\t\t.appendChild( td )\n\t\t.parentNode\n\t\t.appendChild( td.cloneNode( true ) );\n\n\t// Don't run until window is visible\n\tif ( table.offsetWidth === 0 ) {\n\t\tdocumentElement$1.removeChild( table );\n\t\treturn;\n\t}\n\n\ttrStyle = window.getComputedStyle( tr );\n\n\t// Support: Firefox 135+\n\t// Firefox always reports computed width as if `span` was 1.\n\t// Support: Safari 18.3+\n\t// In Safari, computed width for columns is always 0.\n\t// In both these browsers, using `offsetWidth` solves the issue.\n\t// Support: IE 11+\n\t// In IE, `<col>` computed width is `\"auto\"` unless `width` is set\n\t// explicitly via CSS so measurements there remain incorrect. Because of\n\t// the lack of a proper workaround, we accept this limitation, treating\n\t// IE as passing the test.\n\treliableColDimensionsVal = isIE || Math.round( parseFloat(\n\t\twindow.getComputedStyle( col ).width )\n\t) === 18;\n\n\t// Support: IE 10 - 11+\n\t// IE misreports `getComputedStyle` of table rows with width/height\n\t// set in CSS while `offset*` properties report correct values.\n\t// Support: Firefox 70 - 135+\n\t// Only Firefox includes border widths\n\t// in computed dimensions for table rows. (gh-4529)\n\treliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +\n\t\tparseFloat( trStyle.borderTopWidth ) +\n\t\tparseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;\n\n\tdocumentElement$1.removeChild( table );\n\n\t// Nullify the table so it wouldn't be stored in the memory;\n\t// it will also be a sign that checks were already performed.\n\ttable = null;\n}\n\njQuery.extend( support, {\n\treliableTrDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableTrDimensionsVal;\n\t},\n\n\treliableColDimensions: function() {\n\t\tcomputeTableStyleTests();\n\t\treturn reliableColDimensionsVal;\n\t}\n} );\n\nvar cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = isIE || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\tif (\n\t\t(\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\t\t( isIE && isBorderBox ) ||\n\n\t\t\t( !support.reliableColDimensions() && nodeName( elem, \"col\" ) ) ||\n\n\t\t\t( !support.reliableTrDimensions() && nodeName( elem, \"tr\" ) )\n\t\t) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If the value is a number, add `px` for certain CSS properties\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( isAutoPx( origName ) ? \"px\" : \"\" );\n\t\t\t}\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// background-* props of a cloned element affect the source element (trac-8908)\n\t\t\tif ( isIE && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = cssCamelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Elements with `display: none` can have dimension info if\n\t\t\t\t// we invisibly show them.\n\t\t\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tisBorderBox = extra &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( isAutoPx( prop ) ? \"px\" : \"\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document$1.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, 13 );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.set( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func\n\t\t\tanim.done( function() {\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = cssCamelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\tpercent = 1 - ( remaining / animation.duration || 0 ),\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( typeof result.stop === \"function\" ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( typeof animation.opts.start === \"function\" ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( typeof props === \"function\" ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || easing ||\n\t\t\ttypeof speed === \"function\" && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && typeof easing !== \"function\" && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( typeof opt.old === \"function\" ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = elem.getAttribute( \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\n\t\t\t\t\t// href-less anchor's `tabIndex` property value is `0` and\n\t\t\t\t\t// the `tabindex` attribute value: `null`. We want `-1`.\n\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11+\n// Accessing the selectedIndex property forces the browser to respect\n// setting selected on the option. The getter ensures a default option\n// is selected when in an optgroup. ESLint rule \"no-unused-expressions\"\n// is disabled for this code since it considers such accessions noop.\nif ( isIE ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// Strip and collapse whitespace according to HTML spec\n// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\nfunction stripAndCollapse( value ) {\n\tvar tokens = value.match( rnothtmlwhite ) || [];\n\treturn tokens.join( \" \" );\n}\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self;\n\n\t\tif ( typeof value === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = typeof value === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( option.selected &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery( option ).val(), values ) > -1\n\t\t\t\t\t) ) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\nif ( isIE ) {\n\tjQuery.valHooks.option = {\n\t\tget: function( elem ) {\n\n\t\t\tvar val = elem.getAttribute( \"value\" );\n\t\t\treturn val != null ?\n\t\t\t\tval :\n\n\t\t\t\t// Support: IE <=10 - 11+\n\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t}\n\t};\n}\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n} );\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document$1 ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document$1;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document$1 ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && typeof elem[ type ] === \"function\" && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = /\\?/;\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11+\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = typeof valueOrFunction === \"function\" ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document$1.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( typeof func === \"function\" ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\n\t\t\t\t\t\t\t\t// Support: IE 11+\n\t\t\t\t\t\t\t\t// `getResponseHeader( key )` in IE doesn't combine all header\n\t\t\t\t\t\t\t\t// values for the provided key into a single result with values\n\t\t\t\t\t\t\t\t// joined by commas as other browsers do. Instead, it returns\n\t\t\t\t\t\t\t\t// them on separate lines.\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document$1.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11+\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an ESM-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" +\n\t\t\t\t\t( nonce.guid++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted.\n\t\t// Handle the null callback placeholder.\n\t\tif ( typeof data === \"function\" || data === null ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\tscriptAttrs: options.crossOrigin ? { \"crossOrigin\": options.crossOrigin } : undefined,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( typeof html === \"function\" ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( typeof html === \"function\" ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = typeof html === \"function\";\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\njQuery.ajaxSettings.xhr = function() {\n\treturn new window.XMLHttpRequest();\n};\n\nvar xhrSuccessStatus = {\n\n\t// File protocol always yields status code 0, assume 200\n\t0: 200\n};\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback;\n\n\treturn {\n\t\tsend: function( headers, complete ) {\n\t\t\tvar i,\n\t\t\t\txhr = options.xhr();\n\n\t\t\txhr.open(\n\t\t\t\toptions.type,\n\t\t\t\toptions.url,\n\t\t\t\toptions.async,\n\t\t\t\toptions.username,\n\t\t\t\toptions.password\n\t\t\t);\n\n\t\t\t// Apply custom fields if provided\n\t\t\tif ( options.xhrFields ) {\n\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mime type if needed\n\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t}\n\n\t\t\t// X-Requested-With header\n\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t}\n\n\t\t\t// Set headers\n\t\t\tfor ( i in headers ) {\n\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t}\n\n\t\t\t// Callback\n\t\t\tcallback = function( type ) {\n\t\t\t\treturn function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = null;\n\n\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) === \"text\" ?\n\t\t\t\t\t\t\t\t\t{ text: xhr.responseText } :\n\t\t\t\t\t\t\t\t\t{ binary: xhr.response },\n\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\t// Listen to events\n\t\t\txhr.onload = callback();\n\t\t\txhr.onabort = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t// Create the abort callback\n\t\t\tcallback = callback( \"abort\" );\n\n\t\t\ttry {\n\n\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tabort: function() {\n\t\t\tif ( callback ) {\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n} );\n\nfunction canUseScriptTag( s ) {\n\n\t// A script tag can only be used for async, cross domain or forced-by-attrs requests.\n\t// Requests with headers cannot use a script tag. However, when both `scriptAttrs` &\n\t// `headers` options are specified, both are impossible to satisfy together; we\n\t// prefer `scriptAttrs` then.\n\t// Sync requests remain handled differently to preserve strict script ordering.\n\treturn s.scriptAttrs || (\n\t\t!s.headers &&\n\t\t(\n\t\t\ts.crossDomain ||\n\n\t\t\t// When dealing with JSONP (`s.dataTypes` include \"json\" then)\n\t\t\t// don't use a script tag so that error responses still may have\n\t\t\t// `responseJSON` set. Continue using a script tag for JSONP requests that:\n\t\t\t//   * are cross-domain as AJAX requests won't work without a CORS setup\n\t\t\t//   * have `scriptAttrs` set as that's a script-only functionality\n\t\t\t// Note that this means JSONP requests violate strict CSP script-src settings.\n\t\t\t// A proper solution is to migrate from using JSONP to a CORS setup.\n\t\t\t( s.async && jQuery.inArray( \"json\", s.dataTypes ) < 0 )\n\t\t)\n\t);\n}\n\n// Install script dataType. Don't specify `contents.script` so that an explicit\n// `dataType: \"script\"` is required (see gh-2432, gh-4822)\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\n\t// These types of requests are handled via a script tag\n\t// so force their methods to GET.\n\tif ( canUseScriptTag( s ) ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\tif ( canUseScriptTag( s ) ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument$1.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Get callback name, remembering preexisting value associated with it\n\tcallbackName = s.jsonpCallback = typeof s.jsonpCallback === \"function\" ?\n\t\ts.jsonpCallback() :\n\t\ts.jsonpCallback;\n\n\t// Insert callback into url or form data\n\tif ( jsonProp ) {\n\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t} else if ( s.jsonp !== false ) {\n\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t}\n\n\t// Use data converter to retrieve json after script execution\n\ts.converters[ \"script json\" ] = function() {\n\t\tif ( !responseContainer ) {\n\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t}\n\t\treturn responseContainer[ 0 ];\n\t};\n\n\t// Force json dataType\n\ts.dataTypes[ 0 ] = \"json\";\n\n\t// Install callback\n\toverwritten = window[ callbackName ];\n\twindow[ callbackName ] = function() {\n\t\tresponseContainer = arguments;\n\t};\n\n\t// Clean-up function (fires after converters)\n\tjqXHR.always( function() {\n\n\t\t// If previous value didn't exist - remove it\n\t\tif ( overwritten === undefined ) {\n\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t// Otherwise restore preexisting value\n\t\t} else {\n\t\t\twindow[ callbackName ] = overwritten;\n\t\t}\n\n\t\t// Save back as free\n\t\tif ( s[ callbackName ] ) {\n\n\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t// Save the callback name for future use\n\t\t\toldCallbacks.push( callbackName );\n\t\t}\n\n\t\t// Call if it was a function and we have a response\n\t\tif ( responseContainer && typeof overwritten === \"function\" ) {\n\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t}\n\n\t\tresponseContainer = overwritten = undefined;\n\t} );\n\n\t// Delegate to script\n\treturn \"script\";\n} );\n\njQuery.ajaxPrefilter( function( s, origOptions ) {\n\n\t// Binary data needs to be passed to XHR as-is without stringification.\n\tif ( typeof s.data !== \"string\" && !jQuery.isPlainObject( s.data ) &&\n\t\t\t!Array.isArray( s.data ) &&\n\n\t\t\t// Don't disable data processing if explicitly set by the user.\n\t\t\t!( \"processData\" in origOptions ) ) {\n\t\ts.processData = false;\n\t}\n\n\t// `Content-Type` for requests with `FormData` bodies needs to be set\n\t// by the browser as it needs to append the `boundary` it generated.\n\tif ( s.data instanceof window.FormData ) {\n\t\ts.contentType = false;\n\t}\n} );\n\n// Argument \"data\" should be string of html or a TrustedHTML wrapper of obvious HTML\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" && !isObviousHtml( data + \"\" ) ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using DOMParser\n\t\tcontext = ( new window.DOMParser() )\n\t\t\t.parseFromString( \"\", \"text/html\" );\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( typeof params === \"function\" ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( typeof options === \"function\" ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11+\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\toffsetParent !== doc.documentElement &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.offsetParent || doc.documentElement;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) !== \"static\" ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement$1;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( typeof fn !== \"function\" ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\n\njQuery.expr[ \":\" ] = jQuery.expr.filters = jQuery.expr.pseudos;\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, gh-557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n\n}\n\nvar jQuery = jQueryFactory( window, true );\n\nexport { jQuery, jQuery as $ };\n\nexport default jQuery;\n", "/*! DataTables 2.3.8\n * \u00A9 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\n\n// DataTables code uses $ internally, but we want to be able to\n// reassign $ with the `use` method, so it is a regular var.\nvar $ = jQuery;\n\n\nvar DataTable = function ( selector, options )\n{\n\t// Check if called with a window or jQuery object for DOM less applications\n\t// This is for backwards compatibility\n\tif (DataTable.factory(selector, options)) {\n\t\treturn DataTable;\n\t}\n\n\t// When creating with `new`, create a new DataTable, returning the API instance\n\tif (this instanceof DataTable) {\n\t\treturn $(selector).DataTable(options);\n\t}\n\telse {\n\t\t// Argument switching\n\t\toptions = selector;\n\t}\n\n\tvar _that = this;\n\tvar emptyInit = options === undefined;\n\tvar len = this.length;\n\n\tif ( emptyInit ) {\n\t\toptions = {};\n\t}\n\n\t// Method to get DT API instance from jQuery object\n\tthis.api = function ()\n\t{\n\t\treturn new _Api( this );\n\t};\n\n\tthis.each(function() {\n\t\t// For each initialisation we want to give it a clean initialisation\n\t\t// object that can be bashed around\n\t\tvar o = {};\n\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t_fnExtend( o, options, true ) :\n\t\t\toptions;\n\n\t\t\n\t\tvar i=0, iLen;\n\t\tvar sId = this.getAttribute( 'id' );\n\t\tvar defaults = DataTable.defaults;\n\t\tvar $this = $(this);\n\t\t\n\t\t// Sanity check\n\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t{\n\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Special case for options\n\t\tif (oInit.on && oInit.on.options) {\n\t\t\t_fnListener($this, 'options', oInit.on.options);\t\n\t\t}\n\t\t\n\t\t$this.trigger( 'options.dt', oInit );\n\t\t\n\t\t/* Backwards compatibility for the defaults */\n\t\t_fnCompatOpts( defaults );\n\t\t_fnCompatCols( defaults.column );\n\t\t\n\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\t\t\n\t\t/* Setting up the initialisation object */\n\t\t_fnCamelToHungarian( defaults, $.extend( oInit, _fnEscapeObject($this.data()) ), true );\n\t\t\n\t\t\n\t\t\n\t\t/* Check to see if we are re-initialising a table */\n\t\tvar allSettings = DataTable.settings;\n\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar s = allSettings[i];\n\t\t\n\t\t\t/* Base check on table node */\n\t\t\tif (\n\t\t\t\ts.nTable == this ||\n\t\t\t\t(s.nTHead && s.nTHead.parentNode == this) ||\n\t\t\t\t(s.nTFoot && s.nTFoot.parentNode == this)\n\t\t\t) {\n\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\t\t\n\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t{\n\t\t\t\t\treturn s.oInstance;\n\t\t\t\t}\n\t\t\t\telse if ( bDestroy )\n\t\t\t\t{\n\t\t\t\t\tnew DataTable.Api(s).destroy();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t_fnLog( s, 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t */\n\t\t\tif ( s.sTableId == this.id )\n\t\t\t{\n\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\t/* Ensure the table has an ID - required for accessibility */\n\t\tif ( sId === null || sId === \"\" )\n\t\t{\n\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\tthis.id = sId;\n\t\t}\n\t\t\n\t\t// Replacing an existing colgroup with our own. Not ideal, but a merge could take a lot of code\n\t\t$this.children('colgroup').remove();\n\t\t\n\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\"sDestroyWidth\": $this[0].style.width,\n\t\t\t\"sInstance\":     sId,\n\t\t\t\"sTableId\":      sId,\n\t\t\tcolgroup: $('<colgroup>'),\n\t\t\tfastData: function (row, column, type) {\n\t\t\t\treturn _fnGetCellData(oSettings, row, column, type);\n\t\t\t}\n\t\t} );\n\t\toSettings.nTable = this;\n\t\toSettings.oInit  = oInit;\n\t\t\n\t\tallSettings.push( oSettings );\n\t\t\n\t\t// Make a single API instance available for internal handling\n\t\toSettings.api = new _Api( oSettings );\n\t\t\n\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\toSettings.oInstance = (_that.length===1) ? _that : $this.dataTable();\n\t\t\n\t\t// Backwards compatibility, before we apply all the defaults\n\t\t_fnCompatOpts( oInit );\n\t\t\n\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t{\n\t\t\toInit.iDisplayLength = Array.isArray(oInit.aLengthMenu[0])\n\t\t\t\t? oInit.aLengthMenu[0][0]\n\t\t\t\t: $.isPlainObject( oInit.aLengthMenu[0] )\n\t\t\t\t\t? oInit.aLengthMenu[0].value\n\t\t\t\t\t: oInit.aLengthMenu[0];\n\t\t}\n\t\t\n\t\t// Apply the defaults and init options to make a single init object will all\n\t\t// options defined from defaults and instance options.\n\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\t\t\n\t\t\n\t\t// Map the initialisation options onto the settings object\n\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\"bPaginate\",\n\t\t\t\"bLengthChange\",\n\t\t\t\"bFilter\",\n\t\t\t\"bSort\",\n\t\t\t\"bSortMulti\",\n\t\t\t\"bInfo\",\n\t\t\t\"bProcessing\",\n\t\t\t\"bAutoWidth\",\n\t\t\t\"bSortClasses\",\n\t\t\t\"bServerSide\",\n\t\t\t\"bDeferRender\"\n\t\t] );\n\t\t_fnMap( oSettings, oInit, [\n\t\t\t\"ajax\",\n\t\t\t\"fnFormatNumber\",\n\t\t\t\"sServerMethod\",\n\t\t\t\"aaSorting\",\n\t\t\t\"aaSortingFixed\",\n\t\t\t\"aLengthMenu\",\n\t\t\t\"sPaginationType\",\n\t\t\t\"iStateDuration\",\n\t\t\t\"bSortCellsTop\",\n\t\t\t\"iTabIndex\",\n\t\t\t\"sDom\",\n\t\t\t\"fnStateLoadCallback\",\n\t\t\t\"fnStateSaveCallback\",\n\t\t\t\"renderer\",\n\t\t\t\"searchDelay\",\n\t\t\t\"rowId\",\n\t\t\t\"caption\",\n\t\t\t\"layout\",\n\t\t\t\"orderDescReverse\",\n\t\t\t\"orderIndicators\",\n\t\t\t\"orderHandler\",\n\t\t\t\"titleRow\",\n\t\t\t\"typeDetect\",\n\t\t\t\"columnTitleTag\",\n\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t] );\n\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\t\t\n\t\t/* Callback functions which are array driven */\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback );\n\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams );\n\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded );\n\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback );\n\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow );\n\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback );\n\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback );\n\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete );\n\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback );\n\t\t\n\t\toSettings.rowIdFn = _fnGetObjectDataFn( oInit.rowId );\n\t\t\n\t\t// Add event listeners\n\t\tif (oInit.on) {\n\t\t\tObject.keys(oInit.on).forEach(function (key) {\n\t\t\t\t_fnListener($this, key, oInit.on[key]);\n\t\t\t});\n\t\t}\n\t\t\n\t\t/* Browser support detection */\n\t\t_fnBrowserDetect( oSettings );\n\t\t\n\t\tvar oClasses = oSettings.oClasses;\n\t\t\n\t\t$.extend( oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t$this.addClass( oClasses.table );\n\t\t\n\t\tif (! oSettings.oFeatures.bPaginate) {\n\t\t\toInit.iDisplayStart = 0;\n\t\t}\n\t\t\n\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t{\n\t\t\t/* Display start point, taking into account the save saving */\n\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t}\n\t\t\n\t\tvar defer = oInit.iDeferLoading;\n\t\tif ( defer !== null )\n\t\t{\n\t\t\toSettings.deferLoading = true;\n\t\t\n\t\t\tvar tmp = Array.isArray(defer);\n\t\t\toSettings._iRecordsDisplay = tmp ? defer[0] : defer;\n\t\t\toSettings._iRecordsTotal = tmp ? defer[1] : defer;\n\t\t}\n\t\t\n\t\t/*\n\t\t * Columns\n\t\t * See if we should load columns automatically or use defined ones\n\t\t */\n\t\tvar columnsInit = [];\n\t\tvar thead = this.getElementsByTagName('thead');\n\t\tvar initHeaderLayout = _fnDetectHeader( oSettings, thead[0] );\n\t\t\n\t\t// If we don't have a columns array, then generate one with nulls\n\t\tif ( oInit.aoColumns ) {\n\t\t\tcolumnsInit = oInit.aoColumns;\n\t\t}\n\t\telse if ( initHeaderLayout.length ) {\n\t\t\tfor ( i=0, iLen=initHeaderLayout[0].length ; i<iLen ; i++ ) {\n\t\t\t\tcolumnsInit.push( null );\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Add the columns\n\t\tfor ( i=0, iLen=columnsInit.length ; i<iLen ; i++ ) {\n\t\t\t_fnAddColumn( oSettings );\n\t\t}\n\t\t\n\t\t// Apply the column definitions\n\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, columnsInit, initHeaderLayout, function (iCol, oDef) {\n\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t} );\n\t\t\n\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t * attributes are found\n\t\t */\n\t\tvar rowOne = $this.children('tbody').find('tr:first-child').eq(0);\n\t\t\n\t\tif ( rowOne.length ) {\n\t\t\tvar a = function ( cell, name ) {\n\t\t\t\treturn cell.getAttribute( 'data-'+name ) !== null ? name : null;\n\t\t\t};\n\t\t\n\t\t\t$( rowOne[0] ).children('th, td').each( function (i, cell) {\n\t\t\t\tvar col = oSettings.aoColumns[i];\n\t\t\n\t\t\t\tif (! col) {\n\t\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t\t}\n\t\t\n\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\t\t\n\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcol._isArrayHost = true;\n\t\t\n\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\t\n\t\t// Must be done after everything which can be overridden by the state saving!\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState );\n\t\t\n\t\tvar features = oSettings.oFeatures;\n\t\tif ( oInit.bStateSave )\n\t\t{\n\t\t\tfeatures.bStateSave = true;\n\t\t}\n\t\t\n\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t// in case that has been altered, so the default sort reflects that option\n\t\tif ( oInit.aaSorting === undefined ) {\n\t\t\tvar sorting = oSettings.aaSorting;\n\t\t\tfor ( i=0, iLen=sorting.length ; i<iLen ; i++ ) {\n\t\t\t\tsorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t// account, and also will apply sorting disabled classes if disabled\n\t\t_fnSortingClasses( oSettings );\n\t\t\n\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\tif ( oSettings.bSorted || _fnDataSource( oSettings ) === 'ssp' || features.bDeferRender ) {\n\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t}\n\t\t} );\n\t\t\n\t\t\n\t\t/*\n\t\t * Table HTML init\n\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t */\n\t\tvar caption = $this.children('caption');\n\t\t\n\t\tif ( oSettings.caption ) {\n\t\t\tif ( caption.length === 0 ) {\n\t\t\t\tcaption = $('<caption/>').prependTo( $this );\n\t\t\t}\n\t\t\n\t\t\tcaption.html( oSettings.caption );\n\t\t}\n\t\t\n\t\t// Store the caption side, so we can remove the element from the document\n\t\t// when creating the element\n\t\tif (caption.length) {\n\t\t\tcaption[0]._captionSide = caption.css('caption-side');\n\t\t\toSettings.captionNode = caption[0];\n\t\t}\n\t\t\n\t\t// Place the colgroup element in the correct location for the HTML structure\n\t\tif (caption.length) {\n\t\t\toSettings.colgroup.insertAfter(caption);\n\t\t}\n\t\telse {\n\t\t\toSettings.colgroup.prependTo(oSettings.nTable);\n\t\t}\n\t\t\n\t\tif ( thead.length === 0 ) {\n\t\t\tthead = $('<thead/>').appendTo($this);\n\t\t}\n\t\toSettings.nTHead = thead[0];\n\t\t\n\t\tvar tbody = $this.children('tbody');\n\t\tif ( tbody.length === 0 ) {\n\t\t\ttbody = $('<tbody/>').insertAfter(thead);\n\t\t}\n\t\toSettings.nTBody = tbody[0];\n\t\t\n\t\tvar tfoot = $this.children('tfoot');\n\t\tif ( tfoot.length === 0 ) {\n\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\ttfoot = $('<tfoot/>').appendTo($this);\n\t\t}\n\t\toSettings.nTFoot = tfoot[0];\n\t\t\n\t\t// Copy the data index array\n\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\t\t\n\t\t// Initialisation complete - table can be drawn\n\t\toSettings.bInitialised = true;\n\t\t\n\t\t// Language definitions\n\t\tvar oLanguage = oSettings.oLanguage;\n\t\t$.extend( true, oLanguage, oInit.oLanguage );\n\t\t\n\t\tif ( oLanguage.sUrl ) {\n\t\t\t// Get the language definitions from a file\n\t\t\t$.ajax( {\n\t\t\t\tdataType: 'json',\n\t\t\t\turl: oLanguage.sUrl,\n\t\t\t\tsuccess: function ( json ) {\n\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t$.extend( true, oLanguage, json, oSettings.oInit.oLanguage );\n\t\t\n\t\t\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings], true);\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t},\n\t\t\t\terror: function () {\n\t\t\t\t\t// Error occurred loading language file\n\t\t\t\t\t_fnLog( oSettings, 0, 'i18n file loading error', 21 );\n\t\t\n\t\t\t\t\t// Continue on as best we can\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\t_fnCallbackFire( oSettings, null, 'i18n', [oSettings], true);\n\t\t\t_fnInitialise( oSettings );\n\t\t}\n\t} );\n\t_that = null;\n\treturn this;\n};\n\n\n\n/**\n * DataTables extensions\n * \n * This namespace acts as a collection area for plug-ins that can be used to\n * extend DataTables capabilities. Indeed many of the build in methods\n * use this method to provide their own capabilities (sorting methods for\n * example).\n *\n * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n * reasons\n *\n *  @namespace\n */\nDataTable.ext = _ext = {\n\t/**\n\t * DataTables build type (expanded by the download builder)\n\t *\n\t *  @type string\n\t */\n\tbuilder: \"-source-\",\n\n\t/**\n\t * Buttons. For use with the Buttons extension for DataTables. This is\n\t * defined here so other extensions can define buttons regardless of load\n\t * order. It is _not_ used by DataTables core.\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tbuttons: {},\n\n\n\t/**\n\t * ColumnControl buttons and content\n\t *\n\t *  @type object\n\t */\n\tccContent: {},\n\n\n\t/**\n\t * Element class names\n\t *\n\t *  @type object\n\t *  @default {}\n\t */\n\tclasses: {},\n\n\n\t/**\n\t * Error reporting.\n\t * \n\t * How should DataTables report an error. Can take the value 'alert',\n\t * 'throw', 'none' or a function.\n\t *\n\t *  @type string|function\n\t *  @default alert\n\t */\n\terrMode: \"alert\",\n\n\t/** HTML entity escaping */\n\tescape: {\n\t\t/** When reading data-* attributes for initialisation options */\n\t\tattributes: false\n\t},\n\n\t/**\n\t * Legacy so v1 plug-ins don't throw js errors on load\n\t */\n\tfeature: [],\n\n\t/**\n\t * Feature plug-ins.\n\t * \n\t * This is an object of callbacks which provide the features for DataTables\n\t * to be initialised via the `layout` option.\n\t */\n\tfeatures: {},\n\n\n\t/**\n\t * Row searching.\n\t * \n\t * This method of searching is complimentary to the default type based\n\t * searching, and a lot more comprehensive as it allows you complete control\n\t * over the searching logic. Each element in this array is a function\n\t * (parameters described below) that is called for every row in the table,\n\t * and your logic decides if it should be included in the searching data set\n\t * or not.\n\t *\n\t * Searching functions have the following input parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t *    original format that was passed in as the data source, or an array\n\t *    from a DOM data source\n\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t *\n\t * And the following return is expected:\n\t *\n\t * * {boolean} Include the row in the searched result set (true) or not\n\t *   (false)\n\t *\n\t * Note that as with the main search ability in DataTables, technically this\n\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t * naming we call it searching here.\n\t *\n\t *  @type array\n\t *  @default []\n\t *\n\t *  @example\n\t *    // The following example shows custom search being applied to the\n\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t *    // from the end-user, matching the data in a certain range.\n\t *    $.fn.dataTable.ext.search.push(\n\t *      function( settings, data, dataIndex ) {\n\t *        var min = document.getElementById('min').value * 1;\n\t *        var max = document.getElementById('max').value * 1;\n\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t *\n\t *        if ( min == \"\" && max == \"\" ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min == \"\" && version < max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && \"\" == max ) {\n\t *          return true;\n\t *        }\n\t *        else if ( min < version && version < max ) {\n\t *          return true;\n\t *        }\n\t *        return false;\n\t *      }\n\t *    );\n\t */\n\tsearch: [],\n\n\n\t/**\n\t * Selector extensions\n\t *\n\t * The `selector` option can be used to extend the options available for the\n\t * selector modifier options (`selector-modifier` object data type) that\n\t * each of the three built in selector types offer (row, column and cell +\n\t * their plural counterparts). For example the Select extension uses this\n\t * mechanism to provide an option to select only rows, columns and cells\n\t * that have been marked as selected by the end user (`{selected: true}`),\n\t * which can be used in conjunction with the existing built in selector\n\t * options.\n\t *\n\t * Each property is an array to which functions can be pushed. The functions\n\t * take three attributes:\n\t *\n\t * * Settings object for the host table\n\t * * Options object (`selector-modifier` object type)\n\t * * Array of selected item indexes\n\t *\n\t * The return is an array of the resulting item indexes after the custom\n\t * selector has been applied.\n\t *\n\t *  @type object\n\t */\n\tselector: {\n\t\tcell: [],\n\t\tcolumn: [],\n\t\trow: []\n\t},\n\n\n\t/**\n\t * Legacy configuration options. Enable and disable legacy options that\n\t * are available in DataTables.\n\t *\n\t *  @type object\n\t */\n\tlegacy: {\n\t\t/**\n\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t * requests\n\t\t *\n\t\t *  @type boolean\n\t\t *  @default null\n\t\t */\n\t\tajax: null\n\t},\n\n\n\t/**\n\t * Pagination plug-in methods.\n\t * \n\t * Each entry in this object is a function and defines which buttons should\n\t * be shown by the pagination rendering method that is used for the table:\n\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t * buttons are displayed in the document, while the functions here tell it\n\t * what buttons to display. This is done by returning an array of button\n\t * descriptions (what each button will do).\n\t *\n\t * Pagination types (the four built in options and any additional plug-in\n\t * options defined here) can be used through the `paginationType`\n\t * initialisation parameter.\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{int} page` The current page index\n\t * 2. `{int} pages` The number of pages in the table\n\t *\n\t * Each function is expected to return an array where each element of the\n\t * array can be one of:\n\t *\n\t * * `first` - Jump to first page when activated\n\t * * `last` - Jump to last page when activated\n\t * * `previous` - Show previous page when activated\n\t * * `next` - Show next page when activated\n\t * * `{int}` - Show page of the index given\n\t * * `{array}` - A nested array containing the above elements to add a\n\t *   containing 'DIV' element (might be useful for styling).\n\t *\n\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t * an object with two functions would be defined for each plug-in. That\n\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t * compatibility, but this option of use is now decremented and no longer\n\t * documented in DataTables 1.10+.\n\t *\n\t *  @type object\n\t *  @default {}\n\t *\n\t *  @example\n\t *    // Show previous, next and current page buttons only\n\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t *      return [ 'previous', page, 'next' ];\n\t *    };\n\t */\n\tpager: {},\n\n\n\trenderer: {\n\t\tpageButton: {},\n\t\theader: {}\n\t},\n\n\n\t/**\n\t * Ordering plug-ins - custom data source\n\t * \n\t * The extension options for ordering of data available here is complimentary\n\t * to the default type based ordering that DataTables typically uses. It\n\t * allows much greater control over the data that is being used to\n\t * order a column, but is necessarily therefore more complex.\n\t * \n\t * This type of ordering is useful if you want to do ordering based on data\n\t * live from the DOM (for example the contents of an 'input' element) rather\n\t * than just the static string that DataTables knows of.\n\t * \n\t * The way these plug-ins work is that you create an array of the values you\n\t * wish to be ordering for the column in question and then return that\n\t * array. The data in the array much be in the index order of the rows in\n\t * the table (not the currently ordering order!). Which order data gathering\n\t * function is run here depends on the `dt-init columns.orderDataType`\n\t * parameter that is used for the column (if any).\n\t *\n\t * The functions defined take two parameters:\n\t *\n\t * 1. `{object}` DataTables settings object: see\n\t *    {@link DataTable.models.oSettings}\n\t * 2. `{int}` Target column index\n\t *\n\t * Each function is expected to return an array:\n\t *\n\t * * `{array}` Data for the column to be ordering upon\n\t *\n\t *  @type array\n\t *\n\t *  @example\n\t *    // Ordering using `input` node values\n\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t *    {\n\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t *        return $('input', td).val();\n\t *      } );\n\t *    }\n\t */\n\torder: {},\n\n\n\t/**\n\t * Type based plug-ins.\n\t *\n\t * Each column in DataTables has a type assigned to it, either by automatic\n\t * detection or by direct assignment using the `type` option for the column.\n\t * The type of a column will effect how it is ordering and search (plug-ins\n\t * can also make use of the column type if required).\n\t *\n\t * @namespace\n\t */\n\ttype: {\n\t\t/**\n\t\t * Automatic column class assignment\n\t\t */\n\t\tclassName: {},\n\n\t\t/**\n\t\t * Type detection functions.\n\t\t *\n\t\t * The functions defined in this object are used to automatically detect\n\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t * when complex data is in the table.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be analysed\n\t     *  2. `{settings}` DataTables settings object. This can be used to\n\t     *     perform context specific type detection - for example detection\n\t     *     based on language settings such as using a comma for a decimal\n\t     *     place. Generally speaking the options from the settings will not\n\t     *     be required\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t *   pass it on to the other type detection functions.\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Currency type detection plug-in:\n\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t *      function ( data, settings ) {\n\t\t *        // Check the numeric part\n\t\t *        if ( ! data.substring(1).match(/[0-9]/) ) {\n\t\t *          return null;\n\t\t *        }\n\t\t *\n\t\t *        // Check prefixed by currency\n\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t *          return 'currency';\n\t\t *        }\n\t\t *        return null;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tdetect: [],\n\n\t\t/**\n\t\t * Automatic renderer assignment\n\t\t */\n\t\trender: {},\n\n\n\t\t/**\n\t\t * Type based search formatting.\n\t\t *\n\t\t * The type based searching functions can be used to pre-format the\n\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t *\n\t\t * Note that is a search is not defined for a column of a given type,\n\t\t * no search formatting will be performed.\n\t\t * \n\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t * or a type detection plug-in), you will typically be using this for\n\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t * the format that should be searched upon. This is done by adding\n\t\t * functions this object with a parameter name which matches the sType\n\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t * for searching data.\n\t\t *\n\t\t * The functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t *\n\t\t * Each function is expected to return:\n\t\t *\n\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t *    }\n\t\t */\n\t\tsearch: {},\n\n\n\t\t/**\n\t\t * Type based ordering.\n\t\t *\n\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t * is defined by the functions available in this object.\n\t\t *\n\t\t * Each ordering option can be described by three properties added to\n\t\t * this object:\n\t\t *\n\t\t * * `{type}-pre` - Pre-formatting function\n\t\t * * `{type}-asc` - Ascending order function\n\t\t * * `{type}-desc` - Descending order function\n\t\t *\n\t\t * All three can be used together, only `{type}-pre` or only\n\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t * implementation in terms of speed, although the others are provided\n\t\t * for compatibility with existing JavaScript sort functions.\n\t\t *\n\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t *\n\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t *\n\t\t * And return:\n\t\t *\n\t\t * * `{*}` Data to be sorted upon\n\t\t *\n\t\t * `{type}-asc` and `{type}-desc`: Functions are typical JavaScript sort\n\t\t * functions, taking two parameters:\n\t\t *\n\t     *  1. `{*}` Data to compare to the second parameter\n\t     *  2. `{*}` Data to compare to the first parameter\n\t\t *\n\t\t * And returning:\n\t\t *\n\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t *   parameter.\n\t\t * \n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t *      \"string-pre\": function(x) {\n\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t *        return parseFloat( a );\n\t\t *      }\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t *      \"string-case-asc\": function(x,y) {\n\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t *      },\n\t\t *      \"string-case-desc\": function(x,y) {\n\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\torder: {}\n\t},\n\n\t/**\n\t * Unique DataTables instance counter\n\t *\n\t * @type int\n\t * @private\n\t */\n\t_unique: 0,\n\n\n\t//\n\t// Depreciated\n\t// The following properties are retained for backwards compatibility only.\n\t// The should not be used in new projects and will be removed in a future\n\t// version\n\t//\n\n\t/**\n\t * Version check function.\n\t *  @type function\n\t *  @depreciated Since 1.10\n\t */\n\tfnVersionCheck: DataTable.fnVersionCheck,\n\n\n\t/**\n\t * Index for what 'this' index API functions should use\n\t *  @type int\n\t *  @deprecated Since v1.10\n\t */\n\tiApiIndex: 0,\n\n\n\t/**\n\t * Software version\n\t *  @type string\n\t *  @deprecated Since v1.10\n\t */\n\tsVersion: DataTable.version\n};\n\n\n//\n// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n//\n$.extend( _ext, {\n\tafnFiltering: _ext.search,\n\taTypes:       _ext.type.detect,\n\tofnSearch:    _ext.type.search,\n\toSort:        _ext.type.order,\n\tafnSortData:  _ext.order,\n\taoFeatures:   _ext.feature,\n\toStdClasses:  _ext.classes,\n\toPagination:  _ext.pager\n} );\n\n\n$.extend( DataTable.ext.classes, {\n\tcontainer: 'dt-container',\n\tempty: {\n\t\trow: 'dt-empty'\n\t},\n\tinfo: {\n\t\tcontainer: 'dt-info'\n\t},\n\tlayout: {\n\t\trow: 'dt-layout-row',\n\t\tcell: 'dt-layout-cell',\n\t\ttableRow: 'dt-layout-table',\n\t\ttableCell: '',\n\t\tstart: 'dt-layout-start',\n\t\tend: 'dt-layout-end',\n\t\tfull: 'dt-layout-full'\n\t},\n\tlength: {\n\t\tcontainer: 'dt-length',\n\t\tselect: 'dt-input'\n\t},\n\torder: {\n\t\tcanAsc: 'dt-orderable-asc',\n\t\tcanDesc: 'dt-orderable-desc',\n\t\tisAsc: 'dt-ordering-asc',\n\t\tisDesc: 'dt-ordering-desc',\n\t\tnone: 'dt-orderable-none',\n\t\tposition: 'sorting_'\n\t},\n\tprocessing: {\n\t\tcontainer: 'dt-processing'\n\t},\n\tscrolling: {\n\t\tbody: 'dt-scroll-body',\n\t\tcontainer: 'dt-scroll',\n\t\tfooter: {\n\t\t\tself: 'dt-scroll-foot',\n\t\t\tinner: 'dt-scroll-footInner'\n\t\t},\n\t\theader: {\n\t\t\tself: 'dt-scroll-head',\n\t\t\tinner: 'dt-scroll-headInner'\n\t\t}\n\t},\n\tsearch: {\n\t\tcontainer: 'dt-search',\n\t\tinput: 'dt-input'\n\t},\n\ttable: 'dataTable',\t\n\ttbody: {\n\t\tcell: '',\n\t\trow: ''\n\t},\n\tthead: {\n\t\tcell: '',\n\t\trow: ''\n\t},\n\ttfoot: {\n\t\tcell: '',\n\t\trow: ''\n\t},\n\tpaging: {\n\t\tactive: 'current',\n\t\tbutton: 'dt-paging-button',\n\t\tcontainer: 'dt-paging',\n\t\tdisabled: 'disabled',\n\t\tnav: ''\n\t}\n} );\n\n\n/*\n * It is useful to have variables which are scoped locally so only the\n * DataTables functions can access them and they don't leak into global space.\n * At the same time these functions are often useful over multiple files in the\n * core and API, so we list, or at least document, all variables which are used\n * by DataTables as private variables here. This also ensures that there is no\n * clashing of variable names and that they can easily referenced for reuse.\n */\n\n\n// Defined else where\n//  _selector_run\n//  _selector_opts\n//  _selector_row_indexes\n\nvar _ext; // DataTable.ext\nvar _Api; // DataTable.Api\nvar _api_register; // DataTable.Api.register\nvar _api_registerPlural; // DataTable.Api.registerPlural\n\nvar _re_dic = {};\nvar _re_new_lines = /[\\r\\n\\u2028]/g;\nvar _re_html = /<([^>]*>)/g;\nvar _max_str_len = Math.pow(2, 28);\n\n// This is not strict ISO8601 - Date.parse() is quite lax, although\n// implementations differ between browsers.\nvar _re_date = /^\\d{2,4}[./-]\\d{1,2}[./-]\\d{1,2}([T ]{1}\\d{1,2}[:.]\\d{2}([.:]\\d{2})?)?$/;\n\n// Escape regular expression special characters\nvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\n// https://en.wikipedia.org/wiki/Foreign_exchange_market\n// - \\u20BD - Russian ruble.\n// - \\u20a9 - South Korean Won\n// - \\u20BA - Turkish Lira\n// - \\u20B9 - Indian Rupee\n// - R - Brazil (R$) and South Africa\n// - fr - Swiss Franc\n// - kr - Swedish krona, Norwegian krone and Danish krone\n// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n// - \u0243 - Bitcoin\n// - \u039E - Ethereum\n//   standards as thousands separators.\nvar _re_formatted_numeric = /['\\u00A0,$\u00A3\u20AC\u00A5%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk\u0243\u039E]/gi;\n\n\nvar _empty = function ( d ) {\n\treturn !d || d === true || d === '-' ? true : false;\n};\n\n\nvar _intVal = function ( s ) {\n\tvar integer = parseInt( s, 10 );\n\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n};\n\n// Convert from a formatted number with characters other than `.` as the\n// decimal place, to a JavaScript number\nvar _numToDecimal = function ( num, decimalPoint ) {\n\t// Cache created regular expressions for speed as this function is called often\n\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t}\n\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\tnum;\n};\n\n\nvar _isNumber = function ( d, decimalPoint, formatted, allowEmpty ) {\n\tvar type = typeof d;\n\tvar strType = type === 'string';\n\n\tif ( type === 'number' || type === 'bigint') {\n\t\treturn true;\n\t}\n\n\t// If empty return immediately so there must be a number if it is a\n\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t// as a formatted number for currency\n\tif ( allowEmpty && _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\tif ( decimalPoint && strType ) {\n\t\td = _numToDecimal( d, decimalPoint );\n\t}\n\n\tif ( formatted && strType ) {\n\t\td = d.replace( _re_formatted_numeric, '' );\n\t}\n\n\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n};\n\n\n// A string without HTML in it can be considered to be HTML still\nvar _isHtml = function ( d ) {\n\treturn _empty( d ) || typeof d === 'string';\n};\n\n// Is a string a number surrounded by HTML?\nvar _htmlNumeric = function ( d, decimalPoint, formatted, allowEmpty ) {\n\tif ( allowEmpty && _empty( d ) ) {\n\t\treturn true;\n\t}\n\n\t// input and select strings mean that this isn't just a number\n\tif (typeof d === 'string' && d.match(/<(input|select)/i)) {\n\t\treturn null;\n\t}\n\n\tvar html = _isHtml( d );\n\treturn ! html ?\n\t\tnull :\n\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted, allowEmpty ) ?\n\t\t\ttrue :\n\t\t\tnull;\n};\n\n\nvar _pluck = function ( a, prop, prop2 ) {\n\tvar out = [];\n\tvar i=0, iLen=a.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\tif ( a[i] ) {\n\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\n// Basically the same as _pluck, but rather than looping over `a` we use `order`\n// as the indexes to pick from `a`\nvar _pluck_order = function ( a, order, prop, prop2 )\n{\n\tvar out = [];\n\tvar i=0, iLen=order.length;\n\n\t// Could have the test in the loop for slightly smaller code, but speed\n\t// is essential here\n\tif ( prop2 !== undefined ) {\n\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\tif ( a[ order[i] ] && a[ order[i] ][ prop ] ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tfor ( ; i<iLen ; i++ ) {\n\t\t\tif ( a[ order[i] ] ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n};\n\n\nvar _range = function ( len, start )\n{\n\tvar out = [];\n\tvar end;\n\n\tif ( start === undefined ) {\n\t\tstart = 0;\n\t\tend = len;\n\t}\n\telse {\n\t\tend = start;\n\t\tstart = len;\n\t}\n\n\tfor ( var i=start ; i<end ; i++ ) {\n\t\tout.push( i );\n\t}\n\n\treturn out;\n};\n\n\nvar _removeEmpty = function ( a )\n{\n\tvar out = [];\n\n\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\tif ( a[i] ) { // careful - will remove all falsy values!\n\t\t\tout.push( a[i] );\n\t\t}\n\t}\n\n\treturn out;\n};\n\n// Replaceable function in api.util\nvar _stripHtml = function (input, replacement) {\n\tif (! input || typeof input !== 'string') {\n\t\treturn input;\n\t}\n\n\t// Irrelevant check to workaround CodeQL's false positive on the regex\n\tif (input.length > _max_str_len) {\n\t\tthrow new Error('Exceeded max str len');\n\t}\n\n\tvar previous;\n\n\tinput = input.replace(_re_html, replacement || ''); // Complete tags\n\n\t// Safety for incomplete script tag - use do / while to ensure that\n\t// we get all instances\n\tdo {\n\t\tprevious = input;\n\t\tinput = input.replace(/<script/i, '');\n\t} while (input !== previous);\n\n\treturn previous;\n};\n\n// Replaceable function in api.util\nvar _escapeHtml = function ( d ) {\n\tif (Array.isArray(d)) {\n\t\td = d.join(',');\n\t}\n\n\treturn typeof d === 'string' ?\n\t\td\n\t\t\t.replace(/&/g, '&amp;')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;')\n\t\t\t.replace(/\"/g, '&quot;') :\n\t\td;\n};\n\n// Remove diacritics from a string by decomposing it and then removing\n// non-ascii characters\nvar _normalize = function (str, both) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\t// It is faster to just run `normalize` than it is to check if\n\t// we need to with a regex! (Check as it isn't available in old\n\t// Safari)\n\tvar res = str.normalize\n\t\t? str.normalize(\"NFD\")\n\t\t: str;\n\n\t// Equally, here we check if a regex is needed or not\n\treturn res.length !== str.length\n\t\t? (both === true ? str + ' ' : '' ) + res.replace(/[\\u0300-\\u036f]/g, \"\")\n\t\t: res;\n}\n\n/**\n * Determine if all values in the array are unique. This means we can short\n * cut the _unique method at the cost of a single loop. A sorted array is used\n * to easily check the values.\n *\n * @param  {array} src Source array\n * @return {boolean} true if all unique, false otherwise\n * @ignore\n */\nvar _areAllUnique = function ( src ) {\n\tif ( src.length < 2 ) {\n\t\treturn true;\n\t}\n\n\tvar sorted = src.slice().sort();\n\tvar last = sorted[0];\n\n\tfor ( var i=1, iLen=sorted.length ; i<iLen ; i++ ) {\n\t\tif ( sorted[i] === last ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlast = sorted[i];\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Find the unique elements in a source array.\n *\n * @param  {array} src Source array\n * @return {array} Array of unique items\n * @ignore\n */\nvar _unique = function ( src )\n{\n\tif (Array.from && Set) {\n\t\treturn Array.from(new Set(src));\n\t}\n\n\tif ( _areAllUnique( src ) ) {\n\t\treturn src.slice();\n\t}\n\n\t// A faster unique method is to use object keys to identify used values,\n\t// but this doesn't work with arrays or objects, which we must also\n\t// consider. See jsperf.app/compare-array-unique-versions/4 for more\n\t// information.\n\tvar\n\t\tout = [],\n\t\tval,\n\t\ti, iLen=src.length,\n\t\tj, k=0;\n\n\tagain: for ( i=0 ; i<iLen ; i++ ) {\n\t\tval = src[i];\n\n\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\tif ( out[j] === val ) {\n\t\t\t\tcontinue again;\n\t\t\t}\n\t\t}\n\n\t\tout.push( val );\n\t\tk++;\n\t}\n\n\treturn out;\n};\n\n// Surprisingly this is faster than [].concat.apply\n// https://jsperf.com/flatten-an-array-loop-vs-reduce/2\nvar _flatten = function (out, val) {\n\tif (Array.isArray(val)) {\n\t\tfor (var i=0 ; i<val.length ; i++) {\n\t\t\t_flatten(out, val[i]);\n\t\t}\n\t}\n\telse {\n\t\tout.push(val);\n\t}\n\n\treturn out;\n}\n\n// Similar to jQuery's addClass, but use classList.add\nfunction _addClass(el, name) {\n\tif (name) {\n\t\tname.split(' ').forEach(function (n) {\n\t\t\tif (n) {\n\t\t\t\t// `add` does deduplication, so no need to check `contains`\n\t\t\t\tel.classList.add(n);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * DataTables utility methods\n * \n * This namespace provides helper methods that DataTables uses internally to\n * create a DataTable, but which are not exclusively used only for DataTables.\n * These methods can be used by extension authors to save the duplication of\n * code.\n *\n *  @namespace\n */\nDataTable.util = {\n\t/**\n\t * Return a string with diacritic characters decomposed\n\t * @param {*} mixed Function or string to normalize\n\t * @param {*} both Return original string and the normalized string\n\t * @returns String or undefined\n\t */\n\tdiacritics: function (mixed, both) {\n\t\tvar type = typeof mixed;\n\n\t\tif (type !== 'function') {\n\t\t\treturn _normalize(mixed, both);\n\t\t}\n\t\t_normalize = mixed;\n\t},\n\n\t/**\n\t * Debounce a function\n\t *\n\t * @param {function} fn Function to be called\n\t * @param {integer} freq Call frequency in mS\n\t * @return {function} Wrapped function\n\t */\n\tdebounce: function ( fn, timeout ) {\n\t\tvar timer;\n\n\t\treturn function () {\n\t\t\tvar that = this;\n\t\t\tvar args = arguments;\n\n\t\t\tclearTimeout(timer);\n\n\t\t\ttimer = setTimeout( function () {\n\t\t\t\tfn.apply(that, args);\n\t\t\t}, timeout || 250 );\n\t\t};\n\t},\n\n\t/**\n\t * Throttle the calls to a function. Arguments and context are maintained\n\t * for the throttled function.\n\t *\n\t * @param {function} fn Function to be called\n\t * @param {integer} freq Call frequency in mS\n\t * @return {function} Wrapped function\n\t */\n\tthrottle: function ( fn, freq ) {\n\t\tvar\n\t\t\tfrequency = freq !== undefined ? freq : 200,\n\t\t\tlast,\n\t\t\ttimer;\n\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tthat = this,\n\t\t\t\tnow  = +new Date(),\n\t\t\t\targs = arguments;\n\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = undefined;\n\t\t\t\t\tfn.apply( that, args );\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn.apply( that, args );\n\t\t\t}\n\t\t};\n\t},\n\n\t/**\n\t * Escape a string such that it can be used in a regular expression\n\t *\n\t *  @param {string} val string to escape\n\t *  @returns {string} escaped string\n\t */\n\tescapeRegex: function ( val ) {\n\t\treturn val.replace( _re_escape_regex, '\\\\$1' );\n\t},\n\n\t/**\n\t * Create a function that will write to a nested object or array\n\t * @param {*} source JSON notation string\n\t * @returns Write function\n\t */\n\tset: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn DataTable.util.set( source._ );\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Nothing to do when the data source is null\n\t\t\treturn function () {};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, val, meta) {\n\t\t\t\tsource( data, 'set', val, meta );\n\t\t\t};\n\t\t}\n\t\telse if (\n\t\t\ttypeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\tsource.indexOf('[') !== -1 || source.indexOf('(') !== -1)\n\t\t) {\n\t\t\t// Like the get, we need to get data from a nested object\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\t\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) {\n\t\t\t\t\t// Protect against prototype pollution\n\t\t\t\t\tif (a[i] === '__proto__' || a[i] === 'constructor') {\n\t\t\t\t\t\tthrow new Error('Cannot set prototype values');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\t\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\t\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// We've been asked to save data to an array, but it\n\t\t\t\t\t\t\t// isn't array data to be saved. Best that can be done\n\t\t\t\t\t\t\t// is to just save the value.\n\t\t\t\t\t\t\tdata[ a[i] ] = val;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\t\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) ) {\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\treturn setData( data, val, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data, val) { // meta is also passed in, but not used\n\t\t\t\tdata[source] = val;\n\t\t\t};\n\t\t}\n\t},\n\n\t/**\n\t * Create a function that will read nested objects from arrays, based on JSON notation\n\t * @param {*} source JSON notation string\n\t * @returns Value read\n\t */\n\tget: function ( source ) {\n\t\tif ( $.isPlainObject( source ) ) {\n\t\t\t// Build an object of get functions, and wrap them in a single call\n\t\t\tvar o = {};\n\t\t\t$.each( source, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = DataTable.util.get( val );\n\t\t\t\t}\n\t\t\t} );\n\t\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\tvar t = o[type] || o._;\n\t\t\t\treturn t !== undefined ?\n\t\t\t\t\tt(data, type, row, meta) :\n\t\t\t\t\tdata;\n\t\t\t};\n\t\t}\n\t\telse if ( source === null ) {\n\t\t\t// Give an empty string for rendering / sorting etc\n\t\t\treturn function (data) { // type, row and meta also passed, but not used\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof source === 'function' ) {\n\t\t\treturn function (data, type, row, meta) {\n\t\t\t\treturn source( data, type, row, meta );\n\t\t\t};\n\t\t}\n\t\telse if (\n\t\t\ttypeof source === 'string' && (source.indexOf('.') !== -1 ||\n\t\t\tsource.indexOf('[') !== -1 || source.indexOf('(') !== -1)\n\t\t) {\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\t\n\t\t\t\tif ( src !== \"\" ) {\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\t\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ ) {\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\t\n\t\t\t\t\t\tif ( arrayNotation ) {\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\t\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\t\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tif ( Array.isArray( data ) ) {\n\t\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\t\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation ) {\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (data === null || data[ a[i] ] === null) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( data === undefined || data[ a[i] ] === undefined ) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\treturn function (data, type) { // row and meta also passed, but not used\n\t\t\t\treturn fetchData( data, type, source );\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\t// Array or flat object mapping\n\t\t\treturn function (data) { // row and meta also passed, but not used\n\t\t\t\treturn data[source];\n\t\t\t};\n\t\t}\n\t},\n\n\tstripHtml: function (mixed, replacement) {\n\t\tvar type = typeof mixed;\n\n\t\tif (type === 'function') {\n\t\t\t_stripHtml = mixed;\n\t\t\treturn;\n\t\t}\n\t\telse if (type === 'string') {\n\t\t\treturn _stripHtml(mixed, replacement);\n\t\t}\n\t\treturn mixed;\n\t},\n\n\tescapeHtml: function (mixed) {\n\t\tvar type = typeof mixed;\n\n\t\tif (type === 'function') {\n\t\t\t_escapeHtml = mixed;\n\t\t\treturn;\n\t\t}\n\t\telse if (type === 'string' || Array.isArray(mixed)) {\n\t\t\treturn _escapeHtml(mixed);\n\t\t}\n\t\treturn mixed;\n\t},\n\n\tunique: _unique\n};\n\n\n\n/**\n * Create a mapping object that allows camel case parameters to be looked up\n * for their Hungarian counterparts. The mapping is stored in a private\n * parameter called `_hungarianMap` which can be accessed on the source object.\n *  @param {object} o\n *  @memberof DataTable#oApi\n */\nfunction _fnHungarianMap ( o )\n{\n\tvar\n\t\thungarian = 'a aa ai ao as b fn i m o s ',\n\t\tmatch,\n\t\tnewKey,\n\t\tmap = {};\n\n\t$.each( o, function (key) {\n\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\n\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t{\n\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\tmap[ newKey ] = key;\n\n\t\t\tif ( match[1] === 'o' )\n\t\t\t{\n\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t}\n\t\t}\n\t} );\n\n\to._hungarianMap = map;\n}\n\n\n/**\n * Convert from camel case parameters to Hungarian, based on a Hungarian map\n * created by _fnHungarianMap.\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n *  @memberof DataTable#oApi\n */\nfunction _fnCamelToHungarian ( src, user, force )\n{\n\tif ( ! src._hungarianMap ) {\n\t\t_fnHungarianMap( src );\n\t}\n\n\tvar hungarianKey;\n\n\t$.each( user, function (key) {\n\t\thungarianKey = src._hungarianMap[ key ];\n\n\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t{\n\t\t\t// For objects, we need to buzz down into the object to copy parameters\n\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t{\n\t\t\t\t// Copy the camelCase options over to the hungarian\n\t\t\t\tif ( ! user[ hungarianKey ] ) {\n\t\t\t\t\tuser[ hungarianKey ] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, user[hungarianKey], user[key] );\n\n\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[hungarianKey], force );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser[hungarianKey] = user[ key ];\n\t\t\t}\n\t\t}\n\t} );\n}\n\n/**\n * Map one parameter onto another\n *  @param {object} o Object to map\n *  @param {*} knew The new parameter name\n *  @param {*} old The old parameter name\n */\nvar _fnCompatMap = function ( o, knew, old ) {\n\tif ( o[ knew ] !== undefined ) {\n\t\to[ old ] = o[ knew ];\n\t}\n};\n\n\n/**\n * Provide backwards compatibility for the main DT options. Note that the new\n * options are mapped onto the old parameters, so this is an external interface\n * change only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatOpts ( init )\n{\n\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t_fnCompatMap( init, 'searching',     'bFilter' );\n\n\t// Boolean initialisation of x-scrolling\n\tif ( typeof init.sScrollX === 'boolean' ) {\n\t\tinit.sScrollX = init.sScrollX ? '100%' : '';\n\t}\n\tif ( typeof init.scrollX === 'boolean' ) {\n\t\tinit.scrollX = init.scrollX ? '100%' : '';\n\t}\n\n\t// Objects for ordering\n\tif ( typeof init.bSort === 'object' ) {\n\t\tinit.orderIndicators = init.bSort.indicators !== undefined ? init.bSort.indicators : true;\n\t\tinit.orderHandler = init.bSort.handler !== undefined ? init.bSort.handler : true;\n\t\tinit.bSort = true;\n\t}\n\telse if (init.bSort === false) {\n\t\tinit.orderIndicators = false;\n\t\tinit.orderHandler = false;\n\t}\n\telse if (init.bSort === true) {\n\t\tinit.orderIndicators = true;\n\t\tinit.orderHandler = true;\n\t}\n\n\t// Which cells are the title cells?\n\tif (typeof init.bSortCellsTop === 'boolean') {\n\t\tinit.titleRow = init.bSortCellsTop;\n\t}\n\n\t// Column search objects are in an array, so it needs to be converted\n\t// element by element\n\tvar searchCols = init.aoSearchCols;\n\n\tif ( searchCols ) {\n\t\tfor ( var i=0, iLen=searchCols.length ; i<iLen ; i++ ) {\n\t\t\tif ( searchCols[i] ) {\n\t\t\t\t_fnCamelToHungarian( DataTable.models.oSearch, searchCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Enable search delay if server-side processing is enabled\n\tif (init.serverSide && ! init.searchDelay) {\n\t\tinit.searchDelay = 400;\n\t}\n}\n\n\n/**\n * Provide backwards compatibility for column options. Note that the new options\n * are mapped onto the old parameters, so this is an external interface change\n * only.\n *  @param {object} init Object to map\n */\nfunction _fnCompatCols ( init )\n{\n\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\n\t// orderData can be given as an integer\n\tvar dataSort = init.aDataSort;\n\tif ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {\n\t\tinit.aDataSort = [ dataSort ];\n\t}\n}\n\n\n/**\n * Browser feature detection for capabilities, quirks\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBrowserDetect( settings )\n{\n\t// We don't need to do this every time DataTables is constructed, the values\n\t// calculated are specific to the browser and OS configuration which we\n\t// don't expect to change between initialisations\n\tif ( ! DataTable.__browser ) {\n\t\tvar browser = {};\n\t\tDataTable.__browser = browser;\n\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: -1 * window.pageXOffset, // allow for scrolling\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\n\t\tvar outer = n.children();\n\t\tvar inner = outer.children();\n\n\t\t// Get scrollbar width\n\t\tbrowser.barWidth = outer[0].offsetWidth - outer[0].clientWidth;\n\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( inner.offset().left ) !== 1;\n\n\t\tn.remove();\n\t}\n\n\t$.extend( settings.oBrowser, DataTable.__browser );\n\tsettings.oScroll.iBarWidth = DataTable.__browser.barWidth;\n}\n\n/**\n * Add a column to the list used for the table with default values\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAddColumn( oSettings )\n{\n\t// Add column to aoColumns array\n\tvar oDefaults = DataTable.defaults.column;\n\tvar iCol = oSettings.aoColumns.length;\n\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\tidx: iCol,\n\t\tsearchFixed: {},\n\t\tcolEl: $('<col>').attr('data-dt-column', iCol)\n\t} );\n\toSettings.aoColumns.push( oCol );\n\n\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t// passed into extend can be undefined. This allows the user to give a default\n\t// with only some of the parameters defined, and also not give a default\n\tvar searchCols = oSettings.aoPreSearchCols;\n\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n}\n\n\n/**\n * Apply options for a column\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iCol column index to consider\n *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnOptions( oSettings, iCol, oOptions )\n{\n\tvar oCol = oSettings.aoColumns[ iCol ];\n\n\t/* User specified column options */\n\tif ( oOptions !== undefined && oOptions !== null )\n\t{\n\t\t// Backwards compatibility\n\t\t_fnCompatCols( oOptions );\n\n\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions, true );\n\n\t\t/* Backwards compatibility for mDataProp */\n\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t{\n\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t}\n\n\t\tif ( oOptions.sType )\n\t\t{\n\t\t\toCol._sManualType = oOptions.sType;\n\t\t}\n\t\n\t\t// `class` is a reserved word in JavaScript, so we need to provide\n\t\t// the ability to use a valid name for the camel case input\n\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t{\n\t\t\toOptions.sClass = oOptions.className;\n\t\t}\n\n\t\tvar origClass = oCol.sClass;\n\n\t\t$.extend( oCol, oOptions );\n\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\n\t\t// Merge class from previously defined classes with this one, rather than just\n\t\t// overwriting it in the extend above\n\t\tif (origClass !== oCol.sClass) {\n\t\t\toCol.sClass = origClass + ' ' + oCol.sClass;\n\t\t}\n\n\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t * priority if defined\n\t\t */\n\t\tif ( oOptions.iDataSort !== undefined )\n\t\t{\n\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t}\n\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t}\n\n\t/* Cache the data get and set functions for speed */\n\tvar mDataSrc = oCol.mData;\n\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\n\t// The `render` option can be given as an array to access the helper rendering methods.\n\t// The first element is the rendering method to use, the rest are the parameters to pass\n\tif ( oCol.mRender && Array.isArray( oCol.mRender ) ) {\n\t\tvar copy = oCol.mRender.slice();\n\t\tvar name = copy.shift();\n\n\t\toCol.mRender = DataTable.render[name].apply(window, copy);\n\t}\n\n\toCol._render = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\n\tvar attrTest = function( src ) {\n\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t};\n\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t);\n\toCol._setter = null;\n\n\toCol.fnGetData = function (rowData, type, meta) {\n\t\tvar innerData = mData( rowData, type, undefined, meta );\n\n\t\treturn oCol._render && type ?\n\t\t\toCol._render( innerData, type, rowData, meta ) :\n\t\t\tinnerData;\n\t};\n\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t};\n\n\t// Indicate if DataTables should read DOM data as an object or array\n\t// Used in _fnGetRowElements\n\tif ( typeof mDataSrc !== 'number' && ! oCol._isArrayHost ) {\n\t\toSettings._rowReadObject = true;\n\t}\n\n\t/* Feature sorting overrides column specific when off */\n\tif ( !oSettings.oFeatures.bSort )\n\t{\n\t\toCol.bSortable = false;\n\t}\n}\n\n\n/**\n * Adjust the table column widths for new data. Note: you would probably want to\n * do a redraw after calling this function!\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAdjustColumnSizing ( settings )\n{\n\t_fnCalculateColumnWidths( settings );\n\t_fnColumnSizes( settings );\n\n\tvar scroll = settings.oScroll;\n\tif ( scroll.sY !== '' || scroll.sX !== '') {\n\t\t_fnScrollDraw( settings );\n\t}\n\n\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n}\n\n/**\n * Apply column sizes\n *\n * @param {*} settings DataTables settings object\n */\nfunction _fnColumnSizes ( settings )\n{\n\tvar cols = settings.aoColumns;\n\n\tfor (var i=0 ; i<cols.length ; i++) {\n\t\tvar width = _fnColumnsSumWidth(settings, [i], false, false);\n\n\t\tcols[i].colEl.css('width', width);\n\n\t\tif (settings.oScroll.sX) {\n\t\t\tcols[i].colEl.css('min-width', width);\n\t\t}\n\t}\n}\n\n\n/**\n * Convert the index of a visible column to the index in the data array (take account\n * of hidden columns)\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iMatch Visible column index to lookup\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\n\treturn typeof aiVis[iMatch] === 'number' ?\n\t\taiVis[iMatch] :\n\t\tnull;\n}\n\n\n/**\n * Convert the index of an index in the data array and convert it to the visible\n *   column index (take account of hidden columns)\n *  @param {int} iMatch Column index to lookup\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the data index\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnIndexToVisible( oSettings, iMatch )\n{\n\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\tvar iPos = aiVis.indexOf(iMatch);\n\n\treturn iPos !== -1 ? iPos : null;\n}\n\n\n/**\n * Get the number of visible columns\n *  @param {object} oSettings dataTables settings object\n *  @returns {int} i the number of visible columns\n *  @memberof DataTable#oApi\n */\nfunction _fnVisibleColumns( settings )\n{\n\tvar layout = settings.aoHeader;\n\tvar columns = settings.aoColumns;\n\tvar vis = 0;\n\n\tif ( layout.length ) {\n\t\tfor ( var i=0, iLen=layout[0].length ; i<iLen ; i++ ) {\n\t\t\tif ( columns[i].bVisible && $(layout[0][i].cell).css('display') !== 'none' ) {\n\t\t\t\tvis++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vis;\n}\n\n\n/**\n * Get an array of column indexes that match a given property\n *  @param {object} oSettings dataTables settings object\n *  @param {string} sParam Parameter in aoColumns to look for - typically\n *    bVisible or bSearchable\n *  @returns {array} Array of indexes with matched properties\n *  @memberof DataTable#oApi\n */\nfunction _fnGetColumns( oSettings, sParam )\n{\n\tvar a = [];\n\n\toSettings.aoColumns.map( function(val, i) {\n\t\tif ( val[sParam] ) {\n\t\t\ta.push( i );\n\t\t}\n\t} );\n\n\treturn a;\n}\n\n/**\n * Allow the result from a type detection function to be `true` while\n * translating that into a string. Old type detection functions will\n * return the type name if it passes. An object store would be better,\n * but not backwards compatible.\n *\n * @param {*} typeDetect Object or function for type detection\n * @param {*} res Result from the type detection function\n * @returns Type name or false\n */\nfunction _typeResult (typeDetect, res) {\n\treturn res === true\n\t\t? typeDetect._name\n\t\t: res;\n}\n\n/**\n * Calculate the 'type' of a column\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnColumnTypes ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar data = settings.aoData;\n\tvar types = DataTable.ext.type.detect;\n\tvar i, iLen, j, jen, k, ken;\n\tvar col, detectedType, cache;\n\n\t// For each column, spin over the data type detection functions, seeing if one matches\n\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\tcol = columns[i];\n\t\tcache = [];\n\n\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\tcol.sType = col._sManualType;\n\t\t}\n\t\telse if ( ! col.sType ) {\n\t\t\t// With SSP type detection can be unreliable and error prone, so we provide a way\n\t\t\t// to turn it off.\n\t\t\tif (! settings.typeDetect) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\tvar typeDetect = types[j];\n\n\t\t\t\t// There can be either one, or three type detection functions\n\t\t\t\tvar oneOf = typeDetect.oneOf;\n\t\t\t\tvar allOf = typeDetect.allOf || typeDetect;\n\t\t\t\tvar init = typeDetect.init;\n\t\t\t\tvar one = false;\n\n\t\t\t\tdetectedType = null;\n\n\t\t\t\t// Fast detect based on column assignment\n\t\t\t\tif (init) {\n\t\t\t\t\tdetectedType = _typeResult(typeDetect, init(settings, col, i));\n\n\t\t\t\t\tif (detectedType) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\tif (! data[k]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only one data point in the column needs to match this function\n\t\t\t\t\tif (oneOf && ! one) {\n\t\t\t\t\t\tone = _typeResult(typeDetect, oneOf( cache[k], settings ));\n\t\t\t\t\t}\n\n\t\t\t\t\t// All data points need to match this function\n\t\t\t\t\tdetectedType = _typeResult(typeDetect, allOf( cache[k], settings ));\n\n\t\t\t\t\t// If null, then this type can't apply to this column, so\n\t\t\t\t\t// rather than testing all cells, break out. There is an\n\t\t\t\t\t// exception for the last type which is `html`. We need to\n\t\t\t\t\t// scan all rows since it is possible to mix string and HTML\n\t\t\t\t\t// types\n\t\t\t\t\tif ( ! detectedType && j !== types.length-3 ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only a single match is needed for html type since it is\n\t\t\t\t\t// bottom of the pile and very similar to string - but it\n\t\t\t\t\t// must not be empty\n\t\t\t\t\tif ( detectedType === 'html' && ! _empty(cache[k]) ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t// type\n\t\t\t\tif ( (oneOf && one && detectedType) || (!oneOf && detectedType) ) {\n\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fall back - if no type was detected, always use string\n\t\t\tif ( ! col.sType ) {\n\t\t\t\tcol.sType = 'string';\n\t\t\t}\n\t\t}\n\n\t\t// Set class names for header / footer for auto type classes\n\t\tvar autoClass = _ext.type.className[col.sType];\n\n\t\tif (autoClass) {\n\t\t\t_columnAutoClass(settings.aoHeader, i, autoClass);\n\t\t\t_columnAutoClass(settings.aoFooter, i, autoClass);\n\t\t}\n\n\t\tvar renderer = _ext.type.render[col.sType];\n\n\t\t// This can only happen once! There is no way to remove\n\t\t// a renderer. After the first time the renderer has\n\t\t// already been set so createTr will run the renderer itself.\n\t\tif (renderer && ! col._render) {\n\t\t\tcol._render = DataTable.util.get(renderer);\n\n\t\t\t_columnAutoRender(settings, i);\n\t\t}\n\t}\n}\n\n/**\n * Apply an auto detected renderer to data which doesn't yet have\n * a renderer\n */\nfunction _columnAutoRender(settings, colIdx) {\n\tvar data = settings.aoData;\n\n\tfor (var i=0 ; i<data.length ; i++) {\n\t\tif (data[i].nTr) {\n\t\t\t// We have to update the display here since there is no\n\t\t\t// invalidation check for the data\n\t\t\tvar display = _fnGetCellData( settings, i, colIdx, 'display' );\n\n\t\t\tdata[i].displayData[colIdx] = display;\n\t\t\t_fnWriteCell(data[i].anCells[colIdx], display);\n\n\t\t\t// No need to update sort / filter data since it has\n\t\t\t// been invalidated and will be re-read with the\n\t\t\t// renderer now applied\n\t\t}\n\t}\n}\n\n/**\n * Apply a class name to a column's header cells\n */\nfunction _columnAutoClass(container, colIdx, className) {\n\tcontainer.forEach(function (row) {\n\t\tif (row[colIdx] && row[colIdx].unique) {\n\t\t\t_addClass(row[colIdx].cell, className);\n\t\t}\n\t});\n}\n\n/**\n * Take the column definitions and static columns arrays and calculate how\n * they relate to column indexes. The callback function will then apply the\n * definition found for a column to a suitable configuration object.\n *  @param {object} oSettings dataTables settings object\n *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n *  @param {array} aoCols The aoColumns array that defines columns individually\n *  @param {array} headerLayout Layout for header as it was loaded\n *  @param {function} fn Callback function - takes two parameters, the calculated\n *    column index and the definition for that column.\n *  @memberof DataTable#oApi\n */\nfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, headerLayout, fn )\n{\n\tvar i, iLen, j, jLen, k, kLen, def;\n\tvar columns = oSettings.aoColumns;\n\n\tif ( aoCols ) {\n\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) {\n\t\t\tif (aoCols[i] && aoCols[i].name) {\n\t\t\t\tcolumns[i].sName = aoCols[i].name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Column definitions with aTargets\n\tif ( aoColDefs )\n\t{\n\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t{\n\t\t\tdef = aoColDefs[i];\n\n\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\tvar aTargets = def.target !== undefined\n\t\t\t\t? def.target\n\t\t\t\t: def.targets !== undefined\n\t\t\t\t\t? def.targets\n\t\t\t\t\t: def.aTargets;\n\n\t\t\tif ( ! Array.isArray( aTargets ) )\n\t\t\t{\n\t\t\t\taTargets = [ aTargets ];\n\t\t\t}\n\n\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tvar target = aTargets[j];\n\n\t\t\t\tif ( typeof target === 'number' && target >= 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\twhile( columns.length <= target )\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\tfn( target, def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof target === 'number' && target < 0 )\n\t\t\t\t{\n\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\tfn( columns.length+target, def );\n\t\t\t\t}\n\t\t\t\telse if ( typeof target === 'string' )\n\t\t\t\t{\n\t\t\t\t\tfor ( k=0, kLen=columns.length ; k<kLen ; k++ ) {\n\t\t\t\t\t\tif (target === '_all') {\n\t\t\t\t\t\t\t// Apply to all columns\n\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (target.indexOf(':name') !== -1) {\n\t\t\t\t\t\t\t// Column selector\n\t\t\t\t\t\t\tif (columns[k].sName === target.replace(':name', '')) {\n\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Cell selector\n\t\t\t\t\t\t\theaderLayout.forEach(function (row) {\n\t\t\t\t\t\t\t\tif (row[k]) {\n\t\t\t\t\t\t\t\t\tvar cell = $(row[k].cell);\n\n\t\t\t\t\t\t\t\t\t// Legacy support. Note that it means that we don't support\n\t\t\t\t\t\t\t\t\t// an element name selector only, since they are treated as\n\t\t\t\t\t\t\t\t\t// class names for 1.x compat.\n\t\t\t\t\t\t\t\t\tif (target.match(/^[a-z][\\w-]*$/i)) {\n\t\t\t\t\t\t\t\t\t\ttarget = '.' + target;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (cell.is( target )) {\n\t\t\t\t\t\t\t\t\t\tfn( k, def );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Statically defined columns array\n\tif ( aoCols ) {\n\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) {\n\t\t\tfn( i, aoCols[i] );\n\t\t}\n\t}\n}\n\n\n/**\n * Get the width for a given set of columns\n *\n * @param {*} settings DataTables settings object\n * @param {*} targets Columns - comma separated string or array of numbers\n * @param {*} original Use the original width (true) or calculated (false)\n * @param {*} incVisible Include visible columns (true) or not (false)\n * @returns Combined CSS value\n */\nfunction _fnColumnsSumWidth( settings, targets, original, incVisible ) {\n\tif ( ! Array.isArray( targets ) ) {\n\t\ttargets = _fnColumnsFromHeader( targets );\n\t}\n\n\tvar sum = 0;\n\tvar unit;\n\tvar columns = settings.aoColumns;\n\t\n\tfor ( var i=0, iLen=targets.length ; i<iLen ; i++ ) {\n\t\tvar column = columns[ targets[i] ];\n\t\tvar definedWidth = original ?\n\t\t\tcolumn.sWidthOrig :\n\t\t\tcolumn.sWidth;\n\n\t\tif ( ! incVisible && column.bVisible === false ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( definedWidth === null || definedWidth === undefined ) {\n\t\t\treturn null; // can't determine a defined width - browser defined\n\t\t}\n\t\telse if ( typeof definedWidth === 'number' ) {\n\t\t\tunit = 'px';\n\t\t\tsum += definedWidth;\n\t\t}\n\t\telse {\n\t\t\tvar matched = definedWidth.match(/([\\d\\.]+)([^\\d]*)/);\n\n\t\t\tif ( matched ) {\n\t\t\t\tsum += matched[1] * 1;\n\t\t\t\tunit = matched.length === 3 ?\n\t\t\t\t\tmatched[2] :\n\t\t\t\t\t'px';\n\t\t\t}\n\t\t}\n\t}\n\n\treturn sum + unit;\n}\n\nfunction _fnColumnsFromHeader( cell )\n{\n\tvar attr = $(cell).closest('[data-dt-column]').attr('data-dt-column');\n\n\tif ( ! attr ) {\n\t\treturn [];\n\t}\n\n\treturn attr.split(',').map( function (val) {\n\t\treturn val * 1;\n\t} );\n}\n/**\n * Add a data array to the table, creating DOM node etc. This is the parallel to\n * _fnGatherData, but for adding rows from a JavaScript source, rather than a\n * DOM source.\n *  @param {object} settings dataTables settings object\n *  @param {array} data data array to be added\n *  @param {node} [tr] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [tds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n *  @memberof DataTable#oApi\n */\nfunction _fnAddData ( settings, dataIn, tr, tds )\n{\n\t/* Create the object for storing information about this new row */\n\tvar rowIdx = settings.aoData.length;\n\tvar rowModel = $.extend( true, {}, DataTable.models.oRow, {\n\t\tsrc: tr ? 'dom' : 'data',\n\t\tidx: rowIdx\n\t} );\n\n\trowModel._aData = dataIn;\n\tsettings.aoData.push( rowModel );\n\n\tvar columns = settings.aoColumns;\n\n\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t{\n\t\t// Invalidate the column types as the new data needs to be revalidated\n\t\tcolumns[i].sType = null;\n\t}\n\n\t/* Add to the display array */\n\tsettings.aiDisplayMaster.push( rowIdx );\n\n\tvar id = settings.rowIdFn( dataIn );\n\tif ( id !== undefined ) {\n\t\tsettings.aIds[ id ] = rowModel;\n\t}\n\n\t/* Create the DOM information, or register it if already present */\n\tif ( tr || ! settings.oFeatures.bDeferRender )\n\t{\n\t\t_fnCreateTr( settings, rowIdx, tr, tds );\n\t}\n\n\treturn rowIdx;\n}\n\n\n/**\n * Add one or more TR elements to the table. Generally we'd expect to\n * use this for reading data from a DOM sourced table, but it could be\n * used for an TR element. Note that if a TR is given, it is used (i.e.\n * it is not cloned).\n *  @param {object} settings dataTables settings object\n *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n *  @returns {array} Array of indexes for the added rows\n *  @memberof DataTable#oApi\n */\nfunction _fnAddTr( settings, trs )\n{\n\tvar row;\n\n\t// Allow an individual node to be passed in\n\tif ( ! (trs instanceof $) ) {\n\t\ttrs = $(trs);\n\t}\n\n\treturn trs.map( function (i, el) {\n\t\trow = _fnGetRowElements( settings, el );\n\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t} );\n}\n\n\n/**\n * Get the data for a given cell from the internal cache, taking into account data mapping\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {string} type data get type ('display', 'type' 'filter|search' 'sort|order')\n *  @returns {*} Cell data\n *  @memberof DataTable#oApi\n */\nfunction _fnGetCellData( settings, rowIdx, colIdx, type )\n{\n\tif (type === 'search') {\n\t\ttype = 'filter';\n\t}\n\telse if (type === 'order') {\n\t\ttype = 'sort';\n\t}\n\n\tvar row = settings.aoData[rowIdx];\n\n\tif (! row) {\n\t\treturn undefined;\n\t}\n\n\tvar draw           = settings.iDraw;\n\tvar col            = settings.aoColumns[colIdx];\n\tvar rowData        = row._aData;\n\tvar defaultContent = col.sDefaultContent;\n\tvar cellData       = col.fnGetData( rowData, type, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t} );\n\n\t// Allow for a node being returned for non-display types\n\tif (type !== 'display' && cellData && typeof cellData === 'object' && cellData.nodeName) {\n\t\tcellData = cellData.innerHTML;\n\t}\n\n\tif ( cellData === undefined ) {\n\t\tif ( settings.iDrawError != draw && defaultContent === null ) {\n\t\t\t_fnLog( settings, 0, \"Requested unknown parameter \"+\n\t\t\t\t(typeof col.mData=='function' ? '{function}' : \"'\"+col.mData+\"'\")+\n\t\t\t\t\" for row \"+rowIdx+\", column \"+colIdx, 4 );\n\t\t\tsettings.iDrawError = draw;\n\t\t}\n\t\treturn defaultContent;\n\t}\n\n\t// When the data source is null and a specific data type is requested (i.e.\n\t// not the original data), we can use default column data\n\tif ( (cellData === rowData || cellData === null) && defaultContent !== null && type !== undefined ) {\n\t\tcellData = defaultContent;\n\t}\n\telse if ( typeof cellData === 'function' ) {\n\t\t// If the data source is a function, then we run it and use the return,\n\t\t// executing in the scope of the data object (for instances)\n\t\treturn cellData.call( rowData );\n\t}\n\n\tif ( cellData === null && type === 'display' ) {\n\t\treturn '';\n\t}\n\n\tif ( type === 'filter' ) {\n\t\tvar formatters = DataTable.ext.type.search;\n\n\t\tif ( formatters[ col.sType ] ) {\n\t\t\tcellData = formatters[ col.sType ]( cellData );\n\t\t}\n\t}\n\n\treturn cellData;\n}\n\n\n/**\n * Set the value for a specific cell, into the internal data cache\n *  @param {object} settings dataTables settings object\n *  @param {int} rowIdx aoData row id\n *  @param {int} colIdx Column index\n *  @param {*} val Value to set\n *  @memberof DataTable#oApi\n */\nfunction _fnSetCellData( settings, rowIdx, colIdx, val )\n{\n\tvar col     = settings.aoColumns[colIdx];\n\tvar rowData = settings.aoData[rowIdx]._aData;\n\n\tcol.fnSetData( rowData, val, {\n\t\tsettings: settings,\n\t\trow:      rowIdx,\n\t\tcol:      colIdx\n\t}  );\n}\n\n/**\n * Write a value to a cell\n * @param {*} td Cell\n * @param {*} val Value\n */\nfunction _fnWriteCell(td, val)\n{\n\tif (val && typeof val === 'object' && val.nodeName) {\n\t\t$(td)\n\t\t\t.empty()\n\t\t\t.append(val);\n\t}\n\telse {\n\t\ttd.innerHTML = val;\n\t}\n}\n\n\n// Private variable that is used to match action syntax in the data property object\nvar __reArray = /\\[.*?\\]$/;\nvar __reFn = /\\(\\)$/;\n\n/**\n * Split string on periods, taking into account escaped periods\n * @param  {string} str String to split\n * @return {array} Split string\n */\nfunction _fnSplitObjNotation( str )\n{\n\tvar parts = str.match(/(\\\\.|[^.])+/g) || [''];\n\n\treturn parts.map( function ( s ) {\n\t\treturn s.replace(/\\\\\\./g, '.');\n\t} );\n}\n\n\n/**\n * Return a function that can be used to get data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data get function\n *  @memberof DataTable#oApi\n */\nvar _fnGetObjectDataFn = DataTable.util.get;\n\n\n/**\n * Return a function that can be used to set data from a source object, taking\n * into account the ability to use nested objects as a source\n *  @param {string|int|function} mSource The data source for the object\n *  @returns {function} Data set function\n *  @memberof DataTable#oApi\n */\nvar _fnSetObjectDataFn = DataTable.util.set;\n\n\n/**\n * Return an array with the full table data\n *  @param {object} oSettings dataTables settings object\n *  @returns array {array} aData Master data array\n *  @memberof DataTable#oApi\n */\nfunction _fnGetDataMaster ( settings )\n{\n\treturn _pluck( settings.aoData, '_aData' );\n}\n\n\n/**\n * Nuke the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnClearTable( settings )\n{\n\tsettings.aoData.length = 0;\n\tsettings.aiDisplayMaster.length = 0;\n\tsettings.aiDisplay.length = 0;\n\tsettings.aIds = {};\n}\n\n\n/**\n * Mark cached data as invalid such that a re-read of the data will occur when\n * the cached data is next requested. Also update from the data source object.\n *\n * @param {object} settings DataTables settings object\n * @param {int}    rowIdx   Row index to invalidate\n * @param {string} [src]    Source to invalidate from: undefined, 'auto', 'dom'\n *     or 'data'\n * @param {int}    [colIdx] Column index to invalidate. If undefined the whole\n *     row will be invalidated\n * @memberof DataTable#oApi\n *\n * @todo For the modularisation of v1.11 this will need to become a callback, so\n *   the sort and filter methods can subscribe to it. That will required\n *   initialisation options for sorting, which is why it is not already baked in\n */\nfunction _fnInvalidate( settings, rowIdx, src, colIdx )\n{\n\tvar row = settings.aoData[ rowIdx ];\n\tvar i, iLen;\n\n\t// Remove the cached data for the row\n\trow._aSortData = null;\n\trow._aFilterData = null;\n\trow.displayData = null;\n\n\t// Are we reading last data from DOM or the data object?\n\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t// Read the data from the DOM\n\t\trow._aData = _fnGetRowElements(\n\t\t\t\tsettings, row, colIdx, colIdx === undefined ? undefined : row._aData\n\t\t\t)\n\t\t\t.data;\n\t}\n\telse {\n\t\t// Reading from data object, update the DOM\n\t\tvar cells = row.anCells;\n\t\tvar display = _fnGetRowDisplay(settings, rowIdx);\n\n\t\tif ( cells ) {\n\t\t\tif ( colIdx !== undefined ) {\n\t\t\t\t_fnWriteCell(cells[colIdx], display[colIdx]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor ( i=0, iLen=cells.length ; i<iLen ; i++ ) {\n\t\t\t\t\t_fnWriteCell(cells[i], display[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Column specific invalidation\n\tvar cols = settings.aoColumns;\n\tif ( colIdx !== undefined ) {\n\t\t// Type - the data might have changed\n\t\tcols[ colIdx ].sType = null;\n\n\t\t// Max length string. Its a fairly cheep recalculation, so not worth\n\t\t// something more complicated\n\t\tcols[ colIdx ].wideStrings = null;\n\t}\n\telse {\n\t\tfor ( i=0, iLen=cols.length ; i<iLen ; i++ ) {\n\t\t\tcols[i].sType = null;\n\t\t\tcols[i].wideStrings = null;\n\t\t}\n\n\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t_fnRowAttributes( settings, row );\n\t}\n}\n\n\n/**\n * Build a data source object from an HTML row, reading the contents of the\n * cells that are in the row.\n *\n * @param {object} settings DataTables settings object\n * @param {node|object} TR element from which to read data or existing row\n *   object from which to re-read the data from the cells\n * @param {int} [colIdx] Optional column index\n * @param {array|object} [d] Data source object. If `colIdx` is given then this\n *   parameter should also be given and will be used to write the data into.\n *   Only the column in question will be written\n * @returns {object} Object with two parameters: `data` the data read, in\n *   document order, and `cells` and array of nodes (they can be useful to the\n *   caller, so rather than needing a second traversal to get them, just return\n *   them from here).\n * @memberof DataTable#oApi\n */\nfunction _fnGetRowElements( settings, row, colIdx, d )\n{\n\tvar\n\t\ttds = [],\n\t\ttd = row.firstChild,\n\t\tname, col, i=0, contents,\n\t\tcolumns = settings.aoColumns,\n\t\tobjectRead = settings._rowReadObject;\n\n\t// Allow the data object to be passed in, or construct\n\td = d !== undefined ?\n\t\td :\n\t\tobjectRead ?\n\t\t\t{} :\n\t\t\t[];\n\n\tvar attr = function ( str, td  ) {\n\t\tif ( typeof str === 'string' ) {\n\t\t\tvar idx = str.indexOf('@');\n\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tvar attr = str.substring( idx+1 );\n\t\t\t\tvar setter = _fnSetObjectDataFn( str );\n\t\t\t\tsetter( d, td.getAttribute( attr ) );\n\t\t\t}\n\t\t}\n\t};\n\n\t// Read data from a cell and store into the data object\n\tvar cellProcess = function ( cell ) {\n\t\tif ( colIdx === undefined || colIdx === i ) {\n\t\t\tcol = columns[i];\n\t\t\tcontents = (cell.innerHTML).trim();\n\n\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\tvar setter = _fnSetObjectDataFn( col.mData._ );\n\t\t\t\tsetter( d, contents );\n\n\t\t\t\tattr( col.mData.sort, cell );\n\t\t\t\tattr( col.mData.type, cell );\n\t\t\t\tattr( col.mData.filter, cell );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depending on the `data` option for the columns the data can\n\t\t\t\t// be read to either an object or an array.\n\t\t\t\tif ( objectRead ) {\n\t\t\t\t\tif ( ! col._setter ) {\n\t\t\t\t\t\t// Cache the setter function\n\t\t\t\t\t\tcol._setter = _fnSetObjectDataFn( col.mData );\n\t\t\t\t\t}\n\t\t\t\t\tcol._setter( d, contents );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td[i] = contents;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ti++;\n\t};\n\n\tif ( td ) {\n\t\t// `tr` element was passed in\n\t\twhile ( td ) {\n\t\t\tname = td.nodeName.toUpperCase();\n\n\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\tcellProcess( td );\n\t\t\t\ttds.push( td );\n\t\t\t}\n\n\t\t\ttd = td.nextSibling;\n\t\t}\n\t}\n\telse {\n\t\t// Existing row object passed in\n\t\ttds = row.anCells;\n\n\t\tfor ( var j=0, jen=tds.length ; j<jen ; j++ ) {\n\t\t\tcellProcess( tds[j] );\n\t\t}\n\t}\n\n\t// Read the ID from the DOM if present\n\tvar rowNode = row.firstChild ? row : row.nTr;\n\n\tif ( rowNode ) {\n\t\tvar id = rowNode.getAttribute( 'id' );\n\n\t\tif ( id ) {\n\t\t\t_fnSetObjectDataFn( settings.rowId )( d, id );\n\t\t}\n\t}\n\n\treturn {\n\t\tdata: d,\n\t\tcells: tds\n\t};\n}\n\n/**\n * Render and cache a row's display data for the columns, if required\n * @returns \n */\nfunction _fnGetRowDisplay (settings, rowIdx) {\n\tvar rowModal = settings.aoData[rowIdx];\n\tvar columns = settings.aoColumns;\n\n\tif (! rowModal.displayData) {\n\t\t// Need to render and cache\n\t\trowModal.displayData = [];\n\t\n\t\tfor ( var colIdx=0, len=columns.length ; colIdx<len ; colIdx++ ) {\n\t\t\trowModal.displayData.push(\n\t\t\t\t_fnGetCellData( settings, rowIdx, colIdx, 'display' )\n\t\t\t);\n\t\t}\n\t}\n\n\treturn rowModal.displayData;\n}\n\n/**\n * Create a new TR element (and it's TD children) for a row\n *  @param {object} oSettings dataTables settings object\n *  @param {int} iRow Row to consider\n *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n *    DataTables will create a row automatically\n *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n *    if nTr is.\n *  @memberof DataTable#oApi\n */\nfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n{\n\tvar\n\t\trow = oSettings.aoData[iRow],\n\t\trowData = row._aData,\n\t\tcells = [],\n\t\tnTr, nTd, oCol,\n\t\ti, iLen, create,\n\t\ttrClass = oSettings.oClasses.tbody.row;\n\n\tif ( row.nTr === null )\n\t{\n\t\tnTr = nTrIn || document.createElement('tr');\n\n\t\trow.nTr = nTr;\n\t\trow.anCells = cells;\n\n\t\t_addClass(nTr, trClass);\n\n\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t * to the aoData array for fast look up\n\t\t */\n\t\tnTr._DT_RowIndex = iRow;\n\n\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t_fnRowAttributes( oSettings, row );\n\n\t\t/* Process each column */\n\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toCol = oSettings.aoColumns[i];\n\t\t\tcreate = nTrIn && anTds[i] ? false : true;\n\n\t\t\tnTd = create ? document.createElement( oCol.sCellType ) : anTds[i];\n\n\t\t\tif (! nTd) {\n\t\t\t\t_fnLog( oSettings, 0, 'Incorrect column count', 18 );\n\t\t\t}\n\n\t\t\tnTd._DT_CellIndex = {\n\t\t\t\trow: iRow,\n\t\t\t\tcolumn: i\n\t\t\t};\n\t\t\t\n\t\t\tcells.push( nTd );\n\t\t\t\n\t\t\tvar display = _fnGetRowDisplay(oSettings, iRow);\n\n\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\tif (\n\t\t\t\tcreate ||\n\t\t\t\t(\n\t\t\t\t\t(oCol.mRender || oCol.mData !== i) &&\n\t\t\t\t\t(!$.isPlainObject(oCol.mData) || oCol.mData._ !== i+'.display')\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t_fnWriteCell(nTd, display[i]);\n\t\t\t}\n\n\t\t\t// column class\n\t\t\t_addClass(nTd, oCol.sClass);\n\n\t\t\t// Visibility - add or remove as required\n\t\t\tif ( oCol.bVisible && create )\n\t\t\t{\n\t\t\t\tnTr.appendChild( nTd );\n\t\t\t}\n\t\t\telse if ( ! oCol.bVisible && ! create )\n\t\t\t{\n\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t}\n\n\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t{\n\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i ), rowData, iRow, i\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', 'row-created', [nTr, rowData, iRow, cells] );\n\t}\n\telse {\n\t\t_addClass(row.nTr, trClass);\n\t}\n}\n\n\n/**\n * Add attributes to a row based on the special `DT_*` parameters in a data\n * source object.\n *  @param {object} settings DataTables settings object\n *  @param {object} DataTables row object for the row to be modified\n *  @memberof DataTable#oApi\n */\nfunction _fnRowAttributes( settings, row )\n{\n\tvar tr = row.nTr;\n\tvar data = row._aData;\n\n\tif ( tr ) {\n\t\tvar id = settings.rowIdFn( data );\n\n\t\tif ( id ) {\n\t\t\ttr.id = id;\n\t\t}\n\n\t\tif ( data.DT_RowClass ) {\n\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\ta;\n\n\t\t\t$(tr)\n\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t.addClass( data.DT_RowClass );\n\t\t}\n\n\t\tif ( data.DT_RowAttr ) {\n\t\t\t$(tr).attr( data.DT_RowAttr );\n\t\t}\n\n\t\tif ( data.DT_RowData ) {\n\t\t\t$(tr).data( data.DT_RowData );\n\t\t}\n\t}\n}\n\n\n/**\n * Create the HTML header for the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnBuildHead( settings, side )\n{\n\tvar classes = settings.oClasses;\n\tvar columns = settings.aoColumns;\n\tvar i, iLen, row;\n\tvar target = side === 'header'\n\t\t? settings.nTHead\n\t\t: settings.nTFoot;\n\tvar titleProp = side === 'header' ? 'sTitle' : side;\n\n\t// Footer might be defined\n\tif (! target) {\n\t\treturn;\n\t}\n\n\t// If no cells yet and we have content for them, then create\n\tif (side === 'header' || _pluck(settings.aoColumns, titleProp).join('')) {\n\t\trow = $('tr', target);\n\n\t\t// Add a row if needed\n\t\tif (! row.length) {\n\t\t\trow = $('<tr/>').appendTo(target)\n\t\t}\n\n\t\t// Add the number of cells needed to make up to the number of columns\n\t\tif (row.length === 1) {\n\t\t\tvar cellCount = 0;\n\t\t\t\n\t\t\t$('td, th', row).each(function () {\n\t\t\t\tcellCount += this.colSpan;\n\t\t\t});\n\n\t\t\tfor ( i=cellCount, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\t\t$('<th/>')\n\t\t\t\t\t.html( columns[i][titleProp] || '' )\n\t\t\t\t\t.appendTo( row );\n\t\t\t}\n\t\t}\n\t}\n\n\tvar detected = _fnDetectHeader( settings, target, true );\n\n\tif (side === 'header') {\n\t\tsettings.aoHeader = detected;\n\t\t$('tr', target).addClass(classes.thead.row);\n\t}\n\telse {\n\t\tsettings.aoFooter = detected;\n\t\t$('tr', target).addClass(classes.tfoot.row);\n\t}\n\n\t// Every cell needs to be passed through the renderer\n\t$(target).children('tr').children('th, td')\n\t\t.each( function () {\n\t\t\t_fnRenderer( settings, side )(\n\t\t\t\tsettings, $(this), classes\n\t\t\t);\n\t\t} );\n}\n\n/**\n * Build a layout structure for a header or footer\n *\n * @param {*} settings DataTables settings\n * @param {*} source Source layout array\n * @param {*} incColumns What columns should be included\n * @returns Layout array in column index order\n */\nfunction _fnHeaderLayout( settings, source, incColumns )\n{\n\tvar row, column, cell;\n\tvar local = [];\n\tvar structure = [];\n\tvar columns = settings.aoColumns;\n\tvar columnCount = columns.length;\n\tvar rowspan, colspan;\n\n\tif ( ! source ) {\n\t\treturn;\n\t}\n\n\t// Default is to work on only visible columns\n\tif ( ! incColumns ) {\n\t\tincColumns = _range(columnCount)\n\t\t\t.filter(function (idx) {\n\t\t\t\treturn columns[idx].bVisible;\n\t\t\t});\n\t}\n\n\t// Make a copy of the master layout array, but with only the columns we want\n\tfor ( row=0 ; row<source.length ; row++ ) {\n\t\t// Remove any columns we haven't selected\n\t\tlocal[row] = source[row].slice().filter(function (cell, i) {\n\t\t\treturn incColumns.includes(i);\n\t\t});\n\n\t\t// Prep the structure array - it needs an element for each row\n\t\tstructure.push( [] );\n\t}\n\n\tfor ( row=0 ; row<local.length ; row++ ) {\n\t\tfor ( column=0 ; column<local[row].length ; column++ ) {\n\t\t\trowspan = 1;\n\t\t\tcolspan = 1;\n\n\t\t\t// Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t// insert point. If there is, then there is nothing to do.\n\t\t\tif ( structure[row][column] === undefined ) {\n\t\t\t\tcell = local[row][column].cell;\n\n\t\t\t\t// Expand for rowspan\n\t\t\t\twhile (\n\t\t\t\t\tlocal[row+rowspan] !== undefined &&\n\t\t\t\t\tlocal[row][column].cell == local[row+rowspan][column].cell\n\t\t\t\t) {\n\t\t\t\t\tstructure[row+rowspan][column] = null;\n\t\t\t\t\trowspan++;\n\t\t\t\t}\n\n\t\t\t\t// And for colspan\n\t\t\t\twhile (\n\t\t\t\t\tlocal[row][column+colspan] !== undefined &&\n\t\t\t\t\tlocal[row][column].cell == local[row][column+colspan].cell\n\t\t\t\t) {\n\t\t\t\t\t// Which also needs to go over rows\n\t\t\t\t\tfor ( var k=0 ; k<rowspan ; k++ ) {\n\t\t\t\t\t\tstructure[row+k][column+colspan] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tcolspan++;\n\t\t\t\t}\n\n\t\t\t\tvar titleSpan = $('.dt-column-title', cell);\n\n\t\t\t\tstructure[row][column] = {\n\t\t\t\t\tcell: cell,\n\t\t\t\t\tcolspan: colspan,\n\t\t\t\t\trowspan: rowspan,\n\t\t\t\t\ttitle: titleSpan.length\n\t\t\t\t\t\t? titleSpan.html()\n\t\t\t\t\t\t: $(cell).html()\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn structure;\n}\n\n\n/**\n * Draw the header (or footer) element based on the column visibility states.\n *\n *  @param object oSettings dataTables settings object\n *  @param array aoSource Layout array from _fnDetectHeader\n *  @memberof DataTable#oApi\n */\nfunction _fnDrawHead( settings, source )\n{\n\tvar layout = _fnHeaderLayout(settings, source);\n\tvar tr, n;\n\n\tfor ( var row=0 ; row<source.length ; row++ ) {\n\t\ttr = source[row].row;\n\n\t\t// All cells are going to be replaced, so empty out the row\n\t\t// Can't use $().empty() as that kills event handlers\n\t\tif (tr) {\n\t\t\twhile( (n = tr.firstChild) ) {\n\t\t\t\ttr.removeChild( n );\n\t\t\t}\n\t\t}\n\n\t\tfor ( var column=0 ; column<layout[row].length ; column++ ) {\n\t\t\tvar point = layout[row][column];\n\n\t\t\tif (point) {\n\t\t\t\t$(point.cell)\n\t\t\t\t\t.appendTo(tr)\n\t\t\t\t\t.attr('rowspan', point.rowspan)\n\t\t\t\t\t.attr('colspan', point.colspan);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n/**\n * Insert the required TR nodes into the table for display\n *  @param {object} oSettings dataTables settings object\n *  @param ajaxComplete true after ajax call to complete rendering\n *  @memberof DataTable#oApi\n */\nfunction _fnDraw( oSettings, ajaxComplete )\n{\n\t// Allow for state saving and a custom start position\n\t_fnStart( oSettings );\n\n\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\tif ( aPreDraw.indexOf(false) !== -1 )\n\t{\n\t\t_fnProcessingDisplay( oSettings, false );\n\t\treturn;\n\t}\n\n\tvar anRows = [];\n\tvar iRowCount = 0;\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar aiDisplay = oSettings.aiDisplay;\n\tvar iDisplayStart = oSettings._iDisplayStart;\n\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\tvar columns = oSettings.aoColumns;\n\tvar body = $(oSettings.nTBody);\n\n\toSettings.bDrawing = true;\n\n\t/* Server-side processing draw intercept */\n\tif ( oSettings.deferLoading )\n\t{\n\t\toSettings.deferLoading = false;\n\t\toSettings.iDraw++;\n\t\t_fnProcessingDisplay( oSettings, false );\n\t}\n\telse if ( !bServerSide )\n\t{\n\t\toSettings.iDraw++;\n\t}\n\telse if ( !oSettings.bDestroying && !ajaxComplete)\n\t{\n\t\t// Show loading message for server-side processing\n\t\tif (oSettings.iDraw === 0) {\n\t\t\tbody.empty().append(_emptyRow(oSettings));\n\t\t}\n\n\t\t_fnAjaxUpdate( oSettings );\n\t\treturn;\n\t}\n\n\tif ( aiDisplay.length !== 0 )\n\t{\n\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\n\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t{\n\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\n\t\t\t// Row has been deleted - can't be displayed\n\t\t\tif (aoData === null)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Row node hasn't been created yet\n\t\t\tif ( aoData.nTr === null )\n\t\t\t{\n\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t}\n\n\t\t\tvar nRow = aoData.nTr;\n\n\t\t\t// Add various classes as needed\n\t\t\tfor (var i=0 ; i<columns.length ; i++) {\n\t\t\t\tvar col = columns[i];\n\t\t\t\tvar td = aoData.anCells[i];\n\n\t\t\t\t_addClass(td, _ext.type.className[col.sType]); // auto class\n\t\t\t\t_addClass(td, oSettings.oClasses.tbody.cell); // all cells\n\t\t\t}\n\n\t\t\t// Row callback functions - might want to manipulate the row\n\t\t\t// iRowCount and j are not currently documented. Are they at all\n\t\t\t// useful?\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t[nRow, aoData._aData, iRowCount, j, iDataIndex] );\n\n\t\t\tanRows.push( nRow );\n\t\t\tiRowCount++;\n\t\t}\n\t}\n\telse\n\t{\n\t\tanRows[ 0 ] = _emptyRow(oSettings);\n\t}\n\n\t/* Header and footer callbacks */\n\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t// replaceChildren is faster, but only became widespread in 2020,\n\t// so a fall back in jQuery is provided for older browsers.\n\tif (body[0].replaceChildren) {\n\t\tbody[0].replaceChildren.apply(body[0], anRows);\n\t}\n\telse {\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\t}\n\n\t// Empty table needs a specific class\n\t$(oSettings.nTableWrapper).toggleClass('dt-empty-footer', $('tr', oSettings.nTFoot).length === 0);\n\n\t/* Call all required callback functions for the end of a draw */\n\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings], true );\n\n\t/* Draw is complete, sorting and filtering must be as well */\n\toSettings.bSorted = false;\n\toSettings.bFiltered = false;\n\toSettings.bDrawing = false;\n}\n\n\n/**\n * Redraw the table - taking account of the various features which are enabled\n *  @param {object} oSettings dataTables settings object\n *  @param {boolean} [holdPosition] Keep the current paging position. By default\n *    the paging is reset to the first page\n *  @memberof DataTable#oApi\n */\nfunction _fnReDraw( settings, holdPosition, recompute )\n{\n\tvar\n\t\tfeatures = settings.oFeatures,\n\t\tsort     = features.bSort,\n\t\tfilter   = features.bFilter;\n\n\tif (recompute === undefined || recompute === true) {\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t_fnColumnTypes( settings );\n\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\t}\n\n\tif ( holdPosition !== true ) {\n\t\tsettings._iDisplayStart = 0;\n\t}\n\telse {\n\t\t// Keep position, but make sure that there is actually data to display,\n\t\t// otherwise we need to rewind a bit (e.g. if rows were deleted)\n\t\t_fnLengthOverflow(settings);\n\t}\n\n\t// Let any modules know about the draw hold position state (used by\n\t// scrolling internally)\n\tsettings._drawHold = holdPosition;\n\n\t_fnDraw( settings );\n\n\tsettings.api.one('draw', function () {\n\t\tsettings._drawHold = false;\n\t});\n}\n\n\n/*\n * Table is empty - create a row with an empty message in it\n */\nfunction _emptyRow ( settings ) {\n\tvar oLang = settings.oLanguage;\n\tvar zero = oLang.sZeroRecords;\n\tvar dataSrc = _fnDataSource( settings );\n\n\t// Make use of the fact that settings.json is only set once the initial data has\n\t// been loaded. Show loading when that isn't the case\n\tif ((dataSrc === 'ssp' || dataSrc === 'ajax') && ! settings.json) {\n\t\tzero = oLang.sLoadingRecords;\n\t}\n\telse if ( oLang.sEmptyTable && settings.fnRecordsTotal() === 0 )\n\t{\n\t\tzero = oLang.sEmptyTable;\n\t}\n\n\treturn $( '<tr/>' )\n\t\t.append( $('<td />', {\n\t\t\t'colSpan': _fnVisibleColumns( settings ),\n\t\t\t'class':   settings.oClasses.empty.row\n\t\t} ).html( zero ) )[0];\n}\n\n\n/**\n * Expand the layout items into an object for the rendering function\n */\nfunction _layoutItems (row, align, items) {\n\tif ( Array.isArray(items)) {\n\t\tfor (var i=0 ; i<items.length ; i++) {\n\t\t\t_layoutItems(row, align, items[i]);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tvar rowCell = row[align];\n\n\t// If it is an object, then there can be multiple features contained in it\n\tif ( $.isPlainObject( items ) ) {\n\t\t// A feature plugin cannot be named \"features\" due to this check\n\t\tif (items.features) {\n\t\t\tif (items.rowId) {\n\t\t\t\trow.id = items.rowId;\n\t\t\t}\n\t\t\tif (items.rowClass) {\n\t\t\t\trow.className = items.rowClass;\n\t\t\t}\n\n\t\t\trowCell.id = items.id;\n\t\t\trowCell.className = items.className;\n\n\t\t\t_layoutItems(row, align, items.features);\n\t\t}\n\t\telse {\n\t\t\tObject.keys(items).map(function (key) {\n\t\t\t\trowCell.contents.push( {\n\t\t\t\t\tfeature: key,\n\t\t\t\t\topts: items[key]\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\trowCell.contents.push(items);\n\t}\n}\n\n/**\n * Find, or create a layout row\n */\nfunction _layoutGetRow(rows, rowNum, align) {\n\tvar row;\n\n\t// Find existing rows\n\tfor (var i=0; i<rows.length; i++) {\n\t\trow = rows[i];\n\n\t\tif (row.rowNum === rowNum) {\n\t\t\t// full is on its own, but start and end share a row\n\t\t\tif (\n\t\t\t\t(align === 'full' && row.full) ||\n\t\t\t\t((align === 'start' || align === 'end') && (row.start || row.end))\n\t\t\t) {\n\t\t\t\tif (! row[align]) {\n\t\t\t\t\trow[align] = {\n\t\t\t\t\t\tcontents: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn row;\n\t\t\t}\n\t\t}\n\t}\n\n\t// If we get this far, then there was no match, create a new row\n\trow = {\n\t\trowNum: rowNum\t\n\t};\n\n\trow[align] = {\n\t\tcontents: []\n\t};\n\n\trows.push(row);\n\n\treturn row;\n}\n\n/**\n * Convert a `layout` object given by a user to the object structure needed\n * for the renderer. This is done twice, once for above and once for below\n * the table. Ordering must also be considered.\n *\n * @param {*} settings DataTables settings object\n * @param {*} layout Layout object to convert\n * @param {string} side `top` or `bottom`\n * @returns Converted array structure - one item for each row.\n */\nfunction _layoutArray ( settings, layout, side ) {\n\tvar rows = [];\n\t\n\t// Split out into an array\n\t$.each( layout, function ( pos, items ) {\n\t\tif (items === null) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = pos.match(/^([a-z]+)([0-9]*)([A-Za-z]*)$/);\n\t\tvar rowNum = parts[2]\n\t\t\t? parts[2] * 1\n\t\t\t: 0;\n\t\tvar align = parts[3]\n\t\t\t? parts[3].toLowerCase()\n\t\t\t: 'full';\n\n\t\t// Filter out the side we aren't interested in\n\t\tif (parts[1] !== side) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Get or create the row we should attach to\n\t\tvar row = _layoutGetRow(rows, rowNum, align);\n\n\t\t_layoutItems(row, align, items);\n\t});\n\n\t// Order by item identifier\n\trows.sort( function ( a, b ) {\n\t\tvar order1 = a.rowNum;\n\t\tvar order2 = b.rowNum;\n\n\t\t// If both in the same row, then the row with `full` comes first\n\t\tif (order1 === order2) {\n\t\t\tvar ret = a.full && ! b.full ? -1 : 1;\n\n\t\t\treturn side === 'bottom'\n\t\t\t\t? ret * -1\n\t\t\t\t: ret;\n\t\t}\n\n\t\treturn order2 - order1;\n\t} );\n\n\t// Invert for below the table\n\tif ( side === 'bottom' ) {\n\t\trows.reverse();\n\t}\n\n\tfor (var row = 0; row<rows.length; row++) {\n\t\tdelete rows[row].rowNum;\n\n\t\t_layoutResolve(settings, rows[row]);\n\t}\n\n\treturn rows;\n}\n\n\n/**\n * Convert the contents of a row's layout object to nodes that can be inserted\n * into the document by a renderer. Execute functions, look up plug-ins, etc.\n *\n * @param {*} settings DataTables settings object\n * @param {*} row Layout object for this row\n */\nfunction _layoutResolve( settings, row ) {\n\tvar getFeature = function (feature, opts) {\n\t\tif ( ! _ext.features[ feature ] ) {\n\t\t\t_fnLog( settings, 0, 'Unknown feature: '+ feature );\n\t\t}\n\n\t\treturn _ext.features[ feature ].apply( this, [settings, opts] );\n\t};\n\n\tvar resolve = function ( item ) {\n\t\tif (! row[ item ]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar line = row[ item ].contents;\n\n\t\tfor ( var i=0, iLen=line.length ; i<iLen ; i++ ) {\n\t\t\tif ( ! line[i] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse if ( typeof line[i] === 'string' ) {\n\t\t\t\tline[i] = getFeature( line[i], null );\n\t\t\t}\n\t\t\telse if ( $.isPlainObject(line[i]) ) {\n\t\t\t\t// If it's an object, it just has feature and opts properties from\n\t\t\t\t// the transform in _layoutArray\n\t\t\t\tline[i] = getFeature(line[i].feature, line[i].opts);\n\t\t\t}\n\t\t\telse if ( typeof line[i].node === 'function' ) {\n\t\t\t\tline[i] = line[i].node( settings );\n\t\t\t}\n\t\t\telse if ( typeof line[i] === 'function' ) {\n\t\t\t\tvar inst = line[i]( settings );\n\n\t\t\t\tline[i] = typeof inst.node === 'function' ?\n\t\t\t\t\tinst.node() :\n\t\t\t\t\tinst;\n\t\t\t}\n\t\t}\n\t};\n\n\tresolve('start');\n\tresolve('end');\n\tresolve('full');\n}\n\n\n/**\n * Add the options to the page HTML for the table\n *  @param {object} settings DataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnAddOptionsHtml ( settings )\n{\n\tvar classes = settings.oClasses;\n\tvar table = $(settings.nTable);\n\n\t// Wrapper div around everything DataTables controls\n\tvar insert = $('<div/>')\n\t\t.attr({\n\t\t\tid:      settings.sTableId+'_wrapper',\n\t\t\t'class': classes.container\n\t\t})\n\t\t.insertBefore(table);\n\n\tsettings.nTableWrapper = insert[0];\n\n\tif (settings.sDom) {\n\t\t// Legacy\n\t\t_fnLayoutDom(settings, settings.sDom, insert);\n\t}\n\telse {\n\t\tvar top = _layoutArray( settings, settings.layout, 'top' );\n\t\tvar bottom = _layoutArray( settings, settings.layout, 'bottom' );\n\t\tvar renderer = _fnRenderer( settings, 'layout' );\n\t\n\t\t// Everything above - the renderer will actually insert the contents into the document\n\t\ttop.forEach(function (item) {\n\t\t\trenderer( settings, insert, item );\n\t\t});\n\n\t\t// The table - always the center of attention\n\t\trenderer( settings, insert, {\n\t\t\tfull: {\n\t\t\t\ttable: true,\n\t\t\t\tcontents: [ _fnFeatureHtmlTable(settings) ]\n\t\t\t}\n\t\t} );\n\n\t\t// Everything below\n\t\tbottom.forEach(function (item) {\n\t\t\trenderer( settings, insert, item );\n\t\t});\n\t}\n\n\t// Processing floats on top, so it isn't an inserted feature\n\t_processingHtml( settings );\n}\n\n/**\n * Draw the table with the legacy DOM property\n * @param {*} settings DT settings object\n * @param {*} dom DOM string\n * @param {*} insert Insert point\n */\nfunction _fnLayoutDom( settings, dom, insert )\n{\n\tvar parts = dom.match(/(\".*?\")|('.*?')|./g);\n\tvar featureNode, option, newNode, next, attr;\n\n\tfor ( var i=0 ; i<parts.length ; i++ ) {\n\t\tfeatureNode = null;\n\t\toption = parts[i];\n\n\t\tif ( option == '<' ) {\n\t\t\t// New container div\n\t\t\tnewNode = $('<div/>');\n\n\t\t\t// Check to see if we should append an id and/or a class name to the container\n\t\t\tnext = parts[i+1];\n\n\t\t\tif ( next[0] == \"'\" || next[0] == '\"' ) {\n\t\t\t\tattr = next.replace(/['\"]/g, '');\n\n\t\t\t\tvar id = '', className;\n\n\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t */\n\t\t\t\tif ( attr.indexOf('.') != -1 ) {\n\t\t\t\t\tvar split = attr.split('.');\n\n\t\t\t\t\tid = split[0];\n\t\t\t\t\tclassName = split[1];\n\t\t\t\t}\n\t\t\t\telse if ( attr[0] == \"#\" ) {\n\t\t\t\t\tid = attr;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclassName = attr;\n\t\t\t\t}\n\n\t\t\t\tnewNode\n\t\t\t\t\t.attr('id', id.substring(1))\n\t\t\t\t\t.addClass(className);\n\n\t\t\t\ti++; // Move along the position array\n\t\t\t}\n\n\t\t\tinsert.append( newNode );\n\t\t\tinsert = newNode;\n\t\t}\n\t\telse if ( option == '>' ) {\n\t\t\t// End container div\n\t\t\tinsert = insert.parent();\n\t\t}\n\t\telse if ( option == 't' ) {\n\t\t\t// Table\n\t\t\tfeatureNode = _fnFeatureHtmlTable( settings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDataTable.ext.feature.forEach(function(feature) {\n\t\t\t\tif ( option == feature.cFeature ) {\n\t\t\t\t\tfeatureNode = feature.fnInit( settings );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Add to the display\n\t\tif ( featureNode ) {\n\t\t\tinsert.append( featureNode );\n\t\t}\n\t}\n}\n\n\n/**\n * Use the DOM source to create up an array of header cells. The idea here is to\n * create a layout grid (array) of rows x columns, which contains a reference\n * to the cell at that point in the grid (regardless of col/rowspan), such that\n * any column / row could be removed and the new grid constructed\n *  @param {node} thead The header/footer element for the table\n *  @returns {array} Calculated layout array\n *  @memberof DataTable#oApi\n */\nfunction _fnDetectHeader ( settings, thead, write )\n{\n\tvar columns = settings.aoColumns;\n\tvar rows = $(thead).children('tr');\n\tvar row, cell;\n\tvar i, k, l, iLen, shifted, column, colspan, rowspan;\n\tvar titleRow = settings.titleRow;\n\tvar isHeader = thead && thead.nodeName.toLowerCase() === 'thead';\n\tvar layout = [];\n\tvar unique;\n\tvar shift = function ( a, i, j ) {\n\t\tvar k = a[i];\n\t\twhile ( k[j] ) {\n\t\t\tj++;\n\t\t}\n\t\treturn j;\n\t};\n\n\t// We know how many rows there are in the layout - so prep it\n\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\tlayout.push( [] );\n\t}\n\n\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\trow = rows[i];\n\t\tcolumn = 0;\n\n\t\t// For every cell in the row..\n\t\tcell = row.firstChild;\n\t\twhile ( cell ) {\n\t\t\tif (\n\t\t\t\tcell.nodeName.toUpperCase() == 'TD' ||\n\t\t\t\tcell.nodeName.toUpperCase() == 'TH'\n\t\t\t) {\n\t\t\t\tvar cols = [];\n\t\t\t\tvar jqCell = $(cell);\n\n\t\t\t\t// Get the col and rowspan attributes from the DOM and sanitise them\n\t\t\t\tcolspan = cell.getAttribute('colspan') * 1;\n\t\t\t\trowspan = cell.getAttribute('rowspan') * 1;\n\t\t\t\tcolspan = (!colspan || colspan===0 || colspan===1) ? 1 : colspan;\n\t\t\t\trowspan = (!rowspan || rowspan===0 || rowspan===1) ? 1 : rowspan;\n\n\t\t\t\t// There might be colspan cells already in this row, so shift our target\n\t\t\t\t// accordingly\n\t\t\t\tshifted = shift( layout, i, column );\n\n\t\t\t\t// Cache calculation for unique columns\n\t\t\t\tunique = colspan === 1 ?\n\t\t\t\t\ttrue :\n\t\t\t\t\tfalse;\n\t\t\t\t\n\t\t\t\t// Perform header setup\n\t\t\t\tif ( write ) {\n\t\t\t\t\tif (unique) {\n\t\t\t\t\t\t// Allow column options to be set from HTML attributes\n\t\t\t\t\t\t_fnColumnOptions( settings, shifted, _fnEscapeObject(jqCell.data()) );\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Get the width for the column. This can be defined from the\n\t\t\t\t\t\t// width attribute, style attribute or `columns.width` option\n\t\t\t\t\t\tvar columnDef = columns[shifted];\n\t\t\t\t\t\tvar width = cell.getAttribute('width') || null;\n\t\t\t\t\t\tvar t = cell.style.width.match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\t\t\t\tif ( t ) {\n\t\t\t\t\t\t\twidth = t[1];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolumnDef.sWidthOrig = columnDef.sWidth || width;\n\n\t\t\t\t\t\tif (isHeader) {\n\t\t\t\t\t\t\t// Column title handling - can be user set, or read from the DOM\n\t\t\t\t\t\t\t// This happens before the render, so the original is still in place\n\t\t\t\t\t\t\tif ( columnDef.sTitle !== null && ! columnDef.autoTitle ) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t(titleRow === true && i === 0) || // top row\n\t\t\t\t\t\t\t\t\t(titleRow === false && i === rows.length -1) || // bottom row\n\t\t\t\t\t\t\t\t\t(titleRow === i) || // specific row\n\t\t\t\t\t\t\t\t\t(titleRow === null)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tcell.innerHTML = columnDef.sTitle;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (! columnDef.sTitle && unique) {\n\t\t\t\t\t\t\t\tcolumnDef.sTitle = _stripHtml(cell.innerHTML);\n\t\t\t\t\t\t\t\tcolumnDef.autoTitle = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// Footer specific operations\n\t\t\t\t\t\t\tif (columnDef.footer) {\n\t\t\t\t\t\t\t\tcell.innerHTML = columnDef.footer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Fall back to the aria-label attribute on the table header if no ariaTitle is\n\t\t\t\t\t\t// provided.\n\t\t\t\t\t\tif (! columnDef.ariaTitle) {\n\t\t\t\t\t\t\tcolumnDef.ariaTitle = jqCell.attr(\"aria-label\") || columnDef.sTitle;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Column specific class names\n\t\t\t\t\t\tif ( columnDef.className ) {\n\t\t\t\t\t\t\tjqCell.addClass( columnDef.className );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Wrap the column title so we can write to it in future\n\t\t\t\t\tif ( $('.dt-column-title', cell).length === 0) {\n\t\t\t\t\t\t$(document.createElement(settings.columnTitleTag))\n\t\t\t\t\t\t\t.addClass('dt-column-title')\n\t\t\t\t\t\t\t.append(cell.childNodes)\n\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tsettings.orderIndicators &&\n\t\t\t\t\t\tisHeader &&\n\t\t\t\t\t\tjqCell.filter(':not([data-dt-order=disable])').length !== 0 &&\n\t\t\t\t\t\tjqCell.parent(':not([data-dt-order=disable])').length !== 0 &&\n\t\t\t\t\t\t$('.dt-column-order', cell).length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\t$(document.createElement(settings.columnTitleTag))\n\t\t\t\t\t\t\t.addClass('dt-column-order')\n\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t}\n\n\t\t\t\t\t// We need to wrap the elements in the header in another element to use flexbox\n\t\t\t\t\t// layout for those elements\n\t\t\t\t\tvar headerFooter = isHeader ? 'header' : 'footer';\n\n\t\t\t\t\tif ( $('div.dt-column-' + headerFooter, cell).length === 0) {\n\t\t\t\t\t\t$('<div>')\n\t\t\t\t\t\t\t.addClass('dt-column-' + headerFooter)\n\t\t\t\t\t\t\t.append(cell.childNodes)\n\t\t\t\t\t\t\t.appendTo(cell);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If there is col / rowspan, copy the information into the layout grid\n\t\t\t\tfor ( l=0 ; l<colspan ; l++ ) {\n\t\t\t\t\tfor ( k=0 ; k<rowspan ; k++ ) {\n\t\t\t\t\t\tlayout[i+k][shifted+l] = {\n\t\t\t\t\t\t\tcell: cell,\n\t\t\t\t\t\t\tunique: unique\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlayout[i+k].row = row;\n\t\t\t\t\t}\n\n\t\t\t\t\tcols.push( shifted+l );\n\t\t\t\t}\n\n\t\t\t\t// Assign an attribute so spanning cells can still be identified\n\t\t\t\t// as belonging to a column\n\t\t\t\tcell.setAttribute('data-dt-column', _unique(cols).join(','));\n\t\t\t}\n\n\t\t\tcell = cell.nextSibling;\n\t\t}\n\t}\n\n\treturn layout;\n}\n\n/**\n * Set the start position for draw\n *  @param {object} oSettings dataTables settings object\n */\nfunction _fnStart( oSettings )\n{\n\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\n\t// Check and see if we have an initial draw position from state saving\n\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t{\n\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\tiInitDisplayStart :\n\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t0 :\n\t\t\t\tiInitDisplayStart;\n\n\t\toSettings.iInitDisplayStart = -1;\n\t}\n}\n\n/**\n * Create an Ajax call based on the table's settings, taking into account that\n * parameters can have multiple forms, and backwards compatibility.\n *\n * @param {object} oSettings dataTables settings object\n * @param {array} data Data to send to the server, required by\n *     DataTables - may be augmented by developer callbacks\n * @param {function} fn Callback function to run when data is obtained\n */\nfunction _fnBuildAjax(oSettings, data, fn) {\n\tvar ajaxData;\n\tvar ajax = oSettings.ajax;\n\tvar instance = oSettings.oInstance;\n\tvar callback = function (json) {\n\t\tvar status = oSettings.jqXHR ? oSettings.jqXHR.status : null;\n\n\t\tif (json === null || (typeof status === 'number' && status == 204)) {\n\t\t\tjson = {};\n\t\t\t_fnAjaxDataSrc(oSettings, json, []);\n\t\t}\n\n\t\tvar error = json.error || json.sError;\n\t\tif (error) {\n\t\t\t_fnLog(oSettings, 0, error);\n\t\t}\n\n\t\t// Microsoft often wrap JSON as a string in another JSON object\n\t\t// Let's handle that automatically\n\t\tif (json.d && typeof json.d === 'string') {\n\t\t\ttry {\n\t\t\t\tjson = JSON.parse(json.d);\n\t\t\t} catch (e) {\n\t\t\t\t// noop\n\t\t\t}\n\t\t}\n\n\t\toSettings.json = json;\n\n\t\t_fnCallbackFire(oSettings, null, 'xhr', [oSettings, json, oSettings.jqXHR], true);\n\t\tfn(json);\n\t};\n\n\tif ($.isPlainObject(ajax) && ajax.data) {\n\t\tajaxData = ajax.data;\n\n\t\tvar newData =\n\t\t\ttypeof ajaxData === 'function'\n\t\t\t\t? ajaxData(data, oSettings) // fn can manipulate data or return\n\t\t\t\t: ajaxData; // an object or array to merge\n\n\t\t// If the function returned something, use that alone\n\t\tdata = typeof ajaxData === 'function' && newData ? newData : $.extend(true, data, newData);\n\n\t\t// Remove the data property as we've resolved it already and don't want\n\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\tdelete ajax.data;\n\t}\n\n\tvar baseAjax = {\n\t\turl: typeof ajax === 'string' ? ajax : '',\n\t\tdata: data,\n\t\tsuccess: callback,\n\t\tdataType: 'json',\n\t\tcache: false,\n\t\ttype: oSettings.sServerMethod,\n\t\terror: function (xhr, error) {\n\t\t\tvar ret = _fnCallbackFire(\n\t\t\t\toSettings,\n\t\t\t\tnull,\n\t\t\t\t'xhr',\n\t\t\t\t[oSettings, null, oSettings.jqXHR],\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (ret.indexOf(true) === -1) {\n\t\t\t\tif (error == 'parsererror') {\n\t\t\t\t\t_fnLog(oSettings, 0, 'Invalid JSON response', 1);\n\t\t\t\t}\n\t\t\t\telse if (xhr.readyState === 4) {\n\t\t\t\t\t_fnLog(oSettings, 0, 'Ajax error', 7);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_fnProcessingDisplay(oSettings, false);\n\t\t}\n\t};\n\n\t// If `ajax` option is an object, extend and override our default base\n\tif ($.isPlainObject(ajax)) {\n\t\t$.extend(baseAjax, ajax);\n\t}\n\n\t// Store the data submitted for the API\n\toSettings.oAjaxData = data;\n\n\t// Allow plug-ins and external processes to modify the data\n\t_fnCallbackFire(oSettings, null, 'preXhr', [oSettings, data, baseAjax], true);\n\n\t// Custom Ajax option to submit the parameters as a JSON string\n\tif (baseAjax.submitAs === 'json' && typeof data === 'object') {\n\t\tbaseAjax.data = JSON.stringify(data);\n\n\t\tif (!baseAjax.contentType) {\n\t\t\tbaseAjax.contentType = 'application/json; charset=utf-8';\n\t\t}\n\t}\n\n\tif (typeof ajax === 'function') {\n\t\t// Is a function - let the caller define what needs to be done\n\t\toSettings.jqXHR = ajax.call(instance, data, callback, oSettings);\n\t}\n\telse if (ajax.url === '') {\n\t\t// No url, so don't load any data. Just apply an empty data array\n\t\t// to the object for the callback.\n\t\tvar empty = {};\n\n\t\t_fnAjaxDataSrc(oSettings, empty, []);\n\t\tcallback(empty);\n\t}\n\telse {\n\t\t// Object to extend the base settings\n\t\toSettings.jqXHR = $.ajax(baseAjax);\n\t}\n\n\t// Restore for next time around\n\tif (ajaxData) {\n\t\tajax.data = ajaxData;\n\t}\n}\n\n/**\n * Update the table using an Ajax call\n *  @param {object} settings dataTables settings object\n *  @returns {boolean} Block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdate(settings) {\n\tsettings.iDraw++;\n\t_fnProcessingDisplay(settings, true);\n\n\t_fnBuildAjax(settings, _fnAjaxParameters(settings), function (json) {\n\t\t_fnAjaxUpdateDraw(settings, json);\n\t});\n}\n\n/**\n * Build up the parameters in an object needed for a server-side processing\n * request.\n *  @param {object} oSettings dataTables settings object\n *  @returns {bool} block the table drawing or not\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxParameters(settings) {\n\tvar columns = settings.aoColumns,\n\t\tfeatures = settings.oFeatures,\n\t\tpreSearch = settings.oPreviousSearch,\n\t\tpreColSearch = settings.aoPreSearchCols,\n\t\tcolData = function (idx, prop) {\n\t\t\treturn typeof columns[idx][prop] === 'function' ? 'function' : columns[idx][prop];\n\t\t};\n\n\treturn {\n\t\tdraw: settings.iDraw,\n\t\tcolumns: columns.map(function (column, i) {\n\t\t\treturn {\n\t\t\t\tdata: colData(i, 'mData'),\n\t\t\t\tname: column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable: column.bSortable,\n\t\t\t\tsearch: {\n\t\t\t\t\tvalue: preColSearch[i].search,\n\t\t\t\t\tregex: preColSearch[i].regex,\n\t\t\t\t\tfixed: Object.keys(column.searchFixed)\n\t\t\t\t\t\t.map(function (name) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tname: name,\n\t\t\t\t\t\t\t\tterm: typeof column.searchFixed[name] !== 'function'\n\t\t\t\t\t\t\t\t\t? column.searchFixed[name].toString()\n\t\t\t\t\t\t\t\t\t: 'function'\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t};\n\t\t}),\n\t\torder: _fnSortFlatten(settings).map(function (val) {\n\t\t\treturn {\n\t\t\t\tcolumn: val.col,\n\t\t\t\tdir: val.dir,\n\t\t\t\tname: colData(val.col, 'sName')\n\t\t\t};\n\t\t}),\n\t\tstart: settings._iDisplayStart,\n\t\tlength: features.bPaginate ? settings._iDisplayLength : -1,\n\t\tsearch: {\n\t\t\tvalue: preSearch.search,\n\t\t\tregex: preSearch.regex,\n\t\t\tfixed: Object.keys(settings.searchFixed)\n\t\t\t\t.map(function (name) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: name,\n\t\t\t\t\t\tterm: typeof settings.searchFixed[name] !== 'function'\n\t\t\t\t\t\t\t? settings.searchFixed[name].toString()\n\t\t\t\t\t\t\t: 'function'\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t}\n\t};\n}\n\n/**\n * Data the data from the server (nuking the old) and redraw the table\n *  @param {object} oSettings dataTables settings object\n *  @param {object} json json data return from the server.\n *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n *  @param {array} json.aaData The data to display on this page\n *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n *  @memberof DataTable#oApi\n */\nfunction _fnAjaxUpdateDraw(settings, json) {\n\tvar data = _fnAjaxDataSrc(settings, json);\n\tvar draw = _fnAjaxDataSrcParam(settings, 'draw', json);\n\tvar recordsTotal = _fnAjaxDataSrcParam(settings, 'recordsTotal', json);\n\tvar recordsFiltered = _fnAjaxDataSrcParam(settings, 'recordsFiltered', json);\n\n\tif (draw !== undefined) {\n\t\t// Protect against out of sequence returns\n\t\tif (draw * 1 < settings.iDraw) {\n\t\t\treturn;\n\t\t}\n\t\tsettings.iDraw = draw * 1;\n\t}\n\n\t// No data in returned object, so rather than an array, we show an empty table\n\tif (!data) {\n\t\tdata = [];\n\t}\n\n\t_fnClearTable(settings);\n\tsettings._iRecordsTotal = parseInt(recordsTotal, 10);\n\tsettings._iRecordsDisplay = parseInt(recordsFiltered, 10);\n\n\tfor (var i = 0, iLen = data.length; i < iLen; i++) {\n\t\t_fnAddData(settings, data[i]);\n\t}\n\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t_fnColumnTypes(settings);\n\t_fnDraw(settings, true);\n\t_fnInitComplete(settings);\n\t_fnProcessingDisplay(settings, false);\n}\n\n/**\n * Get the data from the JSON data source to use for drawing a table. Using\n * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n * source object, or from a processing function.\n *  @param {object} settings dataTables settings object\n *  @param  {object} json Data source object / array from the server\n *  @return {array} Array of data to use\n */\nfunction _fnAjaxDataSrc(settings, json, write) {\n\tvar dataProp = 'data';\n\n\tif ($.isPlainObject(settings.ajax) && settings.ajax.dataSrc !== undefined) {\n\t\t// Could in inside a `dataSrc` object, or not!\n\t\tvar dataSrc = settings.ajax.dataSrc;\n\n\t\t// string, function and object are valid types\n\t\tif (typeof dataSrc === 'string' || typeof dataSrc === 'function') {\n\t\t\tdataProp = dataSrc;\n\t\t}\n\t\telse if (dataSrc.data !== undefined) {\n\t\t\tdataProp = dataSrc.data;\n\t\t}\n\t}\n\n\tif (!write) {\n\t\tif (dataProp === 'data') {\n\t\t\t// If the default, then we still want to support the old style, and safely ignore\n\t\t\t// it if possible\n\t\t\treturn json.aaData || json[dataProp];\n\t\t}\n\n\t\treturn dataProp !== '' ? _fnGetObjectDataFn(dataProp)(json) : json;\n\t}\n\n\t// set\n\t_fnSetObjectDataFn(dataProp)(json, write);\n}\n\n/**\n * Very similar to _fnAjaxDataSrc, but for the other SSP properties\n * @param {*} settings DataTables settings object\n * @param {*} param Target parameter\n * @param {*} json JSON data\n * @returns Resolved value\n */\nfunction _fnAjaxDataSrcParam(settings, param, json) {\n\tvar dataSrc = $.isPlainObject(settings.ajax) ? settings.ajax.dataSrc : null;\n\n\tif (dataSrc && dataSrc[param]) {\n\t\t// Get from custom location\n\t\treturn _fnGetObjectDataFn(dataSrc[param])(json);\n\t}\n\n\t// else - Default behaviour\n\tvar old = '';\n\n\t// Legacy support\n\tif (param === 'draw') {\n\t\told = 'sEcho';\n\t}\n\telse if (param === 'recordsTotal') {\n\t\told = 'iTotalRecords';\n\t}\n\telse if (param === 'recordsFiltered') {\n\t\told = 'iTotalDisplayRecords';\n\t}\n\n\treturn json[old] !== undefined ? json[old] : json[param];\n}\n\n\n/**\n * Filter the table using both the global filter and column based filtering\n *  @param {object} settings dataTables settings object\n *  @param {object} input search information\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterComplete ( settings, input )\n{\n\tvar columnsSearch = settings.aoPreSearchCols;\n\n\t// In server-side processing all filtering is done by the server, so no point hanging around here\n\tif ( _fnDataSource( settings ) != 'ssp' )\n\t{\n\t\t// Check if any of the rows were invalidated\n\t\t_fnFilterData( settings );\n\n\t\t// Start from the full data set\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t\t// Global filter first\n\t\t_fnFilter( settings.aiDisplay, settings, input.search, input );\n\n\t\t$.each(settings.searchFixed, function (name, term) {\n\t\t\t_fnFilter(settings.aiDisplay, settings, term, {});\n\t\t});\n\n\t\t// Then individual column filters\n\t\tfor ( var i=0 ; i<columnsSearch.length ; i++ )\n\t\t{\n\t\t\tvar col = columnsSearch[i];\n\n\t\t\t_fnFilter(\n\t\t\t\tsettings.aiDisplay,\n\t\t\t\tsettings,\n\t\t\t\tcol.search,\n\t\t\t\tcol,\n\t\t\t\ti\n\t\t\t);\n\n\t\t\t$.each(settings.aoColumns[i].searchFixed, function (name, term) {\n\t\t\t\t_fnFilter(settings.aiDisplay, settings, term, {}, i);\n\t\t\t});\n\t\t}\n\n\t\t// And finally global filtering\n\t\t_fnFilterCustom( settings );\n\t}\n\n\t// Tell the draw function we have been filtering\n\tsettings.bFiltered = true;\n\n\t_fnCallbackFire( settings, null, 'search', [settings] );\n}\n\n\n/**\n * Apply custom filtering functions\n * \n * This is legacy now that we have named functions, but it is widely used\n * from 1.x, so it is not yet deprecated.\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCustom( settings )\n{\n\tvar filters = DataTable.ext.search;\n\tvar displayRows = settings.aiDisplay;\n\tvar row, rowIdx;\n\n\tfor ( var i=0, iLen=filters.length ; i<iLen ; i++ ) {\n\t\tvar rows = [];\n\n\t\t// Loop over each row and see if it should be included\n\t\tfor ( var j=0, jen=displayRows.length ; j<jen ; j++ ) {\n\t\t\trowIdx = displayRows[ j ];\n\t\t\trow = settings.aoData[ rowIdx ];\n\n\t\t\tif ( filters[i]( settings, row._aFilterData, rowIdx, row._aData, j ) ) {\n\t\t\t\trows.push( rowIdx );\n\t\t\t}\n\t\t}\n\n\t\t// So the array reference doesn't break set the results into the\n\t\t// existing array\n\t\tdisplayRows.length = 0;\n\t\t_fnArrayApply(displayRows, rows);\n\t}\n}\n\n\n/**\n * Filter the data table based on user input and draw the table\n */\nfunction _fnFilter( searchRows, settings, input, options, column )\n{\n\tif ( input === '' ) {\n\t\treturn;\n\t}\n\n\tvar i = 0;\n\tvar matched = [];\n\n\t// Search term can be a function, regex or string - if a string we apply our\n\t// smart filtering regex (assuming the options require that)\n\tvar searchFunc = typeof input === 'function' ? input : null;\n\tvar rpSearch = input instanceof RegExp\n\t\t? input\n\t\t: searchFunc\n\t\t\t? null\n\t\t\t: _fnFilterCreateSearch( input, options );\n\n\t// Then for each row, does the test pass. If not, lop the row from the array\n\tfor (i=0 ; i<searchRows.length ; i++) {\n\t\tvar row = settings.aoData[ searchRows[i] ];\n\t\tvar data = column === undefined\n\t\t\t? row._sFilterRow\n\t\t\t: row._aFilterData[ column ];\n\n\t\tif ( (searchFunc && searchFunc(data, row._aData, searchRows[i], column)) || (rpSearch && rpSearch.test(data)) ) {\n\t\t\tmatched.push(searchRows[i]);\n\t\t}\n\t}\n\n\t// Mutate the searchRows array\n\tsearchRows.length = matched.length;\n\n\tfor (i=0 ; i<matched.length ; i++) {\n\t\tsearchRows[i] = matched[i];\n\t}\n}\n\n\n/**\n * Build a regular expression object suitable for searching a table\n *  @param {string} sSearch string to search for\n *  @param {bool} bRegex treat as a regular expression or not\n *  @param {bool} bSmart perform smart filtering or not\n *  @param {bool} bCaseInsensitive Do case-insensitive matching or not\n *  @returns {RegExp} constructed object\n *  @memberof DataTable#oApi\n */\nfunction _fnFilterCreateSearch( search, inOpts )\n{\n\tvar not = [];\n\tvar options = $.extend({}, {\n\t\tboundary: false,\n\t\tcaseInsensitive: true,\n\t\texact: false,\n\t\tregex: false,\n\t\tsmart: true\n\t}, inOpts);\n\n\tif (typeof search !== 'string') {\n\t\tsearch = search.toString();\n\t}\n\n\t// Remove diacritics if normalize is set up to do so\n\tsearch = _normalize(search);\n\n\tif (options.exact) {\n\t\treturn new RegExp(\n\t\t\t'^'+_fnEscapeRegex(search)+'$',\n\t\t\toptions.caseInsensitive ? 'i' : ''\n\t\t);\n\t}\n\n\tsearch = options.regex ?\n\t\tsearch :\n\t\t_fnEscapeRegex( search );\n\t\n\tif ( options.smart ) {\n\t\t/* For smart filtering we want to allow the search to work regardless of\n\t\t * word order. We also want double quoted text to be preserved, so word\n\t\t * order is important - a la google. And a negative look around for\n\t\t * finding rows which don't contain a given string.\n\t\t * \n\t\t * So this is the sort of thing we want to generate:\n\t\t * \n\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo three\\b)(?=.*?\\bfour\\b).*$\n\t\t */\n\t\tvar parts = search.match( /!?[\"\\u201C][^\"\\u201D]+[\"\\u201D]|[^ ]+/g ) || [''];\n\t\tvar a = parts.map( function ( word ) {\n\t\t\tvar negative = false;\n\t\t\tvar m;\n\n\t\t\t// Determine if it is a \"does not include\"\n\t\t\tif ( word.charAt(0) === '!' ) {\n\t\t\t\tnegative = true;\n\t\t\t\tword = word.substring(1);\n\t\t\t}\n\n\t\t\t// Strip the quotes from around matched phrases\n\t\t\tif ( word.charAt(0) === '\"' ) {\n\t\t\t\tm = word.match( /^\"(.*)\"$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\t\t\telse if ( word.charAt(0) === '\\u201C' ) {\n\t\t\t\t// Smart quote match (iPhone users)\n\t\t\t\tm = word.match( /^\\u201C(.*)\\u201D$/ );\n\t\t\t\tword = m ? m[1] : word;\n\t\t\t}\n\n\t\t\t// For our \"not\" case, we need to modify the string that is\n\t\t\t// allowed to match at the end of the expression.\n\t\t\tif (negative) {\n\t\t\t\tif (word.length > 1) {\n\t\t\t\t\tnot.push('(?!'+word+')');\n\t\t\t\t}\n\n\t\t\t\tword = '';\n\t\t\t}\n\n\t\t\treturn word.replace(/\"/g, '');\n\t\t} );\n\n\t\tvar match = not.length\n\t\t\t? not.join('')\n\t\t\t: '';\n\n\t\tvar boundary = options.boundary\n\t\t\t? '\\\\b'\n\t\t\t: '';\n\n\t\tsearch = '^(?=.*?'+boundary+a.join( ')(?=.*?'+boundary )+')('+match+'.)*$';\n\t}\n\n\treturn new RegExp( search, options.caseInsensitive ? 'i' : '' );\n}\n\n\n/**\n * Escape a string such that it can be used in a regular expression\n *  @param {string} sVal string to escape\n *  @returns {string} escaped string\n *  @memberof DataTable#oApi\n */\nvar _fnEscapeRegex = DataTable.util.escapeRegex;\n\nvar __filter_div = $('<div>')[0];\nvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\n// Update the filtering data for each row if needed (by invalidation or first run)\nfunction _fnFilterData ( settings )\n{\n\tvar columns = settings.aoColumns;\n\tvar data = settings.aoData;\n\tvar column;\n\tvar j, jen, filterData, cellData, row;\n\tvar wasInvalidated = false;\n\n\tfor ( var rowIdx=0 ; rowIdx<data.length ; rowIdx++ ) {\n\t\tif (! data[rowIdx]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\trow = data[rowIdx];\n\n\t\tif ( ! row._aFilterData ) {\n\t\t\tfilterData = [];\n\n\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\tcolumn = columns[j];\n\n\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\tcellData = _fnGetCellData( settings, rowIdx, j, 'filter' );\n\n\t\t\t\t\t// Search in DataTables is string based\n\t\t\t\t\tif ( cellData === null ) {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof cellData !== 'string' && cellData.toString ) {\n\t\t\t\t\t\tcellData = cellData.toString();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcellData = '';\n\t\t\t\t}\n\n\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t// method used here is much faster https://jsperf.com/html-decode\n\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t}\n\n\t\t\t\tif ( cellData.replace ) {\n\t\t\t\t\tcellData = cellData.replace(/[\\r\\n\\u2028]/g, '');\n\t\t\t\t}\n\n\t\t\t\tfilterData.push( cellData );\n\t\t\t}\n\n\t\t\trow._aFilterData = filterData;\n\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\twasInvalidated = true;\n\t\t}\n\t}\n\n\treturn wasInvalidated;\n}\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnInitialise ( settings )\n{\n\tvar i;\n\tvar init = settings.oInit;\n\tvar deferLoading = settings.deferLoading;\n\tvar dataSrc = _fnDataSource( settings );\n\n\t// Ensure that the table data is fully initialised\n\tif ( ! settings.bInitialised ) {\n\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\treturn;\n\t}\n\n\t// Build the header / footer for the table\n\t_fnBuildHead( settings, 'header' );\n\t_fnBuildHead( settings, 'footer' );\n\n\t// Load the table's state (if needed) and then render around it and draw\n\t_fnLoadState( settings, init, function () {\n\t\t// Then draw the header / footer\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\n\t\t// Cache the paging start point, as the first redraw will reset it\n\t\tvar iAjaxStart = settings.iInitDisplayStart\n\n\t\t// Local data load\n\t\t// Check if there is data passing into the constructor\n\t\tif ( init.aaData ) {\n\t\t\tfor ( i=0 ; i<init.aaData.length ; i++ ) {\n\t\t\t\t_fnAddData( settings, init.aaData[ i ] );\n\t\t\t}\n\t\t}\n\t\telse if ( deferLoading || dataSrc == 'dom' ) {\n\t\t\t// Grab the data from the page\n\t\t\t_fnAddTr( settings, $(settings.nTBody).children('tr') );\n\t\t}\n\n\t\t// Filter not yet applied - copy the display master\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t\t// Enable features\n\t\t_fnAddOptionsHtml( settings );\n\t\t_fnSortInit( settings );\n\n\t\t_colGroup( settings );\n\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t_fnCallbackFire( settings, null, 'preInit', [settings], true );\n\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tif ( dataSrc != 'ssp' || deferLoading ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, {}, function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\n\t\t\t\t\t_fnReDraw( settings );\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t}\n\t\t}\n\t} );\n}\n\n\n/**\n * Draw the table for the first time, adding all required features\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnInitComplete ( settings )\n{\n\tif (settings._bInitComplete) {\n\t\treturn;\n\t}\n\n\tvar args = [settings, settings.json];\n\n\t// If the footer element is empty after initialisation, then remove it\n\tlet tfoot = $(settings.tfoot);\n\tif (tfoot.children().length === 0) {\n\t\ttfoot.remove();\n\t}\n\n\tsettings._bInitComplete = true;\n\n\t// Table is fully set up and we have data, so calculate the\n\t// column widths\n\t_fnAdjustColumnSizing( settings );\n\n\t_fnCallbackFire( settings, null, 'plugin-init', args, true );\n\t_fnCallbackFire( settings, 'aoInitComplete', 'init', args, true );\n}\n\nfunction _fnLengthChange ( settings, val )\n{\n\tvar len = parseInt( val, 10 );\n\tsettings._iDisplayLength = len;\n\n\t_fnLengthOverflow( settings );\n\n\t// Fire length change event\n\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n}\n\n/**\n * Alter the display settings to change the page\n *  @param {object} settings DataTables settings object\n *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n *    \"next\" or \"last\" or page number to jump to (integer)\n *  @param [bool] redraw Automatically draw the update or not\n *  @returns {bool} true page has changed, false - no change\n *  @memberof DataTable#oApi\n */\nfunction _fnPageChange ( settings, action, redraw )\n{\n\tvar\n\t\tstart     = settings._iDisplayStart,\n\t\tlen       = settings._iDisplayLength,\n\t\trecords   = settings.fnRecordsDisplay();\n\n\tif ( records === 0 || len === -1 )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( typeof action === \"number\" )\n\t{\n\t\tstart = action * len;\n\n\t\tif ( start > records )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t}\n\telse if ( action == \"first\" )\n\t{\n\t\tstart = 0;\n\t}\n\telse if ( action == \"previous\" )\n\t{\n\t\tstart = len >= 0 ?\n\t\t\tstart - len :\n\t\t\t0;\n\n\t\tif ( start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t}\n\telse if ( action == \"next\" )\n\t{\n\t\tif ( start + len < records )\n\t\t{\n\t\t\tstart += len;\n\t\t}\n\t}\n\telse if ( action == \"last\" )\n\t{\n\t\tstart = Math.floor( (records-1) / len) * len;\n\t}\n\telse if ( action === 'ellipsis' )\n\t{\n\t\treturn;\n\t}\n\telse\n\t{\n\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t}\n\n\tvar changed = settings._iDisplayStart !== start;\n\tsettings._iDisplayStart = start;\n\n\t_fnCallbackFire( settings, null, changed ? 'page' : 'page-nc', [settings] );\n\n\tif ( changed && redraw ) {\n\t\t_fnDraw( settings );\n\t}\n\n\treturn changed;\n}\n\n\n/**\n * Generate the node required for the processing node\n *  @param {object} settings DataTables settings object\n */\nfunction _processingHtml ( settings )\n{\n\tvar table = settings.nTable;\n\tvar scrolling = settings.oScroll.sX !== '' || settings.oScroll.sY !== '';\n\n\tif ( settings.oFeatures.bProcessing ) {\n\t\tvar n = $('<div/>', {\n\t\t\t\t'id': settings.sTableId + '_processing',\n\t\t\t\t'class': settings.oClasses.processing.container,\n\t\t\t\t'role': 'status'\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.append('<div><div></div><div></div><div></div><div></div></div>');\n\n\t\t// Different positioning depending on if scrolling is enabled or not\n\t\tif (scrolling) {\n\t\t\tn.prependTo( $('div.dt-scroll', settings.nTableWrapper) );\n\t\t}\n\t\telse {\n\t\t\tn.insertBefore( table );\n\t\t}\n\n\t\t$(table).on( 'processing.dt.DT', function (e, s, show) {\n\t\t\tn.css( 'display', show ? 'block' : 'none' );\n\t\t} );\n\t}\n}\n\n\n/**\n * Display or hide the processing indicator\n *  @param {object} settings DataTables settings object\n *  @param {bool} show Show the processing indicator (true) or not (false)\n */\nfunction _fnProcessingDisplay ( settings, show )\n{\n\t// Ignore cases when we are still redrawing\n\tif (settings.bDrawing && show === false) {\n\t\treturn;\n\t}\n\n\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n}\n\n/**\n * Show the processing element if an action takes longer than a given time\n *\n * @param {*} settings DataTables settings object\n * @param {*} enable Do (true) or not (false) async processing (local feature enablement)\n * @param {*} run Function to run\n */\nfunction _fnProcessingRun( settings, enable, run ) {\n\tif (! enable) {\n\t\t// Immediate execution, synchronous\n\t\trun();\n\t}\n\telse {\n\t\t_fnProcessingDisplay(settings, true);\n\t\t\n\t\t// Allow the processing display to show if needed\n\t\tsetTimeout(function () {\n\t\t\trun();\n\n\t\t\t_fnProcessingDisplay(settings, false);\n\t\t}, 0);\n\t}\n}\n/**\n * Add any control elements for the table - specifically scrolling\n *  @param {object} settings dataTables settings object\n *  @returns {node} Node to add to the DOM\n *  @memberof DataTable#oApi\n */\nfunction _fnFeatureHtmlTable ( settings )\n{\n\tvar table = $(settings.nTable);\n\n\t// Scrolling from here on in\n\tvar scroll = settings.oScroll;\n\n\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\treturn settings.nTable;\n\t}\n\n\tvar scrollX = scroll.sX;\n\tvar scrollY = scroll.sY;\n\tvar classes = settings.oClasses.scrolling;\n\tvar caption = settings.captionNode;\n\tvar captionSide = caption ? caption._captionSide : null;\n\tvar headerClone = $( table[0].cloneNode(false) );\n\tvar footerClone = $( table[0].cloneNode(false) );\n\tvar footer = table.children('tfoot');\n\tvar _div = '<div/>';\n\tvar size = function ( s ) {\n\t\treturn !s ? null : _fnStringToCss( s );\n\t};\n\n\tif ( ! footer.length ) {\n\t\tfooter = null;\n\t}\n\n\t/*\n\t * The HTML structure that we want to generate in this function is:\n\t *  div - scroller\n\t *    div - scroll head\n\t *      div - scroll head inner\n\t *        table - scroll head table\n\t *          thead - thead\n\t *    div - scroll body\n\t *      table - table (master table)\n\t *        thead - thead clone for sizing\n\t *        tbody - tbody\n\t *    div - scroll foot\n\t *      div - scroll foot inner\n\t *        table - scroll foot table\n\t *          tfoot - tfoot\n\t */\n\tvar scroller = $( _div, { 'class': classes.container } )\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.header.self } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.header.inner } )\n\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t\t.append(\n\t\t\t$(_div, { 'class': classes.body } )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t} )\n\t\t\t\t.append( table )\n\t\t);\n\n\tif ( footer ) {\n\t\tscroller.append(\n\t\t\t$(_div, { 'class': classes.footer.self } )\n\t\t\t\t.css( {\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tborder: 0,\n\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t} )\n\t\t\t\t.append(\n\t\t\t\t\t$(_div, { 'class': classes.footer.inner } )\n\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t);\n\t}\n\n\tvar children = scroller.children();\n\tvar scrollHead = children[0];\n\tvar scrollBody = children[1];\n\tvar scrollFoot = footer ? children[2] : null;\n\n\t// When the body is scrolled, then we also want to scroll the headers\n\t$(scrollBody).on( 'scroll.DT', function () {\n\t\tvar scrollLeft = this.scrollLeft;\n\n\t\tscrollHead.scrollLeft = scrollLeft;\n\n\t\tif ( footer ) {\n\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t}\n\t} );\n\n\t// When focus is put on the header cells, we might need to scroll the body\n\t$('th, td', scrollHead).on('focus', function () {\n\t\tvar scrollLeft = scrollHead.scrollLeft;\n\n\t\tscrollBody.scrollLeft = scrollLeft;\n\n\t\tif ( footer ) {\n\t\t\tscrollBody.scrollLeft = scrollLeft;\n\t\t}\n\t});\n\n\t$(scrollBody).css('max-height', scrollY);\n\tif (! scroll.bCollapse) {\n\t\t$(scrollBody).css('height', scrollY);\n\t}\n\n\tsettings.nScrollHead = scrollHead;\n\tsettings.nScrollBody = scrollBody;\n\tsettings.nScrollFoot = scrollFoot;\n\n\t// On redraw - align columns\n\tsettings.aoDrawCallback.push(_fnScrollDraw);\n\n\treturn scroller[0];\n}\n\n\n\n/**\n * Update the header, footer and body tables for resizing - i.e. column\n * alignment.\n *\n * Welcome to the most horrible function DataTables. The process that this\n * function follows is basically:\n *   1. Re-create the table inside the scrolling div\n *   2. Correct colgroup > col values if needed\n *   3. Copy colgroup > col over to header and footer\n *   4. Clean up\n *\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnScrollDraw ( settings )\n{\n\t// Given that this is such a monster function, a lot of variables are use\n\t// to try and keep the minimised size as small as possible\n\tvar\n\t\tscroll         = settings.oScroll,\n\t\tbarWidth       = scroll.iBarWidth,\n\t\tdivHeader      = $(settings.nScrollHead),\n\t\tdivHeaderInner = divHeader.children('div'),\n\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\tdivBodyEl      = settings.nScrollBody,\n\t\tdivBody        = $(divBodyEl),\n\t\tdivFooter      = $(settings.nScrollFoot),\n\t\tdivFooterInner = divFooter.children('div'),\n\t\tdivFooterTable = divFooterInner.children('table'),\n\t\theader         = $(settings.nTHead),\n\t\ttable          = $(settings.nTable),\n\t\tfooter         = settings.nTFoot && $('th, td', settings.nTFoot).length ? $(settings.nTFoot) : null,\n\t\tbrowser        = settings.oBrowser,\n\t\theaderCopy, footerCopy;\n\n\t// If the scrollbar visibility has changed from the last draw, we need to\n\t// adjust the column sizes as the table width will have changed to account\n\t// for the scrollbar\n\tvar scrollBarVis = divBodyEl.scrollHeight > divBodyEl.clientHeight;\n\t\n\tif ( settings.scrollBarVis !== scrollBarVis && settings.scrollBarVis !== undefined ) {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t\t_fnAdjustColumnSizing( settings );\n\t\treturn; // adjust column sizing will call this function again\n\t}\n\telse {\n\t\tsettings.scrollBarVis = scrollBarVis;\n\t}\n\n\t// 1. Re-create the table inside the scrolling div\n\t// Remove the old minimised thead and tfoot elements in the inner table\n\ttable.children('thead, tfoot').remove();\n\n\t// Clone the current header and footer elements and then place it into the inner table\n\theaderCopy = header.clone().prependTo( table );\n\theaderCopy.find('th, td').removeAttr('tabindex');\n\theaderCopy.find('[id]').removeAttr('id');\n\n\tif ( footer ) {\n\t\tfooterCopy = footer.clone().prependTo( table );\n\t\tfooterCopy.find('[id]').removeAttr('id');\n\t}\n\n\t// 2. Correct colgroup > col values if needed\n\t// It is possible that the cell sizes are smaller than the content, so we need to\n\t// correct colgroup>col for such cases. This can happen if the auto width detection\n\t// uses a cell which has a longer string, but isn't the widest! For example \n\t// \"Chief Executive Officer (CEO)\" is the longest string in the demo, but\n\t// \"Systems Administrator\" is actually the widest string since it doesn't collapse.\n\t// Note the use of translating into a column index to get the `col` element. This\n\t// is because of Responsive which might remove `col` elements, knocking the alignment\n\t// of the indexes out.\n\tif (settings.aiDisplay.length) {\n\t\t// Get the column sizes from the first row in the table. This should really be a\n\t\t// [].find, but it wasn't supported in Chrome until Sept 2015, and DT has 10 year\n\t\t// browser support\n\t\tvar firstTr = null;\n\t\tvar start = _fnDataSource( settings ) !== 'ssp'\n\t\t\t? settings._iDisplayStart\n\t\t\t: 0;\n\n\t\tfor (i=start ; i<start + settings.aiDisplay.length ; i++) {\n\t\t\tvar idx = settings.aiDisplay[i];\n\t\t\tvar tr = settings.aoData[idx].nTr;\n\n\t\t\tif (tr) {\n\t\t\t\tfirstTr = tr;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (firstTr) {\n\t\t\tvar colSizes = $(firstTr).children('th, td').map(function (vis) {\n\t\t\t\treturn {\n\t\t\t\t\tidx: _fnVisibleToColumnIndex(settings, vis),\n\t\t\t\t\twidth: $(this).outerWidth()\n\t\t\t\t};\n\t\t\t});\n\n\t\t\t// Check against what the colgroup > col is set to and correct if needed\n\t\t\tfor (var i=0 ; i<colSizes.length ; i++) {\n\t\t\t\tvar colEl = settings.aoColumns[ colSizes[i].idx ].colEl[0];\n\t\t\t\tvar colWidth = colEl.style.width.replace('px', '');\n\n\t\t\t\tif (colWidth !== colSizes[i].width) {\n\t\t\t\t\tcolEl.style.width = colSizes[i].width + 'px';\n\n\t\t\t\t\tif (scroll.sX) {\n\t\t\t\t\t\tcolEl.style.minWidth = colSizes[i].width + 'px';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 3. Copy the colgroup over to the header and footer\n\tdivHeaderTable\n\t\t.find('colgroup')\n\t\t.remove();\n\n\tdivHeaderTable.append(settings.colgroup.clone());\n\n\tif ( footer ) {\n\t\tdivFooterTable\n\t\t\t.find('colgroup')\n\t\t\t.remove();\n\n\t\tdivFooterTable.append(settings.colgroup.clone());\n\t}\n\n\t// \"Hide\" the header and footer that we used for the sizing. We need to keep\n\t// the content of the cell so that the width applied to the header and body\n\t// both match, but we want to hide it completely.\n\t$('th, td', headerCopy).each(function () {\n\t\t$(this.childNodes).wrapAll('<div class=\"dt-scroll-sizing\" />');\n\t});\n\n\tif ( footer ) {\n\t\t$('th, td', footerCopy).each(function () {\n\t\t\t$(this.childNodes).wrapAll('<div class=\"dt-scroll-sizing\" />');\n\t\t});\n\t}\n\n\t// 4. Clean up\n\t// Figure out if there are scrollbar present - if so then we need the header and footer to\n\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\tvar isScrolling = Math.floor(table.height()) > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\tvar paddingSide = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\n\t// Set the width's of the header and footer tables\n\tvar outerWidth = table.outerWidth();\n\n\tdivHeaderTable.css('width', _fnStringToCss( outerWidth ));\n\tdivHeaderInner\n\t\t.css('width', _fnStringToCss( outerWidth ))\n\t\t.css(paddingSide, isScrolling ? barWidth+\"px\" : \"0px\");\n\n\tif ( footer ) {\n\t\tdivFooterTable.css('width', _fnStringToCss( outerWidth ));\n\t\tdivFooterInner\n\t\t\t.css('width', _fnStringToCss( outerWidth ))\n\t\t\t.css(paddingSide, isScrolling ? barWidth+\"px\" : \"0px\");\n\t}\n\n\t// Correct DOM ordering for colgroup - comes before the thead\n\ttable.children('colgroup').prependTo(table);\n\n\t// Remove tabindex from the hidden row elements\n\ttable.find('thead, tfoot').find('[tabindex]').removeAttr('tabindex');\n\ttable.find('thead, tfoot').find('role').removeAttr('role');\n\n\t// Adjust the position of the header in case we loose the y-scrollbar\n\tdivBody.trigger('scroll');\n\n\t// If sorting or filtering has occurred, jump the scrolling back to the top\n\t// only if we aren't holding the position\n\tif ( (settings.bSorted || settings.bFiltered) && ! settings._drawHold ) {\n\t\tdivBodyEl.scrollTop = 0;\n\t}\n}\n\n/**\n * Calculate the width of columns for the table\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnCalculateColumnWidths ( settings )\n{\n\t// Not interested in doing column width calculation if auto-width is disabled\n\tif (! settings.oFeatures.bAutoWidth) {\n\t\treturn;\n\t}\n\n\tvar\n\t\ttable = settings.nTable,\n\t\tcolumns = settings.aoColumns,\n\t\tscroll = settings.oScroll,\n\t\tscrollY = scroll.sY,\n\t\tscrollX = scroll.sX,\n\t\tscrollXInner = scroll.sXInner,\n\t\tvisibleColumns = _fnGetColumns( settings, 'bVisible' ),\n\t\ttableWidthAttr = table.getAttribute('width'), // from DOM element\n\t\ttableContainer = table.parentNode,\n\t\ti, j, column, columnIdx;\n\t\t\n\tvar styleWidth = table.style.width;\n\tvar containerWidth = _fnWrapperWidth(settings);\n\n\t// Don't re-run for the same width as the last time\n\tif (containerWidth === settings.containerWidth) {\n\t\treturn false;\n\t}\n\n\tsettings.containerWidth = containerWidth;\n\n\t// If there is no width applied as a CSS style or as an attribute, we assume that\n\t// the width is intended to be 100%, which is usually is in CSS, but it is very\n\t// difficult to correctly parse the rules to get the final result.\n\tif ( ! styleWidth && ! tableWidthAttr) {\n\t\ttable.style.width = '100%';\n\t\tstyleWidth = '100%';\n\t}\n\n\tif ( styleWidth && styleWidth.indexOf('%') !== -1 ) {\n\t\ttableWidthAttr = styleWidth;\n\t}\n\n\t// Let plug-ins know that we are doing a recalc, in case they have changed any of the\n\t// visible columns their own way (e.g. Responsive uses display:none).\n\t_fnCallbackFire(\n\t\tsettings,\n\t\tnull,\n\t\t'column-calc',\n\t\t{visible: visibleColumns},\n\t\tfalse\n\t);\n\n\t// Construct a worst case table with the widest, assign any user defined\n\t// widths, then insert it into  the DOM and allow the browser to do all\n\t// the hard work of calculating table widths\n\tvar tmpTable = $(table.cloneNode())\n\t\t.css( 'visibility', 'hidden' )\n\t\t.css( 'margin', 0 )\n\t\t.removeAttr( 'id' );\n\n\t// Clean up the table body\n\ttmpTable.append('<tbody/>')\n\n\t// Clone the table header and footer - we can't use the header / footer\n\t// from the cloned table, since if scrolling is active, the table's\n\t// real header and footer are contained in different table tags\n\ttmpTable\n\t\t.append( $(settings.nTHead).clone() )\n\t\t.append( $(settings.nTFoot).clone() );\n\n\t// Remove any assigned widths from the footer (from scrolling)\n\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\n\t// Apply custom sizing to the cloned header\n\ttmpTable.find('thead th, thead td').each( function () {\n\t\t// Get the `width` from the header layout\n\t\tvar width = _fnColumnsSumWidth( settings, this, true, false );\n\n\t\tif ( width ) {\n\t\t\tthis.style.width = width;\n\n\t\t\t// For scrollX we need to force the column width otherwise the\n\t\t\t// browser will collapse it. If this width is smaller than the\n\t\t\t// width the column requires, then it will have no effect\n\t\t\tif ( scrollX ) {\n\t\t\t\tthis.style.minWidth = width;\n\n\t\t\t\t$( this ).append( $('<div/>').css( {\n\t\t\t\t\twidth: width,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tborder: 0,\n\t\t\t\t\theight: 1\n\t\t\t\t} ) );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.style.width = '';\n\t\t}\n\t} );\n\n\t// Get the widest strings for each of the visible columns and add them to\n\t// our table to create a \"worst case\"\n\tvar longestData = [];\n\n\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\tlongestData.push(_fnGetWideStrings(settings, visibleColumns[i]));\n\t}\n\n\tif (longestData.length) {\n\t\tfor ( i=0 ; i<longestData[0].length ; i++ ) {\n\t\t\tvar tr = $('<tr/>').appendTo( tmpTable.find('tbody') );\n\n\t\t\tfor ( j=0 ; j<visibleColumns.length ; j++ ) {\n\t\t\t\tcolumnIdx = visibleColumns[j];\n\t\t\t\tcolumn = columns[ columnIdx ];\n\n\t\t\t\tvar longest = longestData[j][i] || '';\n\t\t\t\tvar autoClass = _ext.type.className[column.sType];\n\t\t\t\tvar padding = column.sContentPadding || (scrollX ? '-' : '');\n\t\t\t\tvar text = longest + padding;\n\t\t\t\tvar insert = longest.indexOf('<') === -1 && longest.indexOf('&') === -1\n\t\t\t\t\t? document.createTextNode(text)\n\t\t\t\t\t: text\n\n\t\t\t\t$('<td/>')\n\t\t\t\t\t.addClass(autoClass)\n\t\t\t\t\t.addClass(column.sClass)\n\t\t\t\t\t.append(insert)\n\t\t\t\t\t.appendTo(tr);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Tidy the temporary table - remove name attributes so there aren't\n\t// duplicated in the dom (radio elements for example)\n\t$('[name]', tmpTable).removeAttr('name');\n\n\t// Table has been built, attach to the document so we can work with it.\n\t// A holding element is used, positioned at the top of the container\n\t// with minimal height, so it has no effect on if the container scrolls\n\t// or not. Otherwise it might trigger scrolling when it actually isn't\n\t// needed\n\tvar holder = $('<div/>').css( scrollX || scrollY ?\n\t\t\t{\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\theight: 1,\n\t\t\t\tright: 0,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} :\n\t\t\t{}\n\t\t)\n\t\t.append( tmpTable )\n\t\t.appendTo( tableContainer );\n\n\t// When scrolling (X or Y) we want to set the width of the table as \n\t// appropriate. However, when not scrolling leave the table width as it\n\t// is. This results in slightly different, but I think correct behaviour\n\tif ( scrollX && scrollXInner ) {\n\t\ttmpTable.width( scrollXInner );\n\t}\n\telse if ( scrollX ) {\n\t\ttmpTable.css( 'width', 'auto' );\n\t\ttmpTable.removeAttr('width');\n\n\t\t// If there is no width attribute or style, then allow the table to\n\t\t// collapse\n\t\tif ( tmpTable.outerWidth() < tableContainer.clientWidth && tableWidthAttr ) {\n\t\t\ttmpTable.outerWidth( tableContainer.clientWidth );\n\t\t}\n\t}\n\telse if ( scrollY ) {\n\t\ttmpTable.outerWidth( tableContainer.clientWidth );\n\t}\n\telse if ( tableWidthAttr ) {\n\t\ttmpTable.outerWidth( tableWidthAttr );\n\t}\n\n\t// Get the width of each column in the constructed table\n\tvar total = 0;\n\tvar bodyCells = tmpTable.find('tbody tr').eq(0).children();\n\n\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t// Use getBounding for sub-pixel accuracy, which we then want to round up!\n\t\tvar bounding = bodyCells[i].getBoundingClientRect().width;\n\n\t\t// Total is tracked to remove any sub-pixel errors as the outerWidth\n\t\t// of the table might not equal the total given here\n\t\ttotal += bounding;\n\n\t\t// Width for each column to use\n\t\tcolumns[ visibleColumns[i] ].sWidth = _fnStringToCss( bounding );\n\t}\n\n\ttable.style.width = _fnStringToCss( total );\n\n\t// Finished with the table - ditch it\n\tholder.remove();\n\n\t// If there is a width attr, we want to attach an event listener which\n\t// allows the table sizing to automatically adjust when the window is\n\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t// CSS is a relative value or absolute - DOM read is always px.\n\tif ( tableWidthAttr ) {\n\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\t}\n\n\tif ( (tableWidthAttr || scrollX) && ! settings._reszEvt ) {\n\t\tvar resize = DataTable.util.throttle( function () {\n\t\t\tvar newWidth = _fnWrapperWidth(settings);\n\n\t\t\t// Don't do it if destroying or the container width is 0\n\t\t\tif (! settings.bDestroying && newWidth !== 0) {\n\t\t\t\t_fnAdjustColumnSizing( settings );\n\t\t\t}\n\t\t} );\n\n\t\t// For browsers that support it (~2020 onwards for wide support) we can watch for the\n\t\t// container changing width.\n\t\tif (window.ResizeObserver) {\n\t\t\t// This is a tricky beast - if the element is visible when `.observe()` is called,\n\t\t\t// then the callback is immediately run. Which we don't want. If the element isn't\n\t\t\t// visible, then it isn't run, but we want it to run when it is then made visible.\n\t\t\t// This flag allows the above to be satisfied.\n\t\t\tvar first = $(settings.nTableWrapper).is(':visible');\n\n\t\t\t// Use an empty div to attach the observer so it isn't impacted by height changes\n\t\t\tvar resizer = $('<div>')\n\t\t\t\t.css({\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: 0\n\t\t\t\t})\n\t\t\t\t.addClass('dt-autosize')\n\t\t\t\t.appendTo(settings.nTableWrapper);\n\n\t\t\tsettings.resizeObserver = new ResizeObserver(function (e) {\n\t\t\t\tif (first) {\n\t\t\t\t\tfirst = false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresize();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsettings.resizeObserver.observe(resizer[0]);\n\t\t}\n\t\telse {\n\t\t\t// For old browsers, the best we can do is listen for a window resize\n\t\t\t$(window).on('resize.DT-'+settings.sInstance, resize);\n\t\t}\n\n\t\tsettings._reszEvt = true;\n\t}\n}\n\n/**\n * Get the width of the DataTables wrapper element\n *\n * @param {*} settings DataTables settings object\n * @returns Width\n */\nfunction _fnWrapperWidth(settings) {\n\treturn $(settings.nTableWrapper).is(':visible')\n\t\t? $(settings.nTableWrapper).width()\n\t\t: 0;\n}\n\n/**\n * Get the widest strings for each column.\n *\n * It is very difficult to determine what the widest string actually is due to variable character\n * width and kerning. Doing an exact calculation with the DOM or even Canvas would kill performance\n * and this is a critical point, so we use two techniques to determine a collection of the longest\n * strings from the column, which will likely contain the widest strings:\n *\n * 1) Get the top three longest strings from the column\n * 2) Get the top three widest words (i.e. an unbreakable phrase)\n *\n *  @param {object} settings dataTables settings object\n *  @param {int} colIdx column of interest\n *  @returns {string[]} Array of the longest strings\n *  @memberof DataTable#oApi\n */\nfunction _fnGetWideStrings( settings, colIdx )\n{\n\tvar column = settings.aoColumns[colIdx];\n\n\t// Do we need to recalculate (i.e. was invalidated), or just use the cached data?\n\tif (! column.wideStrings) {\n\t\tvar allStrings = [];\n\t\tvar collection = [];\n\n\t\t// Create an array with the string information for the column\n\t\tfor ( var i=0, iLen=settings.aiDisplayMaster.length ; i<iLen ; i++ ) {\n\t\t\tvar rowIdx = settings.aiDisplayMaster[i];\n\t\t\tvar data = _fnGetRowDisplay(settings, rowIdx)[colIdx];\n\n\t\t\tvar cellString = data && typeof data === 'object' && data.nodeType\n\t\t\t\t? data.innerHTML\n\t\t\t\t: data+'';\n\n\t\t\t// Remove id / name attributes from elements so they\n\t\t\t// don't interfere with existing elements\n\t\t\tcellString = cellString\n\t\t\t\t.replace(/id=\".*?\"/g, '')\n\t\t\t\t.replace(/name=\".*?\"/g, '');\n\n\t\t\t// Don't want script, dialog or template tags in the width\n\t\t\t// calculations as they are hidden content\n\t\t\tcellString = cellString\n\t\t\t\t.replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n\t\t\t\t.replace(/<dialog[\\s\\S]*?<\\/dialog>/gi, ' ')\n\t\t\t\t.replace(/<template[\\s\\S]*?<\\/template>/gi, ' ');\n\n\t\t\tvar noHtml = _stripHtml(cellString, ' ')\n\t\t\t\t.replace( /&nbsp;/g, ' ' );\n\t\n\t\t\t// The length is calculated on the text only, but we keep the HTML\n\t\t\t// in the string so it can be used in the calculation table\n\t\t\tcollection.push({\n\t\t\t\tstr: cellString,\n\t\t\t\tlen: noHtml.length\n\t\t\t});\n\n\t\t\tallStrings.push(noHtml);\n\t\t}\n\n\t\t// Order and then cut down to the size we need\n\t\tcollection\n\t\t\t.sort(function (a, b) {\n\t\t\t\treturn b.len - a.len;\n\t\t\t})\n\t\t\t.splice(3);\n\n\t\tcolumn.wideStrings = collection.map(function (item) {\n\t\t\treturn item.str;\n\t\t});\n\n\t\t// Longest unbroken string\n\t\tlet parts = allStrings.join(' ').split(' ');\n\n\t\tparts.sort(function (a, b) {\n\t\t\treturn b.length - a.length;\n\t\t});\n\n\t\tif (parts.length) {\n\t\t\tcolumn.wideStrings.push(parts[0]);\n\t\t}\n\n\t\tif (parts.length > 1) {\n\t\t\tcolumn.wideStrings.push(parts[1]);\n\t\t}\n\n\t\tif (parts.length > 2) {\n\t\t\tcolumn.wideStrings.push(parts[3]);\n\t\t}\n\t}\n\n\treturn column.wideStrings;\n}\n\n\n/**\n * Append a CSS unit (only if required) to a string\n *  @param {string} value to css-ify\n *  @returns {string} value with css unit\n *  @memberof DataTable#oApi\n */\nfunction _fnStringToCss( s )\n{\n\tif ( s === null ) {\n\t\treturn '0px';\n\t}\n\n\tif ( typeof s == 'number' ) {\n\t\treturn s < 0 ?\n\t\t\t'0px' :\n\t\t\ts+'px';\n\t}\n\n\t// Check it has a unit character already\n\treturn s.match(/\\d$/) ?\n\t\ts+'px' :\n\t\ts;\n}\n\n/**\n * Re-insert the `col` elements for current visibility\n *\n * @param {*} settings DT settings\n */\nfunction _colGroup( settings ) {\n\tvar cols = settings.aoColumns;\n\n\tsettings.colgroup.empty();\n\n\tfor (i=0 ; i<cols.length ; i++) {\n\t\tif (cols[i].bVisible) {\n\t\t\tsettings.colgroup.append(cols[i].colEl);\n\t\t}\n\t}\n}\n\n\nfunction _fnSortInit( settings ) {\n\tvar target = settings.nTHead;\n\tvar headerRows = target.querySelectorAll('tr');\n\tvar titleRow = settings.titleRow;\n\tvar notSelector = ':not([data-dt-order=\"disable\"]):not([data-dt-order=\"icon-only\"])';\n\t\n\t// Legacy support for `orderCellsTop`\n\tif (titleRow === true) {\n\t\ttarget = headerRows[0];\n\t}\n\telse if (titleRow === false) {\n\t\ttarget = headerRows[ headerRows.length - 1 ];\n\t}\n\telse if (titleRow !== null) {\n\t\ttarget = headerRows[titleRow];\n\t}\n\t// else - all rows\n\n\tif (settings.orderHandler) {\n\t\t_fnSortAttachListener(\n\t\t\tsettings,\n\t\t\ttarget,\n\t\t\ttarget === settings.nTHead\n\t\t\t\t? 'tr'+notSelector+' th'+notSelector+', tr'+notSelector+' td'+notSelector\n\t\t\t\t: 'th'+notSelector+', td'+notSelector\n\t\t);\n\t}\n\n\t// Need to resolve the user input array into our internal structure\n\tvar order = [];\n\t_fnSortResolve( settings, order, settings.aaSorting );\n\n\tsettings.aaSorting = order;\n}\n\n\nfunction _fnSortAttachListener(settings, node, selector, column, callback) {\n\t_fnBindAction( node, selector, function (e) {\n\t\tvar run = false;\n\t\tvar columns = column === undefined\n\t\t\t? _fnColumnsFromHeader( e.target )\n\t\t\t: typeof column === 'function'\n\t\t\t\t? column()\n\t\t\t\t: Array.isArray(column)\n\t\t\t\t\t? column\n\t\t\t\t\t: [column];\n\n\t\tif ( columns.length ) {\n\t\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\t\tvar ret = _fnSortAdd( settings, columns[i], i, e.shiftKey );\n\n\t\t\t\tif (ret !== false) {\n\t\t\t\t\trun = true;\n\t\t\t\t}\t\t\t\t\t\n\n\t\t\t\t// If the first entry is no sort, then subsequent\n\t\t\t\t// sort columns are ignored\n\t\t\t\tif (settings.aaSorting.length === 1 && settings.aaSorting[0][1] === '') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (run) {\n\t\t\t\t_fnProcessingRun(settings, true, function () {\n\t\t\t\t\t_fnSort( settings );\n\t\t\t\t\t_fnSortDisplay( settings, settings.aiDisplay );\n\n\t\t\t\t\t_fnReDraw( settings, false, false );\n\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} );\n}\n\n/**\n * Sort the display array to match the master's order\n * @param {*} settings\n */\nfunction _fnSortDisplay(settings, display) {\n\tif (display.length < 2) {\n\t\treturn;\n\t}\n\n\tvar master = settings.aiDisplayMaster;\n\tvar masterMap = {};\n\tvar map = {};\n\tvar i;\n\n\t// Rather than needing an `indexOf` on master array, we can create a map\n\tfor (i=0 ; i<master.length ; i++) {\n\t\tmasterMap[master[i]] = i;\n\t}\n\n\t// And then cache what would be the indexOf from the display\n\tfor (i=0 ; i<display.length ; i++) {\n\t\tmap[display[i]] = masterMap[display[i]];\n\t}\n\n\tdisplay.sort(function(a, b){\n\t\t// Short version of this function is simply `master.indexOf(a) - master.indexOf(b);`\n\t\treturn map[a] - map[b];\n\t});\n}\n\n\nfunction _fnSortResolve (settings, nestedSort, sort) {\n\tvar push = function ( a ) {\n\t\tif ($.isPlainObject(a)) {\n\t\t\tif (a.idx !== undefined) {\n\t\t\t\t// Index based ordering\n\t\t\t\tnestedSort.push([a.idx, a.dir]);\n\t\t\t}\n\t\t\telse if (a.name) {\n\t\t\t\t// Name based ordering\n\t\t\t\tvar cols = _pluck( settings.aoColumns, 'sName');\n\t\t\t\tvar idx = cols.indexOf(a.name);\n\n\t\t\t\tif (idx !== -1) {\n\t\t\t\t\tnestedSort.push([idx, a.dir]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Plain column index and direction pair\n\t\t\tnestedSort.push(a);\n\t\t}\n\t};\n\n\tif ( $.isPlainObject(sort) ) {\n\t\t// Object\n\t\tpush(sort);\n\t}\n\telse if ( sort.length && typeof sort[0] === 'number' ) {\n\t\t// 1D array\n\t\tpush(sort);\n\t}\n\telse if ( sort.length ) {\n\t\t// 2D array\n\t\tfor (var z=0; z<sort.length; z++) {\n\t\t\tpush(sort[z]); // Object or array\n\t\t}\n\t}\n}\n\n\nfunction _fnSortFlatten ( settings )\n{\n\tvar\n\t\ti, k, kLen,\n\t\taSort = [],\n\t\textSort = DataTable.ext.type.order,\n\t\taoColumns = settings.aoColumns,\n\t\taDataSort, iCol, sType, srcCol,\n\t\tfixed = settings.aaSortingFixed,\n\t\tfixedObj = $.isPlainObject( fixed ),\n\t\tnestedSort = [];\n\t\n\tif ( ! settings.oFeatures.bSort ) {\n\t\treturn aSort;\n\t}\n\n\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t// specified\n\tif ( Array.isArray( fixed ) ) {\n\t\t_fnSortResolve( settings, nestedSort, fixed );\n\t}\n\n\tif ( fixedObj && fixed.pre ) {\n\t\t_fnSortResolve( settings, nestedSort, fixed.pre );\n\t}\n\n\t_fnSortResolve( settings, nestedSort, settings.aaSorting );\n\n\tif (fixedObj && fixed.post ) {\n\t\t_fnSortResolve( settings, nestedSort, fixed.post );\n\t}\n\n\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t{\n\t\tsrcCol = nestedSort[i][0];\n\n\t\tif ( aoColumns[ srcCol ] ) {\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\n\t\t\t\tif ( nestedSort[i]._idx === undefined ) {\n\t\t\t\t\tnestedSort[i]._idx = aoColumns[iCol].asSorting.indexOf(nestedSort[i][1]);\n\t\t\t\t}\n\n\t\t\t\tif ( nestedSort[i][1] ) {\n\t\t\t\t\taSort.push( {\n\t\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\t\tcol:       iCol,\n\t\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\t\tindex:     nestedSort[i]._idx,\n\t\t\t\t\t\ttype:      sType,\n\t\t\t\t\t\tformatter: extSort[ sType+\"-pre\" ],\n\t\t\t\t\t\tsorter:    extSort[ sType+\"-\"+nestedSort[i][1] ]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn aSort;\n}\n\n/**\n * Change the order of the table\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSort ( oSettings, col, dir )\n{\n\tvar\n\t\ti, iLen,\n\t\taiOrig = [],\n\t\textSort = DataTable.ext.type.order,\n\t\taoData = oSettings.aoData,\n\t\tsortCol,\n\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\taSort;\n\n\t// Make sure the columns all have types defined\n\t_fnColumnTypes(oSettings);\n\n\t// Allow a specific column to be sorted, which will _not_ alter the display\n\t// master\n\tif (col !== undefined) {\n\t\tvar srcCol = oSettings.aoColumns[col];\n\n\t\taSort = [{\n\t\t\tsrc:       col,\n\t\t\tcol:       col,\n\t\t\tdir:       dir,\n\t\t\tindex:     0,\n\t\t\ttype:      srcCol.sType,\n\t\t\tformatter: extSort[ srcCol.sType+\"-pre\" ],\n\t\t\tsorter:    extSort[ srcCol.sType+\"-\"+dir ]\n\t\t}];\n\t\tdisplayMaster = displayMaster.slice();\n\t}\n\telse {\n\t\taSort = _fnSortFlatten( oSettings );\n\t}\n\n\tfor ( i=0, iLen=aSort.length ; i<iLen ; i++ ) {\n\t\tsortCol = aSort[i];\n\n\t\t// Load the data needed for the sort, for each cell\n\t\t_fnSortData( oSettings, sortCol.col );\n\t}\n\n\t/* No sorting required if server-side or no sorting array */\n\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t{\n\t\t// Reset the initial positions on each pass so we get a stable sort\n\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\taiOrig[ i ] = i;\n\t\t}\n\n\t\t// If the first sort is desc, then reverse the array to preserve original\n\t\t// order, just in reverse\n\t\tif (aSort.length && aSort[0].dir === 'desc' && oSettings.orderDescReverse) {\n\t\t\taiOrig.reverse();\n\t\t}\n\n\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t * follow on its own, but this is what we want (example two column sorting):\n\t\t *  fnLocalSorting = function(a,b){\n\t\t *    var test;\n\t\t *    test = oSort['string-asc']('data11', 'data12');\n\t\t *      if (test !== 0)\n\t\t *        return test;\n\t\t *    test = oSort['numeric-desc']('data21', 'data22');\n\t\t *    if (test !== 0)\n\t\t *      return test;\n\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t *  }\n\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t * positions in the original data array to provide a stable sort.\n\t\t */\n\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\tvar\n\t\t\t\tx, y, k, test, sort,\n\t\t\t\tlen=aSort.length,\n\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\tsort = aSort[k];\n\n\t\t\t\t// Data, which may have already been through a `-pre` function\n\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\tif (sort.sorter) {\n\t\t\t\t\t// If there is a custom sorter (`-asc` or `-desc`) for this\n\t\t\t\t\t// data type, use it\n\t\t\t\t\ttest = sort.sorter(x, y);\n\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Otherwise, use generic sorting\n\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\n\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tx = aiOrig[a];\n\t\t\ty = aiOrig[b];\n\n\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t} );\n\t}\n\telse if ( aSort.length === 0 ) {\n\t\t// Apply index order\n\t\tdisplayMaster.sort(function (x, y) {\n\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t});\n\t}\n\n\tif (col === undefined) {\n\t\t// Tell the draw function that we have sorted the data\n\t\toSettings.bSorted = true;\n\t\toSettings.sortDetails = aSort;\n\n\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort] );\n\t}\n\n\treturn displayMaster;\n}\n\n\n/**\n * Function to run on user sort request\n *  @param {object} settings dataTables settings object\n *  @param {node} attachTo node to attach the handler to\n *  @param {int} colIdx column sorting index\n *  @param {int} addIndex Counter\n *  @param {boolean} [shift=false] Shift click add\n *  @param {function} [callback] callback function\n *  @memberof DataTable#oApi\n */\nfunction _fnSortAdd ( settings, colIdx, addIndex, shift )\n{\n\tvar col = settings.aoColumns[ colIdx ];\n\tvar sorting = settings.aaSorting;\n\tvar asSorting = col.asSorting;\n\tvar nextSortIdx;\n\tvar next = function ( a, overflow ) {\n\t\tvar idx = a._idx;\n\t\tif ( idx === undefined ) {\n\t\t\tidx = asSorting.indexOf(a[1]);\n\t\t}\n\n\t\treturn idx+1 < asSorting.length ?\n\t\t\tidx+1 :\n\t\t\toverflow ?\n\t\t\t\tnull :\n\t\t\t\t0;\n\t};\n\n\tif ( ! col.bSortable ) {\n\t\treturn false;\n\t}\n\n\t// Convert to 2D array if needed\n\tif ( typeof sorting[0] === 'number' ) {\n\t\tsorting = settings.aaSorting = [ sorting ];\n\t}\n\n\t// If appending the sort then we are multi-column sorting\n\tif ( (shift || addIndex) && settings.oFeatures.bSortMulti ) {\n\t\t// Are we already doing some kind of sort on this column?\n\t\tvar sortIdx = _pluck(sorting, '0').indexOf(colIdx);\n\n\t\tif ( sortIdx !== -1 ) {\n\t\t\t// Yes, modify the sort\n\t\t\tnextSortIdx = next( sorting[sortIdx], true );\n\n\t\t\tif ( nextSortIdx === null && sorting.length === 1 ) {\n\t\t\t\tnextSortIdx = 0; // can't remove sorting completely\n\t\t\t}\n\n\t\t\tif ( nextSortIdx === null || asSorting[ nextSortIdx ] === '' ) {\n\t\t\t\tsorting.splice( sortIdx, 1 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t}\n\t\t}\n\t\telse if (shift) {\n\t\t\t// No sort on this column yet, being added by shift click\n\t\t\t// add it as itself\n\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t}\n\t\telse {\n\t\t\t// No sort on this column yet, being added from a colspan\n\t\t\t// so add with same direction as first column\n\t\t\tsorting.push( [ colIdx, sorting[0][1], 0 ] );\n\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t}\n\t}\n\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t// Single column - already sorting on this column, modify the sort\n\t\tnextSortIdx = next( sorting[0] );\n\n\t\tsorting.length = 1;\n\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\tsorting[0]._idx = nextSortIdx;\n\t}\n\telse {\n\t\t// Single column - sort only on this column\n\t\tsorting.length = 0;\n\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\tsorting[0]._idx = 0;\n\t}\n}\n\n\n/**\n * Set the sorting classes on table's body, Note: it is safe to call this function\n * when bSort and bSortClasses are false\n *  @param {object} oSettings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnSortingClasses( settings )\n{\n\tvar oldSort = settings.aLastSort;\n\tvar sortClass = settings.oClasses.order.position;\n\tvar sort = _fnSortFlatten( settings );\n\tvar features = settings.oFeatures;\n\tvar i, iLen, colIdx;\n\n\tif ( features.bSort && features.bSortClasses ) {\n\t\t// Remove old sorting classes\n\t\tfor ( i=0, iLen=oldSort.length ; i<iLen ; i++ ) {\n\t\t\tcolIdx = oldSort[i].src;\n\n\t\t\t// Remove column sorting\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\n\t\t// Add new column sorting\n\t\tfor ( i=0, iLen=sort.length ; i<iLen ; i++ ) {\n\t\t\tcolIdx = sort[i].src;\n\n\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t}\n\t}\n\n\tsettings.aLastSort = sort;\n}\n\n\n// Get the data to sort a column, be it from cache, fresh (populating the\n// cache), or from a sort formatter\nfunction _fnSortData( settings, colIdx )\n{\n\t// Custom sorting function - provided by the sort data type\n\tvar column = settings.aoColumns[ colIdx ];\n\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\tvar customData;\n\n\tif ( customSort ) {\n\t\tcustomData = customSort.call( settings.oInstance, settings, colIdx,\n\t\t\t_fnColumnIndexToVisible( settings, colIdx )\n\t\t);\n\t}\n\n\t// Use / populate cache\n\tvar row, cellData;\n\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\tvar data = settings.aoData;\n\n\tfor ( var rowIdx=0 ; rowIdx<data.length ; rowIdx++ ) {\n\t\t// Sparse array\n\t\tif (! data[rowIdx]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\trow = data[rowIdx];\n\n\t\tif ( ! row._aSortData ) {\n\t\t\trow._aSortData = [];\n\t\t}\n\n\t\tif ( ! row._aSortData[colIdx] || customSort ) {\n\t\t\tcellData = customSort ?\n\t\t\t\tcustomData[rowIdx] : // If there was a custom sort function, use data from there\n\t\t\t\t_fnGetCellData( settings, rowIdx, colIdx, 'sort' );\n\n\t\t\trow._aSortData[ colIdx ] = formatter ?\n\t\t\t\tformatter( cellData, settings ) :\n\t\t\t\tcellData;\n\t\t}\n\t}\n}\n\n\n/**\n * State information for a table\n *\n * @param {*} settings\n * @returns State object\n */\nfunction _fnSaveState ( settings )\n{\n\tif (settings._bLoadingState) {\n\t\treturn;\n\t}\n\n\t// Sort state saving uses [[idx, order]] structure.\n\tvar sorting = [];\n\t_fnSortResolve(settings, sorting, settings.aaSorting );\n\n\t/* Store the interesting variables */\n\tvar columns = settings.aoColumns;\n\tvar state = {\n\t\ttime:    +new Date(),\n\t\tstart:   settings._iDisplayStart,\n\t\tlength:  settings._iDisplayLength,\n\t\torder:   sorting.map(function (sort) {\n\t\t\t// If a column name is available, use it\n\t\t\treturn columns[sort[0]] && columns[sort[0]].sName\n\t\t\t\t? [ columns[sort[0]].sName, sort[1] ]\n\t\t\t\t: sort.slice();\n\t\t} ),\n\t\tsearch:  $.extend({}, settings.oPreviousSearch),\n\t\tcolumns: settings.aoColumns.map( function ( col, i ) {\n\t\t\treturn {\n\t\t\t\tname: col.sName,\n\t\t\t\tvisible: col.bVisible,\n\t\t\t\tsearch: $.extend({}, settings.aoPreSearchCols[i])\n\t\t\t};\n\t\t} )\n\t};\n\n\tsettings.oSavedState = state;\n\t_fnCallbackFire( settings, \"aoStateSaveParams\", 'stateSaveParams', [settings, state] );\n\t\n\tif ( settings.oFeatures.bStateSave && !settings.bDestroying )\n\t{\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, state );\n\t}\t\n}\n\n\n/**\n * Attempt to load a saved table state\n *  @param {object} oSettings dataTables settings object\n *  @param {object} oInit DataTables init object so we can override settings\n *  @param {function} callback Callback to execute when the state has been loaded\n *  @memberof DataTable#oApi\n */\nfunction _fnLoadState ( settings, init, callback )\n{\n\tif ( ! settings.oFeatures.bStateSave ) {\n\t\tcallback();\n\t\treturn;\n\t}\n\n\tvar loaded = function(state) {\n\t\t_fnImplementState(settings, state, callback);\n\t}\n\n\tvar state = settings.fnStateLoadCallback.call( settings.oInstance, settings, loaded );\n\n\tif ( state !== undefined ) {\n\t\t_fnImplementState( settings, state, callback );\n\t}\n\t// otherwise, wait for the loaded callback to be executed\n\n\treturn true;\n}\n\nfunction _fnImplementState ( settings, s, callback) {\n\tvar i, iLen;\n\tvar columns = settings.aoColumns;\n\tvar currentNames = _pluck(settings.aoColumns, 'sName');\n\n\tsettings._bLoadingState = true;\n\n\t// When StateRestore was introduced the state could now be implemented at any time\n\t// Not just initialisation. To do this an api instance is required in some places\n\tvar api = settings._bInitComplete ? new DataTable.Api(settings) : null;\n\n\tif ( ! s || ! s.time ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Reject old data\n\tvar duration = settings.iStateDuration;\n\tif ( duration > 0 && s.time < +new Date() - (duration*1000) ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Allow custom and plug-in manipulation functions to alter the saved data set and\n\t// cancelling of loading by returning false\n\tvar abStateLoad = _fnCallbackFire( settings, 'aoStateLoadParams', 'stateLoadParams', [settings, s] );\n\tif ( abStateLoad.indexOf(false) !== -1 ) {\n\t\tsettings._bLoadingState = false;\n\t\tcallback();\n\t\treturn;\n\t}\n\n\t// Store the saved state so it might be accessed at any time\n\tsettings.oLoadedState = $.extend( true, {}, s );\n\n\t// This is needed for ColReorder, which has to happen first to allow all\n\t// the stored indexes to be usable. It is not publicly documented.\n\t_fnCallbackFire( settings, null, 'stateLoadInit', [settings, s], true );\n\n\t// Page Length\n\tif ( s.length !== undefined ) {\n\t\t// If already initialised just set the value directly so that the select element is also updated\n\t\tif (api) {\n\t\t\tapi.page.len(s.length)\n\t\t}\n\t\telse {\n\t\t\tsettings._iDisplayLength   = s.length;\n\t\t}\n\t}\n\n\t// Restore key features\n\tif ( s.start !== undefined ) {\n\t\tif(api === null) {\n\t\t\tsettings._iDisplayStart    = s.start;\n\t\t\tsettings.iInitDisplayStart = s.start;\n\t\t}\n\t\telse {\n\t\t\t_fnPageChange(settings, s.start/settings._iDisplayLength);\n\t\t}\n\t}\n\n\t// Order\n\tif ( s.order !== undefined ) {\n\t\tsettings.aaSorting = [];\n\t\t$.each( s.order, function ( i, col ) {\n\t\t\tvar set = [ col[0], col[1] ];\n\n\t\t\t// A column name was stored and should be used for restore\n\t\t\tif (typeof col[0] === 'string') {\n\t\t\t\t// Find the name from the current list of column names\n\t\t\t\tvar idx = currentNames.indexOf(col[0]);\n\n\t\t\t\tif (idx < 0) {\n\t\t\t\t\t// If the column was not found ignore it and continue\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tset[0] = idx;\n\t\t\t}\n\t\t\telse if (set[0] >= columns.length) {\n\t\t\t\t// If the column index is out of bounds ignore it and continue\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsettings.aaSorting.push(set);\n\t\t} );\n\t}\n\n\t// Search\n\tif ( s.search !== undefined ) {\n\t\t$.extend( settings.oPreviousSearch, s.search );\n\t}\n\n\t// Columns\n\tif ( s.columns ) {\n\t\tvar set = s.columns;\n\t\tvar incoming = _pluck(s.columns, 'name');\n\n\t\t// Check if it is a 2.2 style state object with a `name` property for the columns, and if\n\t\t// the name was defined. If so, then create a new array that will map the state object\n\t\t// given, to the current columns (don't bother if they are already matching tho).\n\t\tif (incoming.join('').length && incoming.join('') !== currentNames.join('')) {\n\t\t\tset = [];\n\n\t\t\t// For each column, try to find the name in the incoming array\n\t\t\tfor (i=0 ; i<currentNames.length ; i++) {\n\t\t\t\tif (currentNames[i] != '') {\n\t\t\t\t\tvar idx = incoming.indexOf(currentNames[i]);\n\n\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\tset.push(s.columns[idx]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// No matching column name in the state's columns, so this might be a new\n\t\t\t\t\t\t// column and thus can't have a state already.\n\t\t\t\t\t\tset.push({});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// If no name, but other columns did have a name, then there is no knowing\n\t\t\t\t\t// where this one came from originally so it can't be restored.\n\t\t\t\t\tset.push({});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If the number of columns to restore is different from current, then all bets are off.\n\t\tif (set.length === columns.length) {\n\t\t\tfor ( i=0, iLen=set.length ; i<iLen ; i++ ) {\n\t\t\t\tvar col = set[i];\n\n\t\t\t\t// Visibility\n\t\t\t\tif ( col.visible !== undefined ) {\n\t\t\t\t\t// If the api is defined, the table has been initialised so we need to use it rather than internal settings\n\t\t\t\t\tif (api) {\n\t\t\t\t\t\t// Don't redraw the columns on every iteration of this loop, we will do this at the end instead\n\t\t\t\t\t\tapi.column(i).visible(col.visible, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcolumns[i].bVisible = col.visible;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Search\n\t\t\t\tif ( col.search !== undefined ) {\n\t\t\t\t\t$.extend( settings.aoPreSearchCols[i], col.search );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If the api is defined then we need to adjust the columns once the visibility has been changed\n\t\t\tif (api) {\n\t\t\t\tapi.one('draw', function () {\n\t\t\t\t\tapi.columns.adjust();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tsettings._bLoadingState = false;\n\t_fnCallbackFire( settings, 'aoStateLoaded', 'stateLoaded', [settings, s] );\n\tcallback();\n}\n\n/**\n * Log an error message\n *  @param {object} settings dataTables settings object\n *  @param {int} level log error messages, or display them to the user\n *  @param {string} msg error message\n *  @param {int} tn Technical note id to get more information about the error.\n *  @memberof DataTable#oApi\n */\nfunction _fnLog( settings, level, msg, tn )\n{\n\tmsg = 'DataTables warning: '+\n\t\t(settings ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\n\tif ( tn ) {\n\t\tmsg += '. For more information about this error, please see '+\n\t\t'https://datatables.net/tn/'+tn;\n\t}\n\n\tif ( ! level  ) {\n\t\t// Backwards compatibility pre 1.10\n\t\tvar ext = DataTable.ext;\n\t\tvar type = ext.sErrMode || ext.errMode;\n\n\t\tif ( settings ) {\n\t\t\t_fnCallbackFire( settings, null, 'dt-error', [ settings, tn, msg ], true );\n\t\t}\n\n\t\tif ( type == 'alert' ) {\n\t\t\talert( msg );\n\t\t}\n\t\telse if ( type == 'throw' ) {\n\t\t\tthrow new Error(msg);\n\t\t}\n\t\telse if ( typeof type == 'function' ) {\n\t\t\ttype( settings, tn, msg );\n\t\t}\n\t}\n\telse if ( window.console && console.log ) {\n\t\tconsole.log( msg );\n\t}\n}\n\n\n/**\n * See if a property is defined on one object, if so assign it to the other object\n *  @param {object} ret target object\n *  @param {object} src source object\n *  @param {string} name property\n *  @param {string} [mappedName] name to map too - optional, name used if not given\n *  @memberof DataTable#oApi\n */\nfunction _fnMap( ret, src, name, mappedName )\n{\n\tif ( Array.isArray( name ) ) {\n\t\t$.each( name, function (i, val) {\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnMap( ret, src, val );\n\t\t\t}\n\t\t} );\n\n\t\treturn;\n\t}\n\n\tif ( mappedName === undefined ) {\n\t\tmappedName = name;\n\t}\n\n\tif ( src[name] !== undefined ) {\n\t\tret[mappedName] = src[name];\n\t}\n}\n\n\n/**\n * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n * shallow copy arrays. The reason we need to do this, is that we don't want to\n * deep copy array init values (such as aaSorting) since the dev wouldn't be\n * able to override them, but we do want to deep copy arrays.\n *  @param {object} out Object to extend\n *  @param {object} extender Object from which the properties will be applied to\n *      out\n *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n *      independent copy with the exception of the `data` or `aaData` parameters\n *      if they are present. This is so you can pass in a collection to\n *      DataTables and have that used as your data source without breaking the\n *      references\n *  @returns {object} out Reference, just for convenience - out === the return.\n *  @memberof DataTable#oApi\n *  @todo This doesn't take account of arrays inside the deep copied objects.\n */\nfunction _fnExtend( out, extender, breakRefs )\n{\n\tvar val;\n\n\tfor ( var prop in extender ) {\n\t\tif ( Object.prototype.hasOwnProperty.call(extender, prop) ) {\n\t\t\tval = extender[prop];\n\n\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\tout[prop] = {};\n\t\t\t\t}\n\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t}\n\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {\n\t\t\t\tout[prop] = val.slice();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tout[prop] = val;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\n\n/**\n * Bind an event handler to allow a click or return key to activate the callback.\n * This is good for accessibility since a return on the keyboard will have the\n * same effect as a click, if the element has focus.\n *  @param {element} n Element to bind the action to\n *  @param {object|string} selector Selector (for delegated events) or data object\n *   to pass to the triggered function\n *  @param {function} fn Callback function for when the event is triggered\n *  @memberof DataTable#oApi\n */\nfunction _fnBindAction( n, selector, fn )\n{\n\t$(n)\n\t\t.on( 'click.DT', selector, function (e) {\n\t\t\tfn(e);\n\t\t} )\n\t\t.on( 'keypress.DT', selector, function (e){\n\t\t\tif ( e.which === 13 ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tfn(e);\n\t\t\t}\n\t\t} )\n\t\t.on( 'selectstart.DT', selector, function () {\n\t\t\t// Don't want a double click resulting in text selection\n\t\t\treturn false;\n\t\t} );\n}\n\n\n/**\n * Register a callback function. Easily allows a callback function to be added to\n * an array store of callback functions that can then all be called together.\n *  @param {object} settings dataTables settings object\n *  @param {string} store Name of the array storage for the callbacks in oSettings\n *  @param {function} fn Function to be called back\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackReg( settings, store, fn )\n{\n\tif ( fn ) {\n\t\tsettings[store].push(fn);\n\t}\n}\n\n\n/**\n * Fire callback functions and trigger events. Note that the loop over the\n * callback array store is done backwards! Further note that you do not want to\n * fire off triggers in time sensitive applications (for example cell creation)\n * as its slow.\n *  @param {object} settings dataTables settings object\n *  @param {string} callbackArr Name of the array storage for the callbacks in\n *      oSettings\n *  @param {string} eventName Name of the jQuery custom event to trigger. If\n *      null no trigger is fired\n *  @param {array} args Array of arguments to pass to the callback function /\n *      trigger\n *  @param {boolean} [bubbles] True if the event should bubble\n *  @memberof DataTable#oApi\n */\nfunction _fnCallbackFire( settings, callbackArr, eventName, args, bubbles )\n{\n\tvar ret = [];\n\n\tif ( callbackArr ) {\n\t\tret = settings[callbackArr].slice().reverse().map( function (val) {\n\t\t\treturn val.apply( settings.oInstance, args );\n\t\t} );\n\t}\n\n\tif ( eventName !== null) {\n\t\tvar e = $.Event( eventName+'.dt' );\n\t\tvar table = $(settings.nTable);\n\t\t\n\t\t// Expose the DataTables API on the event object for easy access\n\t\te.dt = settings.api;\n\n\t\ttable[bubbles ?  'trigger' : 'triggerHandler']( e, args );\n\n\t\t// If not yet attached to the document, trigger the event\n\t\t// on the body directly to sort of simulate the bubble\n\t\tif (bubbles && table.parents('body').length === 0) {\n\t\t\t$('body').trigger( e, args );\n\t\t}\n\n\t\tret.push( e.result );\n\t}\n\n\treturn ret;\n}\n\n\nfunction _fnLengthOverflow ( settings )\n{\n\tvar\n\t\tstart = settings._iDisplayStart,\n\t\tend = settings.fnDisplayEnd(),\n\t\tlen = settings._iDisplayLength;\n\n\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\tif ( start >= end )\n\t{\n\t\tstart = end - len;\n\t}\n\n\t// Keep the start record on the current page\n\tstart -= (start % len);\n\n\tif ( len === -1 || start < 0 )\n\t{\n\t\tstart = 0;\n\t}\n\n\tsettings._iDisplayStart = start;\n}\n\n\nfunction _fnRenderer( settings, type )\n{\n\tvar renderer = settings.renderer;\n\tvar host = DataTable.ext.renderer[type];\n\n\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t// the default.\n\t\treturn host[renderer[type]] || host._;\n\t}\n\telse if ( typeof renderer === 'string' ) {\n\t\t// Common renderer - if there is one available for this type use it,\n\t\t// otherwise use the default\n\t\treturn host[renderer] || host._;\n\t}\n\n\t// Use the default\n\treturn host._;\n}\n\n\n/**\n * Detect the data source being used for the table. Used to simplify the code\n * a little (ajax) and to make it compress a little smaller.\n *\n *  @param {object} settings dataTables settings object\n *  @returns {string} Data source\n *  @memberof DataTable#oApi\n */\nfunction _fnDataSource ( settings )\n{\n\tif ( settings.oFeatures.bServerSide ) {\n\t\treturn 'ssp';\n\t}\n\telse if ( settings.ajax ) {\n\t\treturn 'ajax';\n\t}\n\treturn 'dom';\n}\n\n/**\n * Common replacement for language strings\n *\n * @param {*} settings DT settings object\n * @param {*} str String with values to replace\n * @param {*} entries Plural number for _ENTRIES_ - can be undefined\n * @returns String\n */\nfunction _fnMacros ( settings, str, entries )\n{\n\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is\n\t// used only internally\n\tvar\n\t\tformatter  = settings.fnFormatNumber,\n\t\tstart      = settings._iDisplayStart+1,\n\t\tlen        = settings._iDisplayLength,\n\t\tvis        = settings.fnRecordsDisplay(),\n\t\tmax        = settings.fnRecordsTotal(),\n\t\tall        = len === -1;\n\n\treturn str.\n\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\treplace(/_MAX_/g,   formatter.call( settings, max ) ).\n\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) ).\n\t\treplace(/_ENTRIES_/g, settings.api.i18n('entries', '', entries) ).\n\t\treplace(/_ENTRIES-MAX_/g, settings.api.i18n('entries', '', max) ).\n\t\treplace(/_ENTRIES-TOTAL_/g, settings.api.i18n('entries', '', vis) );\n}\n\n/**\n * Add elements to an array as quickly as possible, but stack safe.\n *\n * @param {*} arr Array to add the data to\n * @param {*} data Data array that is to be added\n * @returns \n */\nfunction _fnArrayApply(arr, data) {\n\tif (! data) {\n\t\treturn;\n\t}\n\n\t// Chrome can throw a max stack error if apply is called with\n\t// too large an array, but apply is faster.\n\tif (data.length < 10000) {\n\t\tarr.push.apply(arr, data);\n\t}\n\telse {\n\t\tfor (i=0 ; i<data.length ; i++) {\n\t\t\tarr.push(data[i]);\n\t\t}\n\t}\n}\n\n/**\n * Add one or more listeners to the table\n *\n * @param {*} that JQ for the table\n * @param {*} name Event name\n * @param {*} src Listener(s)\n */\nfunction _fnListener(that, name, src) {\n\tif (!Array.isArray(src)) {\n\t\tsrc = [src];\n\t}\n\n\tfor (i=0 ; i<src.length ; i++) {\n\t\tthat.on(name + '.dt', src[i]);\n\t}\n}\n\n/**\n * Escape HTML entities in strings, in an object\n */\nfunction _fnEscapeObject(obj) {\n\tif (DataTable.ext.escape.attributes) {\n\t\t$.each(obj, function (key, val) {\n\t\t\tobj[key] = _escapeHtml(val);\n\t\t})\n\t}\n\n\treturn obj;\n}\n\n\n\n/**\n * Computed structure of the DataTables API, defined by the options passed to\n * `DataTable.Api.register()` when building the API.\n *\n * The structure is built in order to speed creation and extension of the Api\n * objects since the extensions are effectively pre-parsed.\n *\n * The array is an array of objects with the following structure, where this\n * base array represents the Api prototype base:\n *\n *     [\n *       {\n *         name:      'data'                -- string   - Property name\n *         val:       function () {},       -- function - Api method (or undefined if just an object\n *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n *       },\n *       {\n *         name:     'row'\n *         val:       {},\n *         methodExt: [ ... ],\n *         propExt:   [\n *           {\n *             name:      'data'\n *             val:       function () {},\n *             methodExt: [ ... ],\n *             propExt:   [ ... ]\n *           },\n *           ...\n *         ]\n *       }\n *     ]\n *\n * @type {Array}\n * @ignore\n */\nvar __apiStruct = [];\n\n\n/**\n * `Array.prototype` reference.\n *\n * @type object\n * @ignore\n */\nvar __arrayProto = Array.prototype;\n\n\n/**\n * Abstraction for `context` parameter of the `Api` constructor to allow it to\n * take several different forms for ease of use.\n *\n * Each of the input parameter types will be converted to a DataTables settings\n * object where possible.\n *\n * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n *   of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n *   * `DataTables.Api` - API instance\n * @return {array|null} Matching DataTables settings objects. `null` or\n *   `undefined` is returned if no matching DataTable is found.\n * @ignore\n */\nvar _toSettings = function ( mixed )\n{\n\tvar idx, jq;\n\tvar settings = DataTable.settings;\n\tvar tables = _pluck(settings, 'nTable');\n\n\tif ( ! mixed ) {\n\t\treturn [];\n\t}\n\telse if ( mixed.nTable && mixed.oFeatures ) {\n\t\t// DataTables settings object\n\t\treturn [ mixed ];\n\t}\n\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t// Table node\n\t\tidx = tables.indexOf(mixed);\n\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t}\n\telse if ( mixed && typeof mixed.settings === 'function' ) {\n\t\treturn mixed.settings().toArray();\n\t}\n\telse if ( typeof mixed === 'string' ) {\n\t\t// jQuery selector\n\t\tjq = $(mixed).get();\n\t}\n\telse if ( mixed instanceof $ ) {\n\t\t// jQuery object (also DataTables instance)\n\t\tjq = mixed.get();\n\t}\n\n\tif ( jq ) {\n\t\treturn settings.filter(function (v, idx) {\n\t\t\treturn jq.includes(tables[idx]);\n\t\t});\n\t}\n};\n\n\n/**\n * DataTables API class - used to control and interface with  one or more\n * DataTables enhanced tables.\n *\n * The API class is heavily based on jQuery, presenting a chainable interface\n * that you can use to interact with tables. Each instance of the API class has\n * a \"context\" - i.e. the tables that it will operate on. This could be a single\n * table, all tables on a page or a sub-set thereof.\n *\n * Additionally the API is designed to allow you to easily work with the data in\n * the tables, retrieving and manipulating it as required. This is done by\n * presenting the API class as an array like interface. The contents of the\n * array depend upon the actions requested by each method (for example\n * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n * return an array of objects or arrays depending upon your table's\n * configuration). The API object has a number of array like methods (`push`,\n * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n * `unique` etc) to assist your working with the data held in a table.\n *\n * Most methods (those which return an Api instance) are chainable, which means\n * the return from a method call also has all of the methods available that the\n * top level object had. For example, these two calls are equivalent:\n *\n *     // Not chained\n *     api.row.add( {...} );\n *     api.draw();\n *\n *     // Chained\n *     api.row.add( {...} ).draw();\n *\n * @class DataTable.Api\n * @param {array|object|string|jQuery} context DataTable identifier. This is\n *   used to define which DataTables enhanced tables this API will operate on.\n *   Can be one of:\n *\n *   * `string` - jQuery selector. Any DataTables' matching the given selector\n *     with be found and used.\n *   * `node` - `TABLE` node which has already been formed into a DataTable.\n *   * `jQuery` - A jQuery object of `TABLE` nodes.\n *   * `object` - DataTables settings object\n * @param {array} [data] Data to initialise the Api instance with.\n *\n * @example\n *   // Direct initialisation during DataTables construction\n *   var api = $('#example').DataTable();\n *\n * @example\n *   // Initialisation using a DataTables jQuery object\n *   var api = $('#example').dataTable().api();\n *\n * @example\n *   // Initialisation as a constructor\n *   var api = new DataTable.Api( 'table.dataTable' );\n */\n_Api = function ( context, data )\n{\n\tif ( ! (this instanceof _Api) ) {\n\t\treturn new _Api( context, data );\n\t}\n\n\tvar i;\n\tvar settings = [];\n\tvar ctxSettings = function ( o ) {\n\t\tvar a = _toSettings( o );\n\t\tif ( a ) {\n\t\t\tsettings.push.apply( settings, a );\n\t\t}\n\t};\n\n\tif ( Array.isArray( context ) ) {\n\t\tfor ( i=0 ; i<context.length ; i++ ) {\n\t\t\tctxSettings( context[i] );\n\t\t}\n\t}\n\telse {\n\t\tctxSettings( context );\n\t}\n\n\t// Remove duplicates\n\tthis.context = settings.length > 1\n\t\t? _unique( settings )\n\t\t: settings;\n\n\t// Initial data\n\t_fnArrayApply(this, data);\n\n\t// selector\n\tthis.selector = {\n\t\trows: null,\n\t\tcols: null,\n\t\topts: null\n\t};\n\n\t_Api.extend( this, this, __apiStruct );\n};\n\nDataTable.Api = _Api;\n\n// Don't destroy the existing prototype, just extend it. Required for jQuery 2's\n// isPlainObject.\n$.extend( _Api.prototype, {\n\tany: function ()\n\t{\n\t\treturn this.count() !== 0;\n\t},\n\n\tcontext: [], // array of table settings objects\n\n\tcount: function ()\n\t{\n\t\treturn this.flatten().length;\n\t},\n\n\teach: function ( fn )\n\t{\n\t\tfor ( var i=0, iLen=this.length ; i<iLen; i++ ) {\n\t\t\tfn.call( this, this[i], i, this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\teq: function ( idx )\n\t{\n\t\tvar ctx = this.context;\n\n\t\treturn ctx.length > idx ?\n\t\t\tnew _Api( ctx[idx], this[idx] ) :\n\t\t\tnull;\n\t},\n\n\tfilter: function ( fn )\n\t{\n\t\tvar a = __arrayProto.filter.call( this, fn, this );\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\tflatten: function ()\n\t{\n\t\tvar a = [];\n\n\t\treturn new _Api( this.context, a.concat.apply( a, this.toArray() ) );\n\t},\n\n\tget: function ( idx )\n\t{\n\t\treturn this[ idx ];\n\t},\n\n\tjoin:    __arrayProto.join,\n\n\tincludes: function ( find ) {\n\t\treturn this.indexOf( find ) === -1 ? false : true;\n\t},\n\n\tindexOf: __arrayProto.indexOf,\n\n\titerator: function ( flatten, type, fn, alwaysNew ) {\n\t\tvar\n\t\t\ta = [], ret,\n\t\t\ti, iLen, j, jen,\n\t\t\tcontext = this.context,\n\t\t\trows, items, item,\n\t\t\tselector = this.selector;\n\n\t\t// Argument shifting\n\t\tif ( typeof flatten === 'string' ) {\n\t\t\talwaysNew = fn;\n\t\t\tfn = type;\n\t\t\ttype = flatten;\n\t\t\tflatten = false;\n\t\t}\n\n\t\tfor ( i=0, iLen=context.length ; i<iLen ; i++ ) {\n\t\t\tvar apiInst = new _Api( context[i] );\n\n\t\t\tif ( type === 'table' ) {\n\t\t\t\tret = fn.call( apiInst, context[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\tret = fn.call( apiInst, context[i], this[i], i );\n\n\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\ta.push( ret );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( type === 'every' || type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\titems = this[i];\n\n\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t}\n\n\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\titem = items[j];\n\n\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item.row, item.column, i, j );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tret = fn.call( apiInst, context[i], item, i, j, rows );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( a.length || alwaysNew ) {\n\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\tvar apiSelector = api.selector;\n\t\t\tapiSelector.rows = selector.rows;\n\t\t\tapiSelector.cols = selector.cols;\n\t\t\tapiSelector.opts = selector.opts;\n\t\t\treturn api;\n\t\t}\n\t\treturn this;\n\t},\n\n\tlastIndexOf: __arrayProto.lastIndexOf,\n\n\tlength:  0,\n\n\tmap: function ( fn )\n\t{\n\t\tvar a = __arrayProto.map.call( this, fn, this );\n\n\t\treturn new _Api( this.context, a );\n\t},\n\n\tpluck: function ( prop )\n\t{\n\t\tvar fn = DataTable.util.get(prop);\n\n\t\treturn this.map( function ( el ) {\n\t\t\treturn fn(el);\n\t\t} );\n\t},\n\n\tpop:     __arrayProto.pop,\n\n\tpush:    __arrayProto.push,\n\n\treduce: __arrayProto.reduce,\n\n\treduceRight: __arrayProto.reduceRight,\n\n\treverse: __arrayProto.reverse,\n\n\t// Object with rows, columns and opts\n\tselector: null,\n\n\tshift:   __arrayProto.shift,\n\n\tslice: function () {\n\t\treturn new _Api( this.context, this );\n\t},\n\n\tsort:    __arrayProto.sort,\n\n\tsplice:  __arrayProto.splice,\n\n\ttoArray: function ()\n\t{\n\t\treturn __arrayProto.slice.call( this );\n\t},\n\n\tto$: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\ttoJQuery: function ()\n\t{\n\t\treturn $( this );\n\t},\n\n\tunique: function ()\n\t{\n\t\treturn new _Api( this.context, _unique(this.toArray()) );\n\t},\n\n\tunshift: __arrayProto.unshift\n} );\n\n\nfunction _api_scope( scope, fn, struct ) {\n\treturn function () {\n\t\tvar ret = fn.apply( scope || this, arguments );\n\n\t\t// Method extension\n\t\t_Api.extend( ret, ret, struct.methodExt );\n\t\treturn ret;\n\t};\n}\n\nfunction _api_find( src, name ) {\n\tfor ( var i=0, iLen=src.length ; i<iLen ; i++ ) {\n\t\tif ( src[i].name === name ) {\n\t\t\treturn src[i];\n\t\t}\n\t}\n\treturn null;\n}\n\nwindow.__apiStruct = __apiStruct;\n\n_Api.extend = function ( scope, obj, ext )\n{\n\t// Only extend API instances and static properties of the API\n\tif ( ! ext.length || ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, iLen,\n\t\tstruct;\n\n\tfor ( i=0, iLen=ext.length ; i<iLen ; i++ ) {\n\t\tstruct = ext[i];\n\n\t\tif (struct.name === '__proto__') {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Value\n\t\tobj[ struct.name ] = struct.type === 'function' ?\n\t\t\t_api_scope( scope, struct.val, struct ) :\n\t\t\tstruct.type === 'object' ?\n\t\t\t\t{} :\n\t\t\t\tstruct.val;\n\n\t\tobj[ struct.name ].__dt_wrapper = true;\n\n\t\t// Property extension\n\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t}\n};\n\n//     [\n//       {\n//         name:      'data'                -- string   - Property name\n//         val:       function () {},       -- function - Api method (or undefined if just an object\n//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n//       },\n//       {\n//         name:     'row'\n//         val:       {},\n//         methodExt: [ ... ],\n//         propExt:   [\n//           {\n//             name:      'data'\n//             val:       function () {},\n//             methodExt: [ ... ],\n//             propExt:   [ ... ]\n//           },\n//           ...\n//         ]\n//       }\n//     ]\n\n\n_Api.register = _api_register = function ( name, val )\n{\n\tif ( Array.isArray( name ) ) {\n\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t_Api.register( name[j], val );\n\t\t}\n\t\treturn;\n\t}\n\n\tvar\n\t\ti, iLen,\n\t\their = name.split('.'),\n\t\tstruct = __apiStruct,\n\t\tkey, method;\n\n\tfor ( i=0, iLen=heir.length ; i<iLen ; i++ ) {\n\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\tkey = method ?\n\t\t\their[i].replace('()', '') :\n\t\t\their[i];\n\n\t\tvar src = _api_find( struct, key );\n\t\tif ( ! src ) {\n\t\t\tsrc = {\n\t\t\t\tname:      key,\n\t\t\t\tval:       {},\n\t\t\t\tmethodExt: [],\n\t\t\t\tpropExt:   [],\n\t\t\t\ttype:      'object'\n\t\t\t};\n\t\t\tstruct.push( src );\n\t\t}\n\n\t\tif ( i === iLen-1 ) {\n\t\t\tsrc.val = val;\n\t\t\tsrc.type = typeof val === 'function' ?\n\t\t\t\t'function' :\n\t\t\t\t$.isPlainObject( val ) ?\n\t\t\t\t\t'object' :\n\t\t\t\t\t'other';\n\t\t}\n\t\telse {\n\t\t\tstruct = method ?\n\t\t\t\tsrc.methodExt :\n\t\t\t\tsrc.propExt;\n\t\t}\n\t}\n};\n\n_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t_Api.register( pluralName, val );\n\n\t_Api.register( singularName, function () {\n\t\tvar ret = val.apply( this, arguments );\n\n\t\tif ( ret === this ) {\n\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\treturn this;\n\t\t}\n\t\telse if ( ret instanceof _Api ) {\n\t\t\t// New API instance returned, want the value from the first item\n\t\t\t// in the returned array for the singular result.\n\t\t\treturn ret.length ?\n\t\t\t\tArray.isArray( ret[0] ) ?\n\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\tret[0] :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Non-API return - just fire it back\n\t\treturn ret;\n\t} );\n};\n\n\n/**\n * Selector for HTML tables. Apply the given selector to the give array of\n * DataTables settings objects.\n *\n * @param {string|integer} [selector] jQuery selector string or integer\n * @param  {array} Array of DataTables settings objects to be filtered\n * @return {array}\n * @ignore\n */\nvar __table_selector = function ( selector, a )\n{\n\tif ( Array.isArray(selector) ) {\n\t\tvar result = [];\n\n\t\tselector.forEach(function (sel) {\n\t\t\tvar inner = __table_selector(sel, a);\n\n\t\t\t_fnArrayApply(result, inner);\n\t\t});\n\n\t\treturn result.filter( function (item) {\n\t\t\treturn item;\n\t\t});\n\t}\n\n\t// Integer is used to pick out a table by index\n\tif ( typeof selector === 'number' ) {\n\t\treturn [ a[ selector ] ];\n\t}\n\n\t// Perform a jQuery selector on the table nodes\n\tvar nodes = a.map( function (el) {\n\t\treturn el.nTable;\n\t} );\n\n\treturn $(nodes)\n\t\t.filter( selector )\n\t\t.map( function () {\n\t\t\t// Need to translate back from the table node to the settings\n\t\t\tvar idx = nodes.indexOf(this);\n\t\t\treturn a[ idx ];\n\t\t} )\n\t\t.toArray();\n};\n\n\n\n/**\n * Context selector for the API's context (i.e. the tables the API instance\n * refers to.\n *\n * @name    DataTable.Api#tables\n * @param {string|integer} [selector] Selector to pick which tables the iterator\n *   should operate on. If not given, all tables in the current context are\n *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n *   select multiple tables or as an integer to select a single table.\n * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n */\n_api_register( 'tables()', function ( selector ) {\n\t// A new instance is created if there was a selector specified\n\treturn selector !== undefined && selector !== null ?\n\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\tthis;\n} );\n\n\n_api_register( 'table()', function ( selector ) {\n\tvar tables = this.tables( selector );\n\tvar ctx = tables.context;\n\n\t// Truncate to the first matched table\n\treturn ctx.length ?\n\t\tnew _Api( ctx[0] ) :\n\t\ttables;\n} );\n\n// Common methods, combined to reduce size\n[\n\t['nodes', 'node', 'nTable'],\n\t['body', 'body', 'nTBody'],\n\t['header', 'header', 'nTHead'],\n\t['footer', 'footer', 'nTFoot'],\n].forEach(function (item) {\n\t_api_registerPlural(\n\t\t'tables().' + item[0] + '()',\n\t\t'table().' + item[1] + '()' ,\n\t\tfunction () {\n\t\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t\treturn ctx[item[2]];\n\t\t\t}, 1 );\n\t\t}\n\t);\n});\n\n// Structure methods\n[\n\t['header', 'aoHeader'],\n\t['footer', 'aoFooter'],\n].forEach(function (item) {\n\t_api_register( 'table().' + item[0] + '.structure()' , function (selector) {\n\t\tvar indexes = this.columns(selector).indexes().flatten().toArray();\n\t\tvar ctx = this.context[0];\n\t\tvar structure = _fnHeaderLayout(ctx, ctx[item[1]], indexes);\n\n\t\t// The structure is in column index order - but from this method we want the return to be\n\t\t// in the columns() selector API order. In order to do that we need to map from one form\n\t\t// to the other\n\t\tvar orderedIndexes = indexes.slice().sort(function (a, b) {\n\t\t\treturn a - b;\n\t\t});\n\n\t\treturn structure.map(function (row) {\n\t\t\treturn indexes.map(function (colIdx) {\n\t\t\t\treturn row[orderedIndexes.indexOf(colIdx)];\n\t\t\t});\n\t\t});\n\t});\n});\n\n\n_api_registerPlural( 'tables().containers()', 'table().container()' , function () {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\treturn ctx.nTableWrapper;\n\t}, 1 );\n} );\n\n_api_register( 'tables().every()', function ( fn ) {\n\tvar that = this;\n\n\treturn this.iterator('table', function (s, i) {\n\t\tfn.call(that.table(i), i);\n\t});\n});\n\n_api_register( 'caption()', function ( value, side ) {\n\tvar context = this.context;\n\n\t// Getter - return existing node's content\n\tif ( value === undefined ) {\n\t\tvar caption = context[0].captionNode;\n\n\t\treturn caption && context.length ?\n\t\t\tcaption.innerHTML : \n\t\t\tnull;\n\t}\n\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\tvar table = $(ctx.nTable);\n\t\tvar caption = $(ctx.captionNode);\n\t\tvar container = $(ctx.nTableWrapper);\n\n\t\t// Create the node if it doesn't exist yet\n\t\tif ( ! caption.length ) {\n\t\t\tcaption = $('<caption/>').html( value );\n\t\t\tctx.captionNode = caption[0];\n\n\t\t\t// If side isn't set, we need to insert into the document to let the\n\t\t\t// CSS decide so we can read it back, otherwise there is no way to\n\t\t\t// know if the CSS would put it top or bottom for scrolling\n\t\t\tif (! side) {\n\t\t\t\ttable.prepend(caption);\n\n\t\t\t\tside = caption.css('caption-side');\n\t\t\t}\n\t\t}\n\n\t\tcaption.html( value );\n\n\t\tif ( side ) {\n\t\t\tcaption.css( 'caption-side', side );\n\t\t\tcaption[0]._captionSide = side;\n\t\t}\n\n\t\tif (container.find('div.dataTables_scroll').length) {\n\t\t\tvar selector = (side === 'top' ? 'Head' : 'Foot');\n\n\t\t\tcontainer.find('div.dataTables_scroll'+ selector +' table').prepend(caption);\n\t\t}\n\t\telse {\n\t\t\ttable.prepend(caption);\n\t\t}\n\t}, 1 );\n} );\n\n_api_register( 'caption.node()', function () {\n\tvar ctx = this.context;\n\n\treturn ctx.length ? ctx[0].captionNode : null;\n} );\n\n\n/**\n * Redraw the tables in the current context.\n */\n_api_register( 'draw()', function ( paging ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( paging === 'page' ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\t\telse {\n\t\t\tif ( typeof paging === 'string' ) {\n\t\t\t\tpaging = paging === 'full-hold' ?\n\t\t\t\t\tfalse :\n\t\t\t\t\ttrue;\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, paging===false );\n\t\t}\n\t} );\n} );\n\n\n\n/**\n * Get the current page index.\n *\n * @return {integer} Current page index (zero based)\n *//**\n * Set the current page.\n *\n * Note that if you attempt to show a page which does not exist, DataTables will\n * not throw an error, but rather reset the paging.\n *\n * @param {integer|string} action The paging action to take. This can be one of:\n *  * `integer` - The page index to jump to\n *  * `string` - An action to take:\n *    * `first` - Jump to first page.\n *    * `next` - Jump to the next page\n *    * `previous` - Jump to previous page\n *    * `last` - Jump to the last page.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page()', function ( action ) {\n\tif ( action === undefined ) {\n\t\treturn this.page.info().page; // not an expensive call\n\t}\n\n\t// else, have an action to take on all tables\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnPageChange( settings, action );\n\t} );\n} );\n\n\n/**\n * Paging information for the first table in the current context.\n *\n * If you require paging information for another table, use the `table()` method\n * with a suitable selector.\n *\n * @return {object} Object with the following properties set:\n *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n *  * `pages` - Total number of pages\n *  * `start` - Display index for the first record shown on the current page\n *  * `end` - Display index for the last record shown on the current page\n *  * `length` - Display length (number of records). Note that generally `start\n *    + length = end`, but this is not always true, for example if there are\n *    only 2 records to show on the final page, with a length of 10.\n *  * `recordsTotal` - Full data set length\n *  * `recordsDisplay` - Data set length once the current filtering criterion\n *    are applied.\n */\n_api_register( 'page.info()', function () {\n\tif ( this.context.length === 0 ) {\n\t\treturn undefined;\n\t}\n\n\tvar\n\t\tsettings   = this.context[0],\n\t\tstart      = settings._iDisplayStart,\n\t\tlen        = settings.oFeatures.bPaginate ? settings._iDisplayLength : -1,\n\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\tall        = len === -1;\n\n\treturn {\n\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\"start\":          start,\n\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\"length\":         len,\n\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\"recordsDisplay\": visRecords,\n\t\t\"serverSide\":     _fnDataSource( settings ) === 'ssp'\n\t};\n} );\n\n\n/**\n * Get the current page length.\n *\n * @return {integer} Current page length. Note `-1` indicates that all records\n *   are to be shown.\n *//**\n * Set the current page length.\n *\n * @param {integer} Page length to set. Use `-1` to show all records.\n * @returns {DataTables.Api} this\n */\n_api_register( 'page.len()', function ( len ) {\n\t// Note that we can't call this function 'length()' because `length`\n\t// is a JavaScript property of functions which defines how many arguments\n\t// the function expects.\n\tif ( len === undefined ) {\n\t\treturn this.context.length !== 0 ?\n\t\t\tthis.context[0]._iDisplayLength :\n\t\t\tundefined;\n\t}\n\n\t// else, set the page length\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnLengthChange( settings, len );\n\t} );\n} );\n\n\n\nvar __reload = function ( settings, holdPosition, callback ) {\n\t// Use the draw event to trigger a callback\n\tif ( callback ) {\n\t\tvar api = new _Api( settings );\n\n\t\tapi.one( 'draw', function () {\n\t\t\tcallback( api.ajax.json() );\n\t\t} );\n\t}\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t_fnReDraw( settings, holdPosition );\n\t}\n\telse {\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t// Cancel an existing request\n\t\tvar xhr = settings.jqXHR;\n\t\tif ( xhr && xhr.readyState !== 4 ) {\n\t\t\txhr.abort();\n\t\t}\n\n\t\t// Trigger xhr\n\t\t_fnBuildAjax( settings, {}, function( json ) {\n\t\t\t_fnClearTable( settings );\n\n\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t}\n\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t\t_fnInitComplete( settings );\n\t\t\t_fnProcessingDisplay( settings, false );\n\t\t} );\n\t}\n};\n\n\n/**\n * Get the JSON response from the last Ajax request that DataTables made to the\n * server. Note that this returns the JSON from the first table in the current\n * context.\n *\n * @return {object} JSON received from the server.\n */\n_api_register( 'ajax.json()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].json;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Get the data submitted in the last Ajax request\n */\n_api_register( 'ajax.params()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length > 0 ) {\n\t\treturn ctx[0].oAjaxData;\n\t}\n\n\t// else return undefined;\n} );\n\n\n/**\n * Reload tables from the Ajax data source. Note that this function will\n * automatically re-draw the table when the remote data has been loaded.\n *\n * @param {boolean} [reset=true] Reset (default) or hold the current paging\n *   position. A full re-sort and re-filter is performed when this method is\n *   called, which is why the pagination reset is the default action.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\treturn this.iterator( 'table', function (settings) {\n\t\t__reload( settings, resetPaging===false, callback );\n\t} );\n} );\n\n\n/**\n * Get the current Ajax URL. Note that this returns the URL from the first\n * table in the current context.\n *\n * @return {string} Current Ajax source URL\n *//**\n * Set the Ajax URL. Note that this will set the URL for all tables in the\n * current context.\n *\n * @param {string} url URL to set.\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url()', function ( url ) {\n\tvar ctx = this.context;\n\n\tif ( url === undefined ) {\n\t\t// get\n\t\tif ( ctx.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\t\tctx = ctx[0];\n\n\t\treturn $.isPlainObject( ctx.ajax ) ?\n\t\t\tctx.ajax.url :\n\t\t\tctx.ajax;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\tsettings.ajax.url = url;\n\t\t}\n\t\telse {\n\t\t\tsettings.ajax = url;\n\t\t}\n\t} );\n} );\n\n\n/**\n * Load data from the newly set Ajax URL. Note that this method is only\n * available when `ajax.url()` is used to set a URL. Additionally, this method\n * has the same effect as calling `ajax.reload()` but is provided for\n * convenience when setting a new URL. Like `ajax.reload()` it will\n * automatically redraw the table once the remote data has been loaded.\n *\n * @returns {DataTables.Api} this\n */\n_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t// Same as a reload, but makes sense to present it for easy access after a\n\t// url change\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\t__reload( ctx, resetPaging===false, callback );\n\t} );\n} );\n\n\n\n\nvar _selector_run = function ( type, selector, selectFn, settings, opts )\n{\n\tvar\n\t\tout = [], res,\n\t\ti, iLen,\n\t\tselectorType = typeof selector;\n\n\t// Can't just check for isArray here, as an API or jQuery instance might be\n\t// given with their array like look\n\tif ( ! selector || selectorType === 'string' || selectorType === 'function' || selector.length === undefined ) {\n\t\tselector = [ selector ];\n\t}\n\n\tfor ( i=0, iLen=selector.length ; i<iLen ; i++ ) {\n\t\tres = selectFn( typeof selector[i] === 'string' ? selector[i].trim() : selector[i] );\n\n\t\t// Remove empty items\n\t\tres = res.filter( function (item) {\n\t\t\treturn item !== null && item !== undefined;\n\t\t});\n\n\t\tif ( res && res.length ) {\n\t\t\tout = out.concat( res );\n\t\t}\n\t}\n\n\t// selector extensions\n\tvar ext = _ext.selector[ type ];\n\tif ( ext.length ) {\n\t\tfor ( i=0, iLen=ext.length ; i<iLen ; i++ ) {\n\t\t\tout = ext[i]( settings, opts, out );\n\t\t}\n\t}\n\n\treturn _unique( out );\n};\n\n\nvar _selector_opts = function ( opts )\n{\n\tif ( ! opts ) {\n\t\topts = {};\n\t}\n\n\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t// than search\n\tif ( opts.filter && opts.search === undefined ) {\n\t\topts.search = opts.filter;\n\t}\n\n\treturn $.extend( {\n\t\tcolumnOrder: 'implied',\n\t\tsearch: 'none',\n\t\torder: 'current',\n\t\tpage: 'all'\n\t}, opts );\n};\n\n\n// Reduce the API instance to the first item found\nvar _selector_first = function ( old )\n{\n\tvar inst = new _Api(old.context[0]);\n\n\t// Use a push rather than passing to the constructor, since it will\n\t// merge arrays down automatically, which isn't what is wanted here\n\tif (old.length) {\n\t\tinst.push( old[0] );\n\t}\n\n\tinst.selector = old.selector;\n\n\t// Limit to a single row / column / cell\n\tif (inst.length && inst[0].length > 1) {\n\t\tinst[0].splice(1);\n\t}\n\n\treturn inst;\n};\n\n\nvar _selector_row_indexes = function ( settings, opts )\n{\n\tvar\n\t\ti, iLen, tmp, a=[],\n\t\tdisplayFiltered = settings.aiDisplay,\n\t\tdisplayMaster = settings.aiDisplayMaster;\n\n\tvar\n\t\tsearch = opts.search,  // none, applied, removed\n\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\tpage   = opts.page;    // all, current\n\n\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t// In server-side processing mode, most options are irrelevant since\n\t\t// rows not shown don't exist and the index order is the applied order\n\t\t// Removed is a special case - for consistency just return an empty\n\t\t// array\n\t\treturn search === 'removed' ?\n\t\t\t[] :\n\t\t\t_range( 0, displayMaster.length );\n\t}\n\n\tif ( page == 'current' ) {\n\t\t// Current page implies that order=current and filter=applied, since it is\n\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t// are\n\t\tfor ( i=settings._iDisplayStart, iLen=settings.fnDisplayEnd() ; i<iLen ; i++ ) {\n\t\t\ta.push( displayFiltered[i] );\n\t\t}\n\t}\n\telse if ( order == 'current' || order == 'applied' ) {\n\t\tif ( search == 'none') {\n\t\t\ta = displayMaster.slice();\n\t\t}\n\t\telse if ( search == 'applied' ) {\n\t\t\ta = displayFiltered.slice();\n\t\t}\n\t\telse if ( search == 'removed' ) {\n\t\t\t// O(n+m) solution by creating a hash map\n\t\t\tvar displayFilteredMap = {};\n\n\t\t\tfor ( i=0, iLen=displayFiltered.length ; i<iLen ; i++ ) {\n\t\t\t\tdisplayFilteredMap[displayFiltered[i]] = null;\n\t\t\t}\n\n\t\t\tdisplayMaster.forEach(function (item) {\n\t\t\t\tif (! Object.prototype.hasOwnProperty.call(displayFilteredMap, item)) {\n\t\t\t\t\ta.push(item);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if ( order == 'index' || order == 'original' ) {\n\t\tfor ( i=0, iLen=settings.aoData.length ; i<iLen ; i++ ) {\n\t\t\tif (! settings.aoData[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( search == 'none' ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t\telse { // applied | removed\n\t\t\t\ttmp = displayFiltered.indexOf(i);\n\n\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t{\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse if ( typeof order === 'number' ) {\n\t\t// Order the rows by the given column\n\t\tvar ordered = _fnSort(settings, order, 'asc');\n\n\t\tif (search === 'none') {\n\t\t\ta = ordered;\n\t\t}\n\t\telse { // applied | removed\n\t\t\tfor (i=0; i<ordered.length; i++) {\n\t\t\t\ttmp = displayFiltered.indexOf(ordered[i]);\n\n\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t(tmp >= 0   && search == 'applied') )\n\t\t\t\t{\n\t\t\t\t\ta.push( ordered[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a;\n};\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Rows\n *\n * {}          - no selector - use all available rows\n * {integer}   - row aoData index\n * {node}      - TR node\n * {string}    - jQuery selector to apply to the TR elements\n * {array}     - jQuery array of nodes, or simply an array of TR nodes\n *\n */\nvar __row_selector = function ( settings, selector, opts )\n{\n\tvar rows;\n\tvar run = function ( sel ) {\n\t\tvar selInt = _intVal( sel );\n\t\tvar aoData = settings.aoData;\n\n\t\t// Short cut - selector is a number and no options provided (default is\n\t\t// all records, so no need to check if the index is in there, since it\n\t\t// must be - dev error if the index doesn't exist).\n\t\tif ( selInt !== null && ! opts ) {\n\t\t\treturn [ selInt ];\n\t\t}\n\n\t\tif ( ! rows ) {\n\t\t\trows = _selector_row_indexes( settings, opts );\n\t\t}\n\n\t\tif ( selInt !== null && rows.indexOf(selInt) !== -1 ) {\n\t\t\t// Selector - integer\n\t\t\treturn [ selInt ];\n\t\t}\n\t\telse if ( sel === null || sel === undefined || sel === '' ) {\n\t\t\t// Selector - none\n\t\t\treturn rows;\n\t\t}\n\n\t\t// Selector - function\n\t\tif ( typeof sel === 'function' ) {\n\t\t\treturn rows.map( function (idx) {\n\t\t\t\tvar row = aoData[ idx ];\n\t\t\t\treturn sel( idx, row._aData, row.nTr ) ? idx : null;\n\t\t\t} );\n\t\t}\n\n\t\t// Selector - node\n\t\tif ( sel.nodeName ) {\n\t\t\tvar rowIdx = sel._DT_RowIndex;  // Property added by DT for fast lookup\n\t\t\tvar cellIdx = sel._DT_CellIndex;\n\n\t\t\tif ( rowIdx !== undefined ) {\n\t\t\t\t// Make sure that the row is actually still present in the table\n\t\t\t\treturn aoData[ rowIdx ] && aoData[ rowIdx ].nTr === sel ?\n\t\t\t\t\t[ rowIdx ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse if ( cellIdx ) {\n\t\t\t\treturn aoData[ cellIdx.row ] && aoData[ cellIdx.row ].nTr === sel.parentNode ?\n\t\t\t\t\t[ cellIdx.row ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar host = $(sel).closest('*[data-dt-row]');\n\t\t\t\treturn host.length ?\n\t\t\t\t\t[ host.data('dt-row') ] :\n\t\t\t\t\t[];\n\t\t\t}\n\t\t}\n\n\t\t// ID selector. Want to always be able to select rows by id, regardless\n\t\t// of if the tr element has been created or not, so can't rely upon\n\t\t// jQuery here - hence a custom implementation. This does not match\n\t\t// Sizzle's fast selector or HTML4 - in HTML5 the ID can be anything,\n\t\t// but to select it using a CSS selector engine (like Sizzle or\n\t\t// querySelect) it would need to need to be escaped for some characters.\n\t\t// DataTables simplifies this for row selectors since you can select\n\t\t// only a row. A # indicates an id any anything that follows is the id -\n\t\t// unescaped.\n\t\tif ( typeof sel === 'string' && sel.charAt(0) === '#' ) {\n\t\t\t// get row index from id\n\t\t\tvar rowObj = settings.aIds[ sel.replace( /^#/, '' ) ];\n\t\t\tif ( rowObj !== undefined ) {\n\t\t\t\treturn [ rowObj.idx ];\n\t\t\t}\n\n\t\t\t// need to fall through to jQuery in case there is DOM id that\n\t\t\t// matches\n\t\t}\n\t\t\n\t\t// Get nodes in the order from the `rows` array with null values removed\n\t\tvar nodes = _removeEmpty(\n\t\t\t_pluck_order( settings.aoData, rows, 'nTr' )\n\t\t);\n\n\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t// it also allows arrays, so this will cope with all three options\n\t\treturn $(nodes)\n\t\t\t.filter( sel )\n\t\t\t.map( function () {\n\t\t\t\treturn this._DT_RowIndex;\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\n\tvar matched = _selector_run( 'row', selector, run, settings, opts );\n\n\tif (opts.order === 'current' || opts.order === 'applied') {\n\t\t_fnSortDisplay(settings, matched);\n\t}\n\n\treturn matched;\n};\n\n\n_api_register( 'rows()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __row_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in __row_selector?\n\tinst.selector.rows = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_register( 'rows().nodes()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn settings.aoData[ row ].nTr || undefined;\n\t}, 1 );\n} );\n\n_api_register( 'rows().data()', function () {\n\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\tvar r = settings.aoData[ row ];\n\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t_fnInvalidate( settings, row, src );\n\t} );\n} );\n\n_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\treturn this.iterator( 'row', function ( settings, row ) {\n\t\treturn row;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'rows().ids()', 'row().id()', function ( hash ) {\n\tvar a = [];\n\tvar context = this.context;\n\n\t// `iterator` will drop undefined values, but in this case we want them\n\tfor ( var i=0, iLen=context.length ; i<iLen ; i++ ) {\n\t\tfor ( var j=0, jen=this[i].length ; j<jen ; j++ ) {\n\t\t\tvar id = context[i].rowIdFn( context[i].aoData[ this[i][j] ]._aData );\n\t\t\ta.push( (hash === true ? '#' : '' )+ id );\n\t\t}\n\t}\n\n\treturn new _Api( context, a );\n} );\n\n_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\tthis.iterator( 'row', function ( settings, row ) {\n\t\tvar data = settings.aoData;\n\t\tvar rowData = data[ row ];\n\n\t\t// Delete from the display arrays\n\t\tvar idx = settings.aiDisplayMaster.indexOf(row);\n\t\tif (idx !== -1) {\n\t\t\tsettings.aiDisplayMaster.splice(idx, 1);\n\t\t}\n\n\t\t// For server-side processing tables - subtract the deleted row from the count\n\t\tif ( settings._iRecordsDisplay > 0 ) {\n\t\t\tsettings._iRecordsDisplay--;\n\t\t}\n\n\t\t// Check for an 'overflow' they case for displaying the table\n\t\t_fnLengthOverflow( settings );\n\n\t\t// Remove the row's ID reference if there is one\n\t\tvar id = settings.rowIdFn( rowData._aData );\n\t\tif ( id !== undefined ) {\n\t\t\tdelete settings.aIds[ id ];\n\t\t}\n\n\t\tdata[row] = null;\n\t} );\n\n\treturn this;\n} );\n\n\n_api_register( 'rows.add()', function ( rows ) {\n\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\tvar row, i, iLen;\n\t\t\tvar out = [];\n\n\t\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn out;\n\t\t}, 1 );\n\n\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\tvar modRows = this.rows( -1 );\n\tmodRows.pop();\n\t_fnArrayApply(modRows, newRows);\n\n\treturn modRows;\n} );\n\n\n\n\n\n/**\n *\n */\n_api_register( 'row()', function ( selector, opts ) {\n\treturn _selector_first( this.rows( selector, opts ) );\n} );\n\n\n_api_register( 'row().data()', function ( data ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && this.length && this[0].length ?\n\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\tvar row = ctx[0].aoData[ this[0] ];\n\trow._aData = data;\n\n\t// If the DOM has an id, and the data source is an array\n\tif ( Array.isArray( data ) && row.nTr && row.nTr.id ) {\n\t\t_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );\n\t}\n\n\t// Automatically invalidate\n\t_fnInvalidate( ctx[0], this[0], 'data' );\n\n\treturn this;\n} );\n\n\n_api_register( 'row().node()', function () {\n\tvar ctx = this.context;\n\n\tif (ctx.length && this.length && this[0].length) {\n\t\tvar row = ctx[0].aoData[ this[0] ];\n\n\t\tif (row && row.nTr) {\n\t\t\treturn row.nTr;\n\t\t}\n\t}\n\n\treturn null;\n} );\n\n\n_api_register( 'row.add()', function ( row ) {\n\t// Allow a jQuery object to be passed in - only a single row is added from\n\t// it though - the first element in the set\n\tif ( row instanceof $ && row.length ) {\n\t\trow = row[0];\n\t}\n\n\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t}\n\t\treturn _fnAddData( settings, row );\n\t} );\n\n\t// Return an Api.rows() extended instance, with the newly added row selected\n\treturn this.row( rows[0] );\n} );\n\n\n$(document).on('plugin-init.dt', function (e, context) {\n\tvar api = new _Api( context );\n\n\tapi.on( 'stateSaveParams.DT', function ( e, settings, d ) {\n\t\t// This could be more compact with the API, but it is a lot faster as a simple\n\t\t// internal loop\n\t\tvar idFn = settings.rowIdFn;\n\t\tvar rows = settings.aiDisplayMaster;\n\t\tvar ids = [];\n\n\t\tfor (var i=0 ; i<rows.length ; i++) {\n\t\t\tvar rowIdx = rows[i];\n\t\t\tvar data = settings.aoData[rowIdx];\n\n\t\t\tif (data._detailsShow) {\n\t\t\t\tids.push( '#' + idFn(data._aData) );\n\t\t\t}\n\t\t}\n\n\t\td.childRows = ids;\n\t});\n\n\t// For future state loads (e.g. with StateRestore)\n\tapi.on( 'stateLoaded.DT', function (e, settings, state) {\n\t\t__details_state_load( api, state );\n\t});\n\n\t// And the initial load state\n\t__details_state_load( api, api.state.loaded() );\n});\n\nvar __details_state_load = function (api, state)\n{\n\tif ( state && state.childRows ) {\n\t\tapi\n\t\t\t.rows( state.childRows.map(function (id) {\n\t\t\t\t// Escape any `:` characters from the row id. Accounts for\n\t\t\t\t// already escaped characters.\n\t\t\t\treturn id.replace(/([^:\\\\]*(?:\\\\.[^:\\\\]*)*):/g, \"$1\\\\:\");\n\t\t\t}) )\n\t\t\t.every( function () {\n\t\t\t\t_fnCallbackFire( api.settings()[0], null, 'requestChild', [ this ] )\n\t\t\t});\n\t}\n}\n\nvar __details_add = function ( ctx, row, data, klass )\n{\n\t// Convert to array of TR elements\n\tvar rows = [];\n\tvar addRow = function ( r, k ) {\n\t\t// Recursion to allow for arrays of jQuery objects\n\t\tif ( Array.isArray( r ) || r instanceof $ ) {\n\t\t\tfor ( var i=0, iLen=r.length ; i<iLen ; i++ ) {\n\t\t\t\taddRow( r[i], k );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// If we get a TR element, then just add it directly - up to the dev\n\t\t// to add the correct number of columns etc\n\t\tif ( r.nodeName && r.nodeName.toLowerCase() === 'tr' ) {\n\t\t\tr.setAttribute( 'data-dt-row', row.idx );\n\t\t\trows.push( r );\n\t\t}\n\t\telse {\n\t\t\t// Otherwise create a row with a wrapper\n\t\t\tvar created = $('<tr><td></td></tr>')\n\t\t\t\t.attr( 'data-dt-row', row.idx )\n\t\t\t\t.addClass( k );\n\t\t\t\n\t\t\t$('td', created)\n\t\t\t\t.addClass( k )\n\t\t\t\t.html( r )[0].colSpan = _fnVisibleColumns( ctx );\n\n\t\t\trows.push( created[0] );\n\t\t}\n\t};\n\n\taddRow( data, klass );\n\n\tif ( row._details ) {\n\t\trow._details.detach();\n\t}\n\n\trow._details = $(rows);\n\n\t// If the children were already shown, that state should be retained\n\tif ( row._detailsShow ) {\n\t\trow._details.insertAfter( row.nTr );\n\t}\n};\n\n\n// Make state saving of child row details async to allow them to be batch processed\nvar __details_state = DataTable.util.throttle(\n\tfunction (ctx) {\n\t\t_fnSaveState( ctx[0] )\n\t},\n\t500\n);\n\n\nvar __details_remove = function ( api, idx )\n{\n\tvar ctx = api.context;\n\n\tif ( ctx.length ) {\n\t\tvar row = ctx[0].aoData[ idx !== undefined ? idx : api[0] ];\n\n\t\tif ( row && row._details ) {\n\t\t\trow._details.detach();\n\n\t\t\trow._detailsShow = undefined;\n\t\t\trow._details = undefined;\n\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_display = function ( api, show ) {\n\tvar ctx = api.context;\n\n\tif ( ctx.length && api.length ) {\n\t\tvar row = ctx[0].aoData[ api[0] ];\n\n\t\tif ( row._details ) {\n\t\t\trow._detailsShow = show;\n\n\t\t\tif ( show ) {\n\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t$( row.nTr ).addClass( 'dt-hasChild' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\trow._details.detach();\n\t\t\t\t$( row.nTr ).removeClass( 'dt-hasChild' );\n\t\t\t}\n\n\t\t\t_fnCallbackFire( ctx[0], null, 'childRow', [ show, api.row( api[0] ) ] )\n\n\t\t\t__details_events( ctx[0] );\n\t\t\t__details_state( ctx );\n\t\t}\n\t}\n};\n\n\nvar __details_events = function ( settings )\n{\n\tvar api = new _Api( settings );\n\tvar namespace = '.dt.DT_details';\n\tvar drawEvent = 'draw'+namespace;\n\tvar colvisEvent = 'column-sizing'+namespace;\n\tvar destroyEvent = 'destroy'+namespace;\n\tvar data = settings.aoData;\n\n\tapi.off( drawEvent +' '+ colvisEvent +' '+ destroyEvent );\n\n\tif ( _pluck( data, '_details' ).length > 0 ) {\n\t\t// On each draw, insert the required elements into the document\n\t\tapi.on( drawEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tapi.rows( {page:'current'} ).eq(0).each( function (idx) {\n\t\t\t\t// Internal data grab\n\t\t\t\tvar row = data[ idx ];\n\n\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// Column visibility change - update the colspan\n\t\tapi.on( colvisEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t// a colspan)\n\t\t\tvar row, visible = _fnVisibleColumns( ctx );\n\n\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\trow = data[i];\n\n\t\t\t\tif ( row && row._details ) {\n\t\t\t\t\trow._details.each(function () {\n\t\t\t\t\t\tvar el = $(this).children('td');\n\n\t\t\t\t\t\tif (el.length == 1) {\n\t\t\t\t\t\t\tel.attr('colspan', visible);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Table destroyed - nuke any child rows\n\t\tapi.on( destroyEvent, function ( e, ctx ) {\n\t\t\tif ( settings !== ctx ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor ( var i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\t\tif ( data[i] && data[i]._details ) {\n\t\t\t\t\t__details_remove( api, i );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n};\n\n// Strings for the method names to help minification\nvar _emp = '';\nvar _child_obj = _emp+'row().child';\nvar _child_mth = _child_obj+'()';\n\n// data can be:\n//  tr\n//  string\n//  jQuery or array of any of the above\n_api_register( _child_mth, function ( data, klass ) {\n\tvar ctx = this.context;\n\n\tif ( data === undefined ) {\n\t\t// get\n\t\treturn ctx.length && this.length && ctx[0].aoData[ this[0] ]\n\t\t\t? ctx[0].aoData[ this[0] ]._details\n\t\t\t: undefined;\n\t}\n\telse if ( data === true ) {\n\t\t// show\n\t\tthis.child.show();\n\t}\n\telse if ( data === false ) {\n\t\t// remove\n\t\t__details_remove( this );\n\t}\n\telse if ( ctx.length && this.length ) {\n\t\t// set\n\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t}\n\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.show()',\n\t_child_mth+'.show()' // only when `child()` was called with parameters (without\n], function () {         // it returns an object and this method is not executed)\n\t__details_display( this, true );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.hide()',\n\t_child_mth+'.hide()' // only when `child()` was called with parameters (without\n], function () {         // it returns an object and this method is not executed)\n\t__details_display( this, false );\n\treturn this;\n} );\n\n\n_api_register( [\n\t_child_obj+'.remove()',\n\t_child_mth+'.remove()' // only when `child()` was called with parameters (without\n], function () {           // it returns an object and this method is not executed)\n\t__details_remove( this );\n\treturn this;\n} );\n\n\n_api_register( _child_obj+'.isShown()', function () {\n\tvar ctx = this.context;\n\n\tif ( ctx.length && this.length && ctx[0].aoData[ this[0] ] ) {\n\t\t// _detailsShown as false or undefined will fall through to return false\n\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t}\n\treturn false;\n} );\n\n\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Columns\n *\n * {integer}           - column index (>=0 count from left, <0 count from right)\n * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n * \"{string}:name\"     - column name\n * \"{string}\"          - jQuery selector on column header nodes\n *\n */\n\n// can be an array of these items, comma separated list, or an array of comma\n// separated lists\n\nvar __re_column_selector = /^([^:]+)?:(name|title|visIdx|visible)$/;\n\n\n// r1 and r2 are redundant - but it means that the parameters match for the\n// iterator callback in columns().data()\nvar __columnData = function ( settings, column, r1, r2, rows, type ) {\n\tvar a = [];\n\tfor ( var row=0, iLen=rows.length ; row<iLen ; row++ ) {\n\t\ta.push( _fnGetCellData( settings, rows[row], column, type ) );\n\t}\n\treturn a;\n};\n\n\nvar __column_header = function ( settings, column, row ) {\n\tvar header = settings.aoHeader;\n\tvar titleRow = settings.titleRow;\n\tvar target = null;\n\n\tif (row !== undefined) {\n\t\ttarget = row;\n\t}\n\telse if (titleRow === true) { // legacy orderCellsTop support\n\t\ttarget = 0;\n\t}\n\telse if (titleRow === false) {\n\t\ttarget = header.length - 1;\n\t}\n\telse if (titleRow !== null) {\n\t\ttarget = titleRow;\n\t}\n\telse {\n\t\t// Automatic - find the _last_ unique cell from the top that is not empty (last for\n\t\t// backwards compatibility)\n\t\tfor (var i=0 ; i<header.length ; i++) {\n\t\t\tif (header[i][column].unique && $('.dt-column-title', header[i][column].cell).text()) {\n\t\t\t\ttarget = i;\n\t\t\t}\n\t\t}\n\n\t\tif (target === null) {\n\t\t\ttarget = 0;\n\t\t}\n\t}\n\n\treturn header[target][column].cell;\n};\n\nvar __column_header_cells = function (header) {\n\tvar out = [];\n\n\tfor (var i=0 ; i<header.length ; i++) {\n\t\tfor (var j=0 ; j<header[i].length ; j++) {\n\t\t\tvar cell = header[i][j].cell;\n\n\t\t\tif (!out.includes(cell)) {\n\t\t\t\tout.push(cell);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn out;\n}\n\nvar __column_selector = function ( settings, selector, opts )\n{\n\tvar\n\t\tcolumns = settings.aoColumns,\n\t\tnames, titles,\n\t\tnodes = __column_header_cells(settings.aoHeader);\n\t\n\tvar run = function ( s ) {\n\t\tvar selInt = _intVal( s );\n\n\t\t// Selector - all\n\t\tif ( s === '' ) {\n\t\t\treturn _range( columns.length );\n\t\t}\n\n\t\t// Selector - index\n\t\tif ( selInt !== null ) {\n\t\t\treturn [ selInt >= 0 ?\n\t\t\t\tselInt : // Count from left\n\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t];\n\t\t}\n\n\t\t// Selector = function\n\t\tif ( typeof s === 'function' ) {\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\n\t\t\treturn columns.map(function (col, idx) {\n\t\t\t\treturn s(\n\t\t\t\t\t\tidx,\n\t\t\t\t\t\t__columnData( settings, idx, 0, 0, rows ),\n\t\t\t\t\t\t__column_header( settings, idx )\n\t\t\t\t\t) ? idx : null;\n\t\t\t});\n\t\t}\n\n\t\t// jQuery or string selector\n\t\tvar match = typeof s === 'string' ?\n\t\t\ts.match( __re_column_selector ) :\n\t\t\t'';\n\n\t\tif ( match ) {\n\t\t\tswitch( match[2] ) {\n\t\t\t\tcase 'visIdx':\n\t\t\t\tcase 'visible':\n\t\t\t\t\t// Selector is a column index\n\t\t\t\t\tif (match[1] && match[1].match(/^\\d+$/)) {\n\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\n\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\tvar visColumns = columns.map( function (col,i) {\n\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn columns.map( function (col, idx) {\n\t\t\t\t\t\t// Not visible, can't match\n\t\t\t\t\t\tif (! col.bVisible) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (col.responsiveVisible === false) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Selector\n\t\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\t\treturn $(nodes[idx]).filter(match[1]).length > 0 ? idx : null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// `:visible` on its own\n\t\t\t\t\t\treturn idx;\n\t\t\t\t\t} );\n\n\t\t\t\tcase 'name':\n\t\t\t\t\t// Don't get names, unless needed, and only get once if it is\n\t\t\t\t\tif (!names) {\n\t\t\t\t\t\tnames = _pluck( columns, 'sName' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\treturn names.map( function (name, i) {\n\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t} );\n\n\t\t\t\tcase 'title':\n\t\t\t\t\tif (!titles) {\n\t\t\t\t\t\ttitles = _pluck( columns, 'sTitle' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// match by column title\n\t\t\t\t\treturn titles.map( function (title, i) {\n\t\t\t\t\t\treturn title === match[1] ? i : null;\n\t\t\t\t\t} );\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\t// Cell in the table body\n\t\tif ( s.nodeName && s._DT_CellIndex ) {\n\t\t\treturn [ s._DT_CellIndex.column ];\n\t\t}\n\n\t\t// jQuery selector on the TH elements for the columns\n\t\tvar jqResult = $( nodes )\n\t\t\t.filter( s )\n\t\t\t.map( function () {\n\t\t\t\treturn _fnColumnsFromHeader( this ); // `nodes` is column index complete and in order\n\t\t\t} )\n\t\t\t.toArray()\n\t\t\t.sort(function (a, b) {\n\t\t\t\treturn a - b;\n\t\t\t});\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise a node which might have a `dt-column` data attribute, or be\n\t\t// a child or such an element\n\t\tvar host = $(s).closest('*[data-dt-column]');\n\t\treturn host.length ?\n\t\t\t[ host.data('dt-column') ] :\n\t\t\t[];\n\t};\n\n\tvar selected = _selector_run( 'column', selector, run, settings, opts );\n\n\treturn opts.columnOrder && opts.columnOrder === 'index'\n\t\t? selected.sort(function (a, b) { return a - b; })\n\t\t: selected; // implied\n};\n\n\nvar __setColumnVis = function ( settings, column, vis ) {\n\tvar\n\t\tcols = settings.aoColumns,\n\t\tcol  = cols[ column ],\n\t\tdata = settings.aoData,\n\t\tcells, i, iLen, tr;\n\n\t// Get\n\tif ( vis === undefined ) {\n\t\treturn col.bVisible;\n\t}\n\n\t// Set\n\t// No change\n\tif ( col.bVisible === vis ) {\n\t\treturn false;\n\t}\n\n\tif ( vis ) {\n\t\t// Insert column\n\t\t// Need to decide if we should use appendChild or insertBefore\n\t\tvar insertBefore = _pluck(cols, 'bVisible').indexOf(true, column+1);\n\n\t\tfor ( i=0, iLen=data.length ; i<iLen ; i++ ) {\n\t\t\tif (data[i]) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t// Remove column\n\t\t$( _pluck( settings.aoData, 'anCells', column ) ).detach();\n\t}\n\n\t// Common actions\n\tcol.bVisible = vis;\n\n\t_colGroup(settings);\n\t\n\treturn true;\n};\n\n\n_api_register( 'columns()', function ( selector, opts ) {\n\t// argument shifting\n\tif ( selector === undefined ) {\n\t\tselector = '';\n\t}\n\telse if ( $.isPlainObject( selector ) ) {\n\t\topts = selector;\n\t\tselector = '';\n\t}\n\n\topts = _selector_opts( opts );\n\n\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\treturn __column_selector( settings, selector, opts );\n\t}, 1 );\n\n\t// Want argument shifting here and in _row_selector?\n\tinst.selector.cols = selector;\n\tinst.selector.opts = opts;\n\n\treturn inst;\n} );\n\n_api_registerPlural( 'columns().header()', 'column().header()', function ( row ) {\n\treturn this.iterator( 'column', function (settings, column) {\n\t\treturn __column_header(settings, column, row);\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().footer()', 'column().footer()', function ( row ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\tvar footer = settings.aoFooter;\n\n\t\tif (! footer.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn settings.aoFooter[row !== undefined ? row : 0][column].cell;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\treturn this.iterator( 'column-rows', __columnData, 1 );\n} );\n\n_api_registerPlural( 'columns().render()', 'column().render()', function ( type ) {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn __columnData( settings, column, i, j, rows, type );\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().dataSrc()', 'column().dataSrc()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].mData;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t);\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().init()', 'column().init()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column];\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().names()', 'column().name()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn settings.aoColumns[column].sName;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().titles()', 'column().title()', function (title, row) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t// Argument shifting\n\t\tif (typeof title === 'number') {\n\t\t\trow = title;\n\t\t\ttitle = undefined;\n\t\t}\n\n\t\tvar span = $('.dt-column-title', this.column(column).header(row));\n\n\t\tif (title !== undefined) {\n\t\t\tspan.html(title);\n\t\t\treturn this;\n\t\t}\n\n\t\treturn span.html();\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().types()', 'column().type()', function () {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\tvar colObj = settings.aoColumns[column]\n\t\tvar type = colObj.sType;\n\n\t\t// If the type was invalidated, then resolve it. This actually does\n\t\t// all columns at the moment. Would only happen once if getting all\n\t\t// column's data types.\n\t\tif (! type) {\n\t\t\t_fnColumnTypes(settings);\n\n\t\t\ttype = colObj.sType;\n\t\t}\n\n\t\treturn type;\n\t}, 1 );\n} );\n\n_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis, calc ) {\n\tvar that = this;\n\tvar changed = [];\n\tvar ret = this.iterator( 'column', function ( settings, column ) {\n\t\tif ( vis === undefined ) {\n\t\t\treturn settings.aoColumns[ column ].bVisible;\n\t\t} // else\n\t\t\n\t\tif (__setColumnVis( settings, column, vis )) {\n\t\t\tchanged.push(column);\n\t\t}\n\t} );\n\n\t// Group the column visibility changes\n\tif ( vis !== undefined ) {\n\t\tthis.iterator( 'table', function ( settings ) {\n\t\t\t// Redraw the header after changes\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\t\n\t\t\t// Update colspan for no records display. Child rows and extensions will use their own\n\t\t\t// listeners to do this - only need to update the empty table item here\n\t\t\tif ( ! settings.aiDisplay.length ) {\n\t\t\t\t$(settings.nTBody).find('td[colspan]').attr('colspan', _fnVisibleColumns(settings));\n\t\t\t}\n\t\n\t\t\t_fnSaveState( settings );\n\n\t\t\t// Second loop once the first is done for events\n\t\t\tthat.iterator( 'column', function ( settings, column ) {\n\t\t\t\tif (changed.includes(column)) {\n\t\t\t\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis, calc] );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif ( changed.length && (calc === undefined || calc) ) {\n\t\t\t\tthat.columns.adjust();\n\t\t\t}\n\t\t});\n\t}\n\n\treturn ret;\n} );\n\n_api_registerPlural( 'columns().widths()', 'column().width()', function () {\n\t// Injects a fake row into the table for just a moment so the widths can\n\t// be read, regardless of colspan in the header and rows being present in\n\t// the body\n\tvar columns = this.columns(':visible').count();\n\tvar row = $('<tr>').html('<td>' + Array(columns).join('</td><td>') + '</td>');\n\n\t$(this.table().body()).append(row);\n\n\tvar widths = row.children().map(function () {\n\t\treturn $(this).outerWidth();\n\t});\n\n\trow.remove();\n\t\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\tvar visIdx = _fnColumnIndexToVisible( settings, column );\n\n\t\treturn visIdx !== null ? widths[visIdx] : 0;\n\t}, 1);\n} );\n\n_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\treturn this.iterator( 'column', function ( settings, column ) {\n\t\treturn type === 'visible' ?\n\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\tcolumn;\n\t}, 1 );\n} );\n\n_api_register( 'columns.adjust()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t// Force a column sizing to happen with a manual call - otherwise it can skip\n\t\t// if the size hasn't changed\n\t\tsettings.containerWidth = -1;\n\n\t\t_fnAdjustColumnSizing( settings );\n\t}, 1 );\n} );\n\n_api_register( 'column.index()', function ( type, idx ) {\n\tif ( this.context.length !== 0 ) {\n\t\tvar ctx = this.context[0];\n\n\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t}\n\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t}\n\t}\n} );\n\n_api_register( 'column()', function ( selector, opts ) {\n\treturn _selector_first( this.columns( selector, opts ) );\n} );\n\nvar __cell_selector = function ( settings, selector, opts )\n{\n\tvar data = settings.aoData;\n\tvar rows = _selector_row_indexes( settings, opts );\n\tvar cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );\n\tvar allCells = $(_flatten( [], cells ));\n\tvar row;\n\tvar columns = settings.aoColumns.length;\n\tvar a, i, iLen, j, o, host;\n\n\tvar run = function ( s ) {\n\t\tvar fnSelector = typeof s === 'function';\n\n\t\tif ( s === null || s === undefined || fnSelector ) {\n\t\t\t// All cells and function selectors\n\t\t\ta = [];\n\n\t\t\tfor ( i=0, iLen=rows.length ; i<iLen ; i++ ) {\n\t\t\t\trow = rows[i];\n\n\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\to = {\n\t\t\t\t\t\trow: row,\n\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( fnSelector ) {\n\t\t\t\t\t\t// Selector - function\n\t\t\t\t\t\thost = data[ row ];\n\n\t\t\t\t\t\tif ( s( o, _fnGetCellData(settings, row, j), host.anCells ? host.anCells[j] : null ) ) {\n\t\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Selector - all\n\t\t\t\t\t\ta.push( o );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a;\n\t\t}\n\t\t\n\t\t// Selector - index\n\t\tif ( $.isPlainObject( s ) ) {\n\t\t\t// Valid cell index and its in the array of selectable rows\n\t\t\treturn s.column !== undefined && s.row !== undefined && rows.indexOf(s.row) !== -1 ?\n\t\t\t\t[s] :\n\t\t\t\t[];\n\t\t}\n\n\t\t// Selector - jQuery filtered cells\n\t\tvar jqResult = allCells\n\t\t\t.filter( s )\n\t\t\t.map( function (i, el) {\n\t\t\t\treturn { // use a new object, in case someone changes the values\n\t\t\t\t\trow:    el._DT_CellIndex.row,\n\t\t\t\t\tcolumn: el._DT_CellIndex.column\n\t\t\t\t};\n\t\t\t} )\n\t\t\t.toArray();\n\n\t\tif ( jqResult.length || ! s.nodeName ) {\n\t\t\treturn jqResult;\n\t\t}\n\n\t\t// Otherwise the selector is a node, and there is one last option - the\n\t\t// element might be a child of an element which has dt-row and dt-column\n\t\t// data attributes\n\t\thost = $(s).closest('*[data-dt-row]');\n\t\treturn host.length ?\n\t\t\t[ {\n\t\t\t\trow: host.data('dt-row'),\n\t\t\t\tcolumn: host.data('dt-column')\n\t\t\t} ] :\n\t\t\t[];\n\t};\n\n\treturn _selector_run( 'cell', selector, run, settings, opts );\n};\n\n\n\n\n_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t// Argument shifting\n\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t// Indexes\n\t\tif ( rowSelector.row === undefined ) {\n\t\t\t// Selector options in first parameter\n\t\t\topts = rowSelector;\n\t\t\trowSelector = null;\n\t\t}\n\t\telse {\n\t\t\t// Cell index objects in first parameter\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\t}\n\tif ( $.isPlainObject( columnSelector ) ) {\n\t\topts = columnSelector;\n\t\tcolumnSelector = null;\n\t}\n\n\t// Cell selector\n\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t} );\n\t}\n\n\t// The default built in options need to apply to row and columns\n\tvar internalOpts = opts ? {\n\t\tpage: opts.page,\n\t\torder: opts.order,\n\t\tsearch: opts.search\n\t} : {};\n\n\t// Row + column selector\n\tvar columns = this.columns( columnSelector, internalOpts );\n\tvar rows = this.rows( rowSelector, internalOpts );\n\tvar i, iLen, j, jen;\n\n\tvar cellsNoOpts = this.iterator( 'table', function ( settings, idx ) {\n\t\tvar a = [];\n\n\t\tfor ( i=0, iLen=rows[idx].length ; i<iLen ; i++ ) {\n\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\ta.push( {\n\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn a;\n\t}, 1 );\n\n\t// There is currently only one extension which uses a cell selector extension\n\t// It is a _major_ performance drag to run this if it isn't needed, so this is\n\t// an extension specific check at the moment\n\tvar cells = opts && opts.selected ?\n\t\tthis.cells( cellsNoOpts, opts ) :\n\t\tcellsNoOpts;\n\n\t$.extend( cells.selector, {\n\t\tcols: columnSelector,\n\t\trows: rowSelector,\n\t\topts: opts\n\t} );\n\n\treturn cells;\n} );\n\n\n_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\tvar data = settings.aoData[ row ];\n\n\t\treturn data && data.anCells ?\n\t\t\tdata.anCells[ column ] :\n\t\t\tundefined;\n\t}, 1 );\n} );\n\n\n_api_register( 'cells().data()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn settings.aoData[ row ][ type ][ column ];\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().render()', 'cell().render()', function ( type ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn _fnGetCellData( settings, row, column, type );\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\treturn {\n\t\t\trow: row,\n\t\t\tcolumn: column,\n\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t};\n\t}, 1 );\n} );\n\n\n_api_registerPlural( 'cells().invalidate()', 'cell().invalidate()', function ( src ) {\n\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t_fnInvalidate( settings, row, src, column );\n\t} );\n} );\n\n\n\n_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n} );\n\n\n_api_register( 'cell().data()', function ( data ) {\n\tvar ctx = this.context;\n\tvar cell = this[0];\n\n\tif ( data === undefined ) {\n\t\t// Get\n\t\treturn ctx.length && cell.length ?\n\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\tundefined;\n\t}\n\n\t// Set\n\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t_fnInvalidate( ctx[0], cell[0].row, 'data', cell[0].column );\n\n\treturn this;\n} );\n\n\n\n/**\n * Get current ordering (sorting) that has been applied to the table.\n *\n * @returns {array} 2D array containing the sorting information for the first\n *   table in the current context. Each element in the parent array represents\n *   a column being sorted upon (i.e. multi-sorting with two columns would have\n *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n *   the column index that the sorting condition applies to, the second is the\n *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n *   index of the sorting order from the `column.sorting` initialisation array.\n *//**\n * Set the ordering for the table.\n *\n * @param {integer} order Column index to sort upon.\n * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 1D array of sorting information to be applied.\n * @param {array} [...] Optional additional sorting conditions\n * @returns {DataTables.Api} this\n *//**\n * Set the ordering for the table.\n *\n * @param {array} order 2D array of sorting information to be applied.\n * @returns {DataTables.Api} this\n */\n_api_register( 'order()', function ( order, dir ) {\n\tvar ctx = this.context;\n\tvar args = Array.prototype.slice.call( arguments );\n\n\tif ( order === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].aaSorting :\n\t\t\tundefined;\n\t}\n\n\t// set\n\tif ( typeof order === 'number' ) {\n\t\t// Simple column / direction passed in\n\t\torder = [ [ order, dir ] ];\n\t}\n\telse if ( args.length > 1 ) {\n\t\t// Arguments passed in (list of 1D arrays)\n\t\torder = args;\n\t}\n\t// otherwise a 2D array was passed in\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tvar resolved = [];\n\t\t_fnSortResolve(settings, resolved, order);\n\n\t\tsettings.aaSorting = resolved;\n\t} );\n} );\n\n\n/**\n * Attach a sort listener to an element for a given column\n *\n * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n *   listener to. This can take the form of a single DOM node, a jQuery\n *   collection of nodes or a jQuery selector which will identify the node(s).\n * @param {integer} column the column that a click on this node will sort on\n * @param {function} [callback] callback function when sort is run\n * @returns {DataTables.Api} this\n */\n_api_register( 'order.listener()', function ( node, column, callback ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSortAttachListener(settings, node, {}, column, callback);\n\t} );\n} );\n\n\n_api_register( 'order.fixed()', function ( set ) {\n\tif ( ! set ) {\n\t\tvar ctx = this.context;\n\t\tvar fixed = ctx.length ?\n\t\t\tctx[0].aaSortingFixed :\n\t\t\tundefined;\n\n\t\treturn Array.isArray( fixed ) ?\n\t\t\t{ pre: fixed } :\n\t\t\tfixed;\n\t}\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tsettings.aaSortingFixed = $.extend( true, {}, set );\n\t} );\n} );\n\n\n// Order by the selected column(s)\n_api_register( [\n\t'columns().order()',\n\t'column().order()'\n], function ( dir ) {\n\tvar that = this;\n\n\tif ( ! dir ) {\n\t\treturn this.iterator( 'column', function ( settings, idx ) {\n\t\t\tvar sort = _fnSortFlatten( settings );\n\n\t\t\tfor ( var i=0, iLen=sort.length ; i<iLen ; i++ ) {\n\t\t\t\tif ( sort[i].col === idx ) {\n\t\t\t\t\treturn sort[i].dir;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}, 1 );\n\t}\n\telse {\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tsettings.aaSorting = that[i].map( function (col) {\n\t\t\t\treturn [ col, dir ];\n\t\t\t} );\n\t\t} );\n\t}\n} );\n\n_api_registerPlural('columns().orderable()', 'column().orderable()', function ( directions ) {\n\treturn this.iterator( 'column', function ( settings, idx ) {\n\t\tvar col = settings.aoColumns[idx];\n\n\t\treturn directions ?\n\t\t\tcol.asSorting :\n\t\t\tcol.bSortable;\n\t}, 1 );\n} );\n\n\n_api_register( 'processing()', function ( show ) {\n\treturn this.iterator( 'table', function ( ctx ) {\n\t\t_fnProcessingDisplay( ctx, show );\n\t} );\n} );\n\n\n_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\tvar ctx = this.context;\n\n\tif ( input === undefined ) {\n\t\t// get\n\t\treturn ctx.length !== 0 ?\n\t\t\tctx[0].oPreviousSearch.search :\n\t\t\tundefined;\n\t}\n\n\t// set\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof regex === 'object') {\n\t\t\t// New style options to pass to the search builder\n\t\t\t_fnFilterComplete( settings, $.extend( settings.oPreviousSearch, regex, {\n\t\t\t\tsearch: input\n\t\t\t} ) );\n\t\t}\n\t\telse {\n\t\t\t// Compat for the old options\n\t\t\t_fnFilterComplete( settings, $.extend( settings.oPreviousSearch, {\n\t\t\t\tsearch: input,\n\t\t\t\tregex:  regex === null ? false : regex,\n\t\t\t\tsmart:  smart === null ? true  : smart,\n\t\t\t\tcaseInsensitive: caseInsen === null ? true : caseInsen\n\t\t\t} ) );\n\t\t}\n\t} );\n} );\n\n_api_register( 'search.fixed()', function ( name, search ) {\n\tvar ret = this.iterator( true, 'table', function ( settings ) {\n\t\tvar fixed = settings.searchFixed;\n\n\t\tif (! name) {\n\t\t\treturn Object.keys(fixed);\n\t\t}\n\t\telse if (search === undefined) {\n\t\t\treturn fixed[name];\n\t\t}\n\t\telse if (search === null) {\n\t\t\tdelete fixed[name];\n\t\t}\n\t\telse {\n\t\t\tfixed[name] = search;\n\t\t}\n\n\t\treturn this;\n\t} );\n\n\treturn name !== undefined && search === undefined\n\t\t? ret[0]\n\t\t: ret;\n} );\n\n_api_registerPlural(\n\t'columns().search()',\n\t'column().search()',\n\tfunction ( input, regex, smart, caseInsen ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar preSearch = settings.aoPreSearchCols;\n\n\t\t\tif ( input === undefined ) {\n\t\t\t\t// get\n\t\t\t\treturn preSearch[ column ].search;\n\t\t\t}\n\n\t\t\t// set\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof regex === 'object') {\n\t\t\t\t// New style options to pass to the search builder\n\t\t\t\t$.extend( preSearch[ column ], regex, {\n\t\t\t\t\tsearch: input\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Old style (with not all options available)\n\t\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\tsearch: input,\n\t\t\t\t\tregex:  regex === null ? false : regex,\n\t\t\t\t\tsmart:  smart === null ? true  : smart,\n\t\t\t\t\tcaseInsensitive: caseInsen === null ? true : caseInsen\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t} );\n\t}\n);\n\n_api_register([\n\t\t'columns().search.fixed()',\n\t\t'column().search.fixed()'\n\t],\n\tfunction ( name, search ) {\n\t\tvar ret = this.iterator( true, 'column', function ( settings, colIdx ) {\n\t\t\tvar fixed = settings.aoColumns[colIdx].searchFixed;\n\n\t\t\tif (! name) {\n\t\t\t\treturn Object.keys(fixed);\n\t\t\t}\n\t\t\telse if (search === undefined) {\n\t\t\t\treturn fixed[name] || null;\n\t\t\t}\n\t\t\telse if (search === null) {\n\t\t\t\tdelete fixed[name];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfixed[name] = search;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t} );\n\n\t\treturn name !== undefined && search === undefined\n\t\t\t? ret[0]\n\t\t\t: ret;\n\t}\n);\n/*\n * State API methods\n */\n\n_api_register( 'state()', function ( set, ignoreTime ) {\n\t// getter\n\tif ( ! set ) {\n\t\treturn this.context.length ?\n\t\t\tthis.context[0].oSavedState :\n\t\t\tnull;\n\t}\n\n\tvar setMutate = $.extend( true, {}, set );\n\n\t// setter\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tif ( ignoreTime !== false ) {\n\t\t\tsetMutate.time = +new Date() + 100;\n\t\t}\n\n\t\t_fnImplementState( settings, setMutate, function(){} );\n\t} );\n} );\n\n\n_api_register( 'state.clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t// Save an empty object\n\t\tsettings.fnStateSaveCallback.call( settings.oInstance, settings, {} );\n\t} );\n} );\n\n\n_api_register( 'state.loaded()', function () {\n\treturn this.context.length ?\n\t\tthis.context[0].oLoadedState :\n\t\tnull;\n} );\n\n\n_api_register( 'state.save()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnSaveState( settings );\n\t} );\n} );\n\n// Can be assigned in DateTable.use() - note luxon and moment vars are in helpers.js\nvar __bootstrap;\nvar __foundation;\n\n/**\n * Set the libraries that DataTables uses, or the global objects.\n * Note that the arguments can be either way around (legacy support)\n * and the second is optional. See docs.\n */\nDataTable.use = function (arg1, arg2) {\n\t// Reverse arguments for legacy support\n\tvar module = typeof arg1 === 'string'\n\t\t? arg2\n\t\t: arg1;\n\tvar type = typeof arg2 === 'string'\n\t\t? arg2\n\t\t: arg1;\n\n\t// Getter\n\tif (module === undefined && typeof type === 'string') {\n\t\tswitch (type) {\n\t\t\tcase 'lib':\n\t\t\tcase 'jq':\n\t\t\t\treturn $;\n\n\t\t\tcase 'win':\n\t\t\t\treturn window;\n\n\t\t\tcase 'datetime':\n\t\t\t\treturn DataTable.DateTime;\n\n\t\t\tcase 'luxon':\n\t\t\t\treturn __luxon;\n\n\t\t\tcase 'moment':\n\t\t\t\treturn __moment;\n\n\t\t\tcase 'bootstrap':\n\t\t\t\t// Use local if set, otherwise try window, which could be undefined\n\t\t\t\treturn __bootstrap || window.bootstrap;\n\n\t\t\tcase 'foundation':\n\t\t\t\t// Ditto\n\t\t\t\treturn __foundation || window.Foundation;\n\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Setter\n\tif (type === 'lib' || type === 'jq' || (module && module.fn && module.fn.jquery)) {\n\t\t$ = module;\n\t}\n\telse if (type === 'win' || (module && module.document)) {\n\t\twindow = module;\n\t\tdocument = module.document;\n\t}\n\telse if (type === 'datetime' || (module && module.type === 'DateTime')) {\n\t\tDataTable.DateTime = module;\n\t}\n\telse if (type === 'luxon' || (module && module.FixedOffsetZone)) {\n\t\t__luxon = module;\n\t}\n\telse if (type === 'moment' || (module && module.isMoment)) {\n\t\t__moment = module;\n\t}\n\telse if (type === 'bootstrap' || (module && module.Modal && module.Modal.NAME === 'modal'))\n\t{\n\t\t// This is currently for BS5 only. BS3/4 attach to jQuery, so no need to use `.use()`\n\t\t__bootstrap = module;\n\t}\n\telse if (type === 'foundation' || (module && module.Reveal)) {\n\t\t__foundation = module;\n\t}\n}\n\n/**\n * CommonJS factory function pass through. This will check if the arguments\n * given are a window object or a jQuery object. If so they are set\n * accordingly.\n * @param {*} root Window\n * @param {*} jq jQUery\n * @returns {boolean} Indicator\n */\nDataTable.factory = function (root, jq) {\n\tvar is = false;\n\n\t// Test if the first parameter is a window object\n\tif (root && root.document) {\n\t\twindow = root;\n\t\tdocument = root.document;\n\t}\n\n\t// Test if the second parameter is a jQuery object\n\tif (jq && jq.fn && jq.fn.jquery) {\n\t\t$ = jq;\n\t\tis = true;\n\t}\n\n\treturn is;\n}\n\n/**\n * Provide a common method for plug-ins to check the version of DataTables being\n * used, in order to ensure compatibility.\n *\n *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n *  @param {string} [version2=current DataTables version] As above, but optional.\n *   If not given the current DataTables version will be used.\n *  @returns {boolean} true if this version of DataTables is greater or equal to\n *    the required version, or false if this version of DataTales is not\n *    suitable\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n */\nDataTable.versionCheck = function( version, version2 )\n{\n\tvar aThis = version2 ?\n\t\tversion2.split('.') :\n\t\tDataTable.version.split('.');\n\tvar aThat = version.split('.');\n\tvar iThis, iThat;\n\n\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\n\t\t// Parts are the same, keep comparing\n\t\tif (iThis === iThat) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Parts are different, return immediately\n\t\treturn iThis > iThat;\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Check if a `<table>` node is a DataTable table already or not.\n *\n *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n *      selector for the table to test. Note that if more than more than one\n *      table is passed on, only the first will be checked\n *  @returns {boolean} true the table given is a DataTable, or false otherwise\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n *      $('#example').dataTable();\n *    }\n */\nDataTable.isDataTable = function ( table )\n{\n\tvar t = $(table).get(0);\n\tvar is = false;\n\n\tif ( table instanceof DataTable.Api ) {\n\t\treturn true;\n\t}\n\n\t$.each( DataTable.settings, function (i, o) {\n\t\tvar head = o.nScrollHead ? $('table', o.nScrollHead)[0] : null;\n\t\tvar foot = o.nScrollFoot ? $('table', o.nScrollFoot)[0] : null;\n\n\t\tif ( o.nTable === t || head === t || foot === t ) {\n\t\t\tis = true;\n\t\t}\n\t} );\n\n\treturn is;\n};\n\n\n/**\n * Get all DataTable tables that have been initialised - optionally you can\n * select to get only currently visible tables.\n *\n *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n *    or visible tables only.\n *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n *    DataTables\n *  @static\n *  @dtopt API-Static\n *\n *  @example\n *    $.each( $.fn.dataTable.tables(true), function () {\n *      $(table).DataTable().columns.adjust();\n *    } );\n */\nDataTable.tables = function ( visible )\n{\n\tvar api = false;\n\n\tif ( $.isPlainObject( visible ) ) {\n\t\tapi = visible.api;\n\t\tvisible = visible.visible;\n\t}\n\n\tvar a = DataTable.settings\n\t\t.filter( function (o) {\n\t\t\treturn !visible || (visible && $(o.nTable).is(':visible')) \n\t\t\t\t? true\n\t\t\t\t: false;\n\t\t} )\n\t\t.map( function (o) {\n\t\t\treturn o.nTable;\n\t\t});\n\n\treturn api ?\n\t\tnew _Api( a ) :\n\t\ta;\n};\n\n\n/**\n * Convert from camel case parameters to Hungarian notation. This is made public\n * for the extensions to provide the same ability as DataTables core to accept\n * either the 1.9 style Hungarian notation, or the 1.10+ style camelCase\n * parameters.\n *\n *  @param {object} src The model object which holds all parameters that can be\n *    mapped.\n *  @param {object} user The object to convert from camel case to Hungarian.\n *  @param {boolean} force When set to `true`, properties which already have a\n *    Hungarian value in the `user` object will be overwritten. Otherwise they\n *    won't be.\n */\nDataTable.camelToHungarian = _fnCamelToHungarian;\n\n\n\n/**\n *\n */\n_api_register( '$()', function ( selector, opts ) {\n\tvar\n\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\tjqRows = $(rows);\n\n\treturn $( [].concat(\n\t\tjqRows.filter( selector ).toArray(),\n\t\tjqRows.find( selector ).toArray()\n\t) );\n} );\n\n\n// jQuery functions to operate on the tables\n$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\tvar args = Array.prototype.slice.call(arguments);\n\n\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\targs[0] = args[0].split( /\\s/ ).map( function ( e ) {\n\t\t\treturn ! e.match(/\\.dt\\b/) ?\n\t\t\t\te+'.dt' :\n\t\t\t\te;\n\t\t\t} ).join( ' ' );\n\n\t\tvar inst = $( this.tables().nodes() );\n\t\tinst[key].apply( inst, args );\n\t\treturn this;\n\t} );\n} );\n\n\n_api_register( 'clear()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnClearTable( settings );\n\t} );\n} );\n\n\n_api_register( 'error()', function (msg) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\t_fnLog( settings, 0, msg );\n\t} );\n} );\n\n\n_api_register( 'settings()', function () {\n\treturn new _Api( this.context, this.context );\n} );\n\n\n_api_register( 'init()', function () {\n\tvar ctx = this.context;\n\treturn ctx.length ? ctx[0].oInit : null;\n} );\n\n\n_api_register( 'data()', function () {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t} ).flatten();\n} );\n\n\n_api_register( 'trigger()', function ( name, args, bubbles ) {\n\treturn this.iterator( 'table', function ( settings ) {\n\t\treturn _fnCallbackFire( settings, null, name, args, bubbles );\n\t} ).flatten();\n} );\n\n\n_api_register( 'ready()', function ( fn ) {\n\tvar ctx = this.context;\n\n\t// Get status of first table\n\tif (! fn) {\n\t\treturn ctx.length\n\t\t\t? (ctx[0]._bInitComplete || false)\n\t\t\t: null;\n\t}\n\n\t// Function to run either once the table becomes ready or\n\t// immediately if it is already ready.\n\treturn this.tables().every(function () {\n\t\tvar api = this;\n\n\t\tif (this.context[0]._bInitComplete) {\n\t\t\tfn.call(api);\n\t\t}\n\t\telse {\n\t\t\tthis.on('init.dt.DT', function () {\n\t\t\t\tfn.call(api);\n\t\t\t});\n\t\t}\n\t} );\n} );\n\n\n_api_register( 'destroy()', function ( remove ) {\n\tremove = remove || false;\n\n\treturn this.iterator( 'table', function ( settings ) {\n\t\tvar classes   = settings.oClasses;\n\t\tvar table     = settings.nTable;\n\t\tvar tbody     = settings.nTBody;\n\t\tvar thead     = settings.nTHead;\n\t\tvar tfoot     = settings.nTFoot;\n\t\tvar jqTable   = $(table);\n\t\tvar jqTbody   = $(tbody);\n\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\tvar rows      = settings.aoData.map( function (r) { return r ? r.nTr : null; } );\n\t\tvar orderClasses = classes.order;\n\n\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t// should be taken\n\t\tsettings.bDestroying = true;\n\n\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings], true );\n\n\t\t// If not being removed from the document, make all columns visible\n\t\tif ( ! remove ) {\n\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t}\n\n\t\t// Container width change listener\n\t\tif (settings.resizeObserver) {\n\t\t\tsettings.resizeObserver.disconnect();\n\t\t}\n\n\t\t// Blitz all `DT` namespaced events (these are internal events, the\n\t\t// lowercase, `dt` events are user subscribed and they are responsible\n\t\t// for removing them\n\t\tjqWrapper.off('.DT').find(':not(tbody *)').off('.DT');\n\t\t$(window).off('.DT-'+settings.sInstance);\n\n\t\t// When scrolling we had to break the table up - restore it\n\t\tif ( table != thead.parentNode ) {\n\t\t\tjqTable.children('thead').detach();\n\t\t\tjqTable.append( thead );\n\t\t}\n\n\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\tjqTable.children('tfoot').detach();\n\t\t\tjqTable.append( tfoot );\n\t\t}\n\n\t\t// Clean up the header / footer\n\t\tcleanHeader(thead, 'header');\n\t\tcleanHeader(tfoot, 'footer');\n\t\tsettings.colgroup.remove();\n\n\t\tsettings.aaSorting = [];\n\t\tsettings.aaSortingFixed = [];\n\t\t_fnSortingClasses( settings );\n\n\t\t$(jqTable).find('th, td').removeClass(\n\t\t\t$.map(DataTable.ext.type.className, function (v) {\n\t\t\t\treturn v;\n\t\t\t}).join(' ')\n\t\t);\n\n\t\t$('th, td', thead)\n\t\t\t.removeClass(\n\t\t\t\torderClasses.none + ' ' +\n\t\t\t\torderClasses.canAsc + ' ' +\n\t\t\t\torderClasses.canDesc + ' ' +\n\t\t\t\torderClasses.isAsc + ' ' +\n\t\t\t\torderClasses.isDesc\n\t\t\t)\n\t\t\t.css('width', '')\n\t\t\t.removeAttr('aria-sort');\n\n\t\t// Add the TR elements back into the table in their original order\n\t\tjqTbody.children().detach();\n\t\tjqTbody.append( rows );\n\n\t\tvar orig = settings.nTableWrapper.parentNode;\n\t\tvar insertBefore = settings.nTableWrapper.nextSibling;\n\n\t\t// Remove the DataTables generated nodes, events and classes\n\t\tvar removedMethod = remove ? 'remove' : 'detach';\n\t\tjqTable[ removedMethod ]();\n\t\tjqWrapper[ removedMethod ]();\n\n\t\t// If we need to reattach the table to the document\n\t\tif ( ! remove && orig ) {\n\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\torig.insertBefore( table, insertBefore );\n\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.table );\n\t\t}\n\n\t\t/* Remove the settings object from the settings array */\n\t\tvar idx = DataTable.settings.indexOf(settings);\n\t\tif ( idx !== -1 ) {\n\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t}\n\t} );\n} );\n\n\n// Add the `every()` method for rows, columns and cells in a compact form\n$.each( [ 'column', 'row', 'cell' ], function ( i, type ) {\n\t_api_register( type+'s().every()', function ( fn ) {\n\t\tvar opts = this.selector.opts;\n\t\tvar api = this;\n\t\tvar inst;\n\t\tvar counter = 0;\n\n\t\treturn this.iterator( 'every', function ( settings, selectedIdx, tableIdx ) {\n\t\t\tinst = api[ type ](selectedIdx, opts);\n\n\t\t\tif (type === 'cell') {\n\t\t\t\tfn.call(inst, inst[0][0].row, inst[0][0].column, tableIdx, counter);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfn.call(inst, selectedIdx, tableIdx, counter);\n\t\t\t}\n\n\t\t\tcounter++;\n\t\t} );\n\t} );\n} );\n\n\n// i18n method for extensions to be able to use the language object from the\n// DataTable\n_api_register( 'i18n()', function ( token, def, plural ) {\n\tvar ctx = this.context[0];\n\tvar resolved = _fnGetObjectDataFn( token )( ctx.oLanguage );\n\n\tif ( resolved === undefined ) {\n\t\tresolved = def;\n\t}\n\n\tif ( $.isPlainObject( resolved ) ) {\n\t\tresolved = plural !== undefined && resolved[ plural ] !== undefined\n\t\t\t? resolved[ plural ]\n\t\t\t: plural === false\n\t\t\t\t? resolved\n\t\t\t\t: resolved._;\n\t}\n\n\treturn typeof resolved === 'string'\n\t\t? resolved.replace( '%d', plural ) // nb: plural might be undefined,\n\t\t: resolved;\n} );\n\n// Needed for header and footer, so pulled into its own function\nfunction cleanHeader(node, className) {\n\t$(node).find('.dt-column-order').remove();\n\t$(node).find('.dt-column-title').each(function () {\n\t\tvar title = $(this).html();\n\t\t$(this).parent().parent().append(title);\n\t\t$(this).remove();\n\t});\n\t$(node).find('div.dt-column-' + className).remove();\n\n\t$('th, td', node).removeAttr('data-dt-column');\n}\n\n/**\n * Version string for plug-ins to check compatibility. Allowed format is\n * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n * only for non-release builds. See https://semver.org/ for more information.\n *  @member\n *  @type string\n *  @default Version number\n */\nDataTable.version = \"2.3.8\";\n\n/**\n * Private data store, containing all of the settings objects that are\n * created for the tables on a given page.\n *\n * Note that the `DataTable.settings` object is aliased to\n * `jQuery.fn.dataTableExt` through which it may be accessed and\n * manipulated, or `jQuery.fn.dataTable.settings`.\n *  @member\n *  @type array\n *  @default []\n *  @private\n */\nDataTable.settings = [];\n\n/**\n * Object models container, for the various models that DataTables has\n * available to it. These models define the objects that are used to hold\n * the active state and configuration of the table.\n *  @namespace\n */\nDataTable.models = {};\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * search information for the global filter and individual column filters.\n *  @namespace\n */\nDataTable.models.oSearch = {\n\t/**\n\t * Flag to whether or not the filtering should be case-insensitive\n\t */\n\t\"caseInsensitive\": true,\n\n\t/**\n\t * Applied search term\n\t */\n\t\"search\": \"\",\n\n\t/**\n\t * Flag to indicate if the search term should be interpreted as a\n\t * regular expression (true) or not (false) and therefore and special\n\t * regex characters escaped.\n\t */\n\t\"regex\": false,\n\n\t/**\n\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t */\n\t\"smart\": true,\n\n\t/**\n\t * Flag to indicate if DataTables should only trigger a search when\n\t * the return key is pressed.\n\t */\n\t\"return\": false\n};\n\n\n\n\n/**\n * Template object for the way in which DataTables holds information about\n * each individual row. This is the object format used for the settings\n * aoData array.\n *  @namespace\n */\nDataTable.models.oRow = {\n\t/**\n\t * TR element for the row\n\t */\n\t\"nTr\": null,\n\n\t/**\n\t * Array of TD elements for each row. This is null until the row has been\n\t * created.\n\t */\n\t\"anCells\": null,\n\n\t/**\n\t * Data object from the original data source for the row. This is either\n\t * an array if using the traditional form of DataTables, or an object if\n\t * using mData options. The exact type will depend on the passed in\n\t * data from the data source, or will be an array if using DOM a data\n\t * source.\n\t */\n\t\"_aData\": [],\n\n\t/**\n\t * Sorting data cache - this array is ostensibly the same length as the\n\t * number of columns (although each index is generated only as it is\n\t * needed), and holds the data that is used for sorting each column in the\n\t * row. We do this cache generation at the start of the sort in order that\n\t * the formatting of the sort data need be done only once for each cell\n\t * per sort. This array should not be read from or written to by anything\n\t * other than the master sorting methods.\n\t */\n\t\"_aSortData\": null,\n\n\t/**\n\t * Per cell filtering data cache. As per the sort data cache, used to\n\t * increase the performance of the filtering in DataTables\n\t */\n\t\"_aFilterData\": null,\n\n\t/**\n\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t * in this case a string rather than an array. This is easily computed with\n\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t * needed on every search (memory traded for performance)\n\t */\n\t\"_sFilterRow\": null,\n\n\t/**\n\t * Denote if the original data source was from the DOM, or the data source\n\t * object. This is used for invalidating data, so DataTables can\n\t * automatically read data from the original source, unless uninstructed\n\t * otherwise.\n\t */\n\t\"src\": null,\n\n\t/**\n\t * Index in the aoData array. This saves an indexOf lookup when we have the\n\t * object, but want to know the index\n\t */\n\t\"idx\": -1,\n\n\t/**\n\t * Cached display value\n\t */\n\tdisplayData: null\n};\n\n\n/**\n * Template object for the column information object in DataTables. This object\n * is held in the settings aoColumns array and contains all the information that\n * DataTables needs about each individual column.\n *\n * Note that this object is related to {@link DataTable.defaults.column}\n * but this one is the internal data store for DataTables's cache of columns.\n * It should NOT be manipulated outside of DataTables. Any configuration should\n * be done through the initialisation options.\n *  @namespace\n */\nDataTable.models.oColumn = {\n\t/**\n\t * Column index.\n\t */\n\t\"idx\": null,\n\n\t/**\n\t * A list of the columns that sorting should occur on when this column\n\t * is sorted. That this property is an array allows multi-column sorting\n\t * to be defined for a column (for example first name / last name columns\n\t * would benefit from this). The values are integers pointing to the\n\t * columns to be sorted on (typically it will be a single integer pointing\n\t * at itself, but that doesn't need to be the case).\n\t */\n\t\"aDataSort\": null,\n\n\t/**\n\t * Define the sorting directions that are applied to the column, in sequence\n\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t * as the sorting direction when the column if first sorted (clicked on).\n\t * Sort it again (click again) and it will move on to the next index.\n\t * Repeat until loop.\n\t */\n\t\"asSorting\": null,\n\n\t/**\n\t * Flag to indicate if the column is searchable, and thus should be included\n\t * in the filtering or not.\n\t */\n\t\"bSearchable\": null,\n\n\t/**\n\t * Flag to indicate if the column is sortable or not.\n\t */\n\t\"bSortable\": null,\n\n\t/**\n\t * Flag to indicate if the column is currently visible in the table or not\n\t */\n\t\"bVisible\": null,\n\n\t/**\n\t * Store for manual type assignment using the `column.type` option. This\n\t * is held in store so we can manipulate the column's `sType` property.\n\t */\n\t\"_sManualType\": null,\n\n\t/**\n\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t * source for filtering or sorting. True is either are.\n\t */\n\t\"_bAttrSrc\": false,\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t */\n\t\"fnCreatedCell\": null,\n\n\t/**\n\t * Function to get data from a cell in a column. You should <b>never</b>\n\t * access data directly through _aData internally in DataTables - always use\n\t * the method attached to this property. It allows mData to function as\n\t * required. This function is automatically assigned by the column\n\t * initialisation method\n\t */\n\t\"fnGetData\": null,\n\n\t/**\n\t * Function to set data for a cell in the column. You should <b>never</b>\n\t * set the data directly to _aData internally in DataTables - always use\n\t * this method. It allows mData to function as required. This function\n\t * is automatically assigned by the column initialisation method\n\t */\n\t\"fnSetData\": null,\n\n\t/**\n\t * Property to read the value for the cells in the column from the data\n\t * source array / object. If null, then the default content is used, if a\n\t * function is given then the return from the function is used.\n\t */\n\t\"mData\": null,\n\n\t/**\n\t * Partner property to mData which is used (only when defined) to get\n\t * the data - i.e. it is basically the same as mData, but without the\n\t * 'set' option, and also the data fed to it is the result from mData.\n\t * This is the rendering method to match the data method of mData.\n\t */\n\t\"mRender\": null,\n\n\t/**\n\t * The class to apply to all TD elements in the table's TBODY for the column\n\t */\n\t\"sClass\": null,\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t */\n\t\"sContentPadding\": null,\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because mData\n\t * is set to null, or because the data source itself is null).\n\t */\n\t\"sDefaultContent\": null,\n\n\t/**\n\t * Name for the column, allowing reference to the column by name as well as\n\t * by index (needs a lookup to work by name).\n\t */\n\t\"sName\": null,\n\n\t/**\n\t * Custom sorting data type - defines which of the available plug-ins in\n\t * afnSortData the custom sorting will use - if any is defined.\n\t */\n\t\"sSortDataType\": 'std',\n\n\t/**\n\t * Class to be applied to the header element when sorting on this column\n\t */\n\t\"sSortingClass\": null,\n\n\t/**\n\t * Title of the column - what is seen in the TH element (nTh).\n\t */\n\t\"sTitle\": null,\n\n\t/**\n\t * Column sorting and filtering type\n\t */\n\t\"sType\": null,\n\n\t/**\n\t * Width of the column\n\t */\n\t\"sWidth\": null,\n\n\t/**\n\t * Width of the column when it was first \"encountered\"\n\t */\n\t\"sWidthOrig\": null,\n\n\t/** Cached longest strings from a column */\n\twideStrings: null,\n\n\t/**\n\t * Store for named searches\n\t */\n\tsearchFixed: null\n};\n\n\n/*\n * Developer note: The properties of the object below are given in Hungarian\n * notation, that was used as the interface for DataTables prior to v1.10, however\n * from v1.10 onwards the primary interface is camel case. In order to avoid\n * breaking backwards compatibility utterly with this change, the Hungarian\n * version is still, internally the primary interface, but is is not documented\n * - hence the @name tags in each doc comment. This allows a JavaScript function\n * to create a map from Hungarian notation to camel case (going the other direction\n * would require each property to be listed, which would add around 3K to the size\n * of DataTables, while this method is about a 0.5K hit).\n *\n * Ultimately this does pave the way for Hungarian notation to be dropped\n * completely, but that is a massive amount of work and will break current\n * installs (therefore is on-hold until v2).\n */\n\n/**\n * Initialisation options that can be given to DataTables at initialisation\n * time.\n *  @namespace\n */\nDataTable.defaults = {\n\t/**\n\t * An array of data to use for the table, passed in at initialisation which\n\t * will be used in preference to any data which is already in the DOM. This is\n\t * particularly useful for constructing tables purely in JavaScript, for\n\t * example with a custom Ajax call.\n\t */\n\t\"aaData\": null,\n\n\n\t/**\n\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t * initialisation. You can define which column(s) the sort is performed\n\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t * should contain an array for each column to be sorted initially containing\n\t * the column's index and a direction string ('asc' or 'desc').\n\t */\n\t\"aaSorting\": [[0,'asc']],\n\n\n\t/**\n\t * This parameter is basically identical to the `sorting` parameter, but\n\t * cannot be overridden by user interaction with the table. What this means\n\t * is that you could have a column (visible or hidden) which the sorting\n\t * will always be forced on first - any sorting after that (from the user)\n\t * will then be performed as required. This can be useful for grouping rows\n\t * together.\n\t */\n\t\"aaSortingFixed\": [],\n\n\n\t/**\n\t * DataTables can be instructed to load data to display in the table from a\n\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t *\n\t * The `ajax` property has three different modes of operation, depending on\n\t * how it is defined. These are:\n\t *\n\t * * `string` - Set the URL from where the data should be loaded from.\n\t * * `object` - Define properties for `jQuery.ajax`.\n\t * * `function` - Custom data get function\n\t *\n\t * `string`\n\t * --------\n\t *\n\t * As a string, the `ajax` property simply defines the URL from which\n\t * DataTables will load data.\n\t *\n\t * `object`\n\t * --------\n\t *\n\t * As an object, the parameters in the object are passed to\n\t * [jQuery.ajax](https://api.jquery.com/jQuery.ajax/) allowing fine control\n\t * of the Ajax request. DataTables has a number of default parameters which\n\t * you can override using this option. Please refer to the jQuery\n\t * documentation for a full description of the options available, although\n\t * the following parameters provide additional options in DataTables or\n\t * require special consideration:\n\t *\n\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t *   can also be used as a function to manipulate the data DataTables sends\n\t *   to the server. The function takes a single parameter, an object of\n\t *   parameters with the values that DataTables has readied for sending. An\n\t *   object may be returned which will be merged into the DataTables\n\t *   defaults, or you can add the items to the object that was passed in and\n\t *   not return anything from the function. This supersedes `fnServerParams`\n\t *   from DataTables 1.9-.\n\t *\n\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t *   from an Ajax source or for server-side processing - this parameter\n\t *   allows that property to be changed. You can use JavaScript dotted\n\t *   object notation to get a data source for multiple levels of nesting, or\n\t *   it my be used as a function. As a function it takes a single parameter,\n\t *   the JSON returned from the server, which can be manipulated as\n\t *   required, with the returned value being that used by DataTables as the\n\t *   data source for the table.\n\t *\n\t * * `success` - Should not be overridden it is used internally in\n\t *   DataTables. To manipulate / transform the data returned by the server\n\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t *\n\t * `function`\n\t * ----------\n\t *\n\t * As a function, making the Ajax call is left up to yourself allowing\n\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t * than Ajax could be used to obtain the required data, such as Web storage\n\t * or an AIR database.\n\t *\n\t * The function is given four parameters and no return is required. The\n\t * parameters are:\n\t *\n\t * 1. _object_ - Data to send to the server\n\t * 2. _function_ - Callback function that must be executed when the required\n\t *    data has been obtained. That data should be passed into the callback\n\t *    as the only parameter\n\t * 3. _object_ - DataTables settings object for the table\n\t */\n\t\"ajax\": null,\n\n\n\t/**\n\t * This parameter allows you to readily specify the entries in the length drop\n\t * down menu that DataTables shows when pagination is enabled. It can be\n\t * either a 1D array of options which will be used for both the displayed\n\t * option and the value, or a 2D array which will use the array in the first\n\t * position as the value, and the array in the second position as the\n\t * displayed options (useful for language strings such as 'All').\n\t *\n\t * Note that the `pageLength` property will be automatically set to the\n\t * first value given in this array, unless `pageLength` is also provided.\n\t */\n\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\n\n\t/**\n\t * The `columns` option in the initialisation parameter allows you to define\n\t * details about the way individual columns behave. For a full list of\n\t * column options that can be set, please see\n\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t * define your columns, you must have an entry in the array for every single\n\t * column that you have in your table (these can be null if you don't which\n\t * to specify any options).\n\t */\n\t\"aoColumns\": null,\n\n\t/**\n\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t * column, multiple columns, or all columns, using the `targets` property of\n\t * each object in the array. This allows great flexibility when creating\n\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t * columns you specifically want. `columnDefs` may use any of the column\n\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t * have `targets` defined in each object in the array. Values in the `targets`\n\t * array may be:\n\t *   <ul>\n\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t *     <li>a negative integer - column index counting from the right</li>\n\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t *   </ul>\n\t */\n\t\"aoColumnDefs\": null,\n\n\n\t/**\n\t * Basically the same as `search`, this parameter defines the individual column\n\t * filtering state at initialisation time. The array must be of the same size\n\t * as the number of columns, and each element be an object with the parameters\n\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t * accepted and the default will be used.\n\t */\n\t\"aoSearchCols\": [],\n\n\n\t/**\n\t * Enable or disable automatic column width calculation. This can be disabled\n\t * as an optimisation (it takes some time to calculate the widths) if the\n\t * tables widths are passed in using `columns`.\n\t */\n\t\"bAutoWidth\": true,\n\n\n\t/**\n\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t * are using an Ajax or JS data source for the table. This option, when set to\n\t * true, will cause DataTables to defer the creation of the table elements for\n\t * each row until they are needed for a draw - saving a significant amount of\n\t * time.\n\t */\n\t\"bDeferRender\": true,\n\n\n\t/**\n\t * Replace a DataTable which matches the given selector and replace it with\n\t * one which has the properties of the new initialisation object passed. If no\n\t * table matches the selector, then the new DataTable will be constructed as\n\t * per normal.\n\t */\n\t\"bDestroy\": false,\n\n\n\t/**\n\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t * that it allows the end user to input multiple words (space separated) and\n\t * will match a row containing those words, even if not in the order that was\n\t * specified (this allow matching across multiple columns). Note that if you\n\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t * default filtering input box and retain filtering abilities, please use\n\t * {@link DataTable.defaults.dom}.\n\t */\n\t\"bFilter\": true,\n\n\t/**\n\t * Used only for compatibility with DT1\n\t * @deprecated\n\t */\n\t\"bInfo\": true,\n\n\t/**\n\t * Used only for compatibility with DT1\n\t * @deprecated\n\t */\n\t\"bLengthChange\": true,\n\n\t/**\n\t * Enable or disable pagination.\n\t */\n\t\"bPaginate\": true,\n\n\n\t/**\n\t * Enable or disable the display of a 'processing' indicator when the table is\n\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t * large amounts of data where it can take a noticeable amount of time to sort\n\t * the entries.\n\t */\n\t\"bProcessing\": false,\n\n\n\t/**\n\t * Retrieve the DataTables object for the given selector. Note that if the\n\t * table has already been initialised, this parameter will cause DataTables\n\t * to simply return the object that has already been set up - it will not take\n\t * account of any changes you might have made to the initialisation object\n\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t * you need.\n\t */\n\t\"bRetrieve\": false,\n\n\n\t/**\n\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t * the table's viewport to the given height at all times (useful for layout).\n\t * However, this can look odd when filtering data down to a small data set,\n\t * and the footer is left \"floating\" further down. This parameter (when\n\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t * the result set will fit within the given Y height.\n\t */\n\t\"bScrollCollapse\": false,\n\n\n\t/**\n\t * Configure DataTables to use server-side processing. Note that the\n\t * `ajax` parameter must also be given in order to give DataTables a\n\t * source to obtain the required data for each draw.\n\t */\n\t\"bServerSide\": false,\n\n\n\t/**\n\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t * disabled by the `sortable` option for each column.\n\t */\n\t\"bSort\": true,\n\n\n\t/**\n\t * Enable or display DataTables' ability to sort multiple columns at the\n\t * same time (activated by shift-click by the user).\n\t */\n\t\"bSortMulti\": true,\n\n\n\t/**\n\t * Allows control over whether DataTables should use the top (true) unique\n\t * cell that is found for a single column, or the bottom (false - default).\n\t * This is useful when using complex headers.\n\t */\n\t\"bSortCellsTop\": null,\n\n\n\t/** Specify which row is the title row in the header. Replacement for bSortCellsTop */\n\ttitleRow: null,\n\n\n\t/**\n\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t * presented as a feature switch as it can increase processing time (while\n\t * classes are removed and added) so for large data sets you might want to\n\t * turn this off.\n\t */\n\t\"bSortClasses\": true,\n\n\n\t/**\n\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t * used to save table display information such as pagination information,\n\t * display length, filtering and sorting. As such when the end user reloads\n\t * the page the display will match what thy had previously set up.\n\t */\n\t\"bStateSave\": false,\n\n\n\t/**\n\t * This function is called when a TR element is created (and all TD child\n\t * elements have been inserted), or registered if using a DOM source, allowing\n\t * manipulation of the TR element (adding classes etc).\n\t */\n\t\"fnCreatedRow\": null,\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify any aspect you want about the created DOM.\n\t */\n\t\"fnDrawCallback\": null,\n\n\n\t/**\n\t * Identical to fnHeaderCallback() but for the table footer this function\n\t * allows you to modify the table footer on every 'draw' event.\n\t */\n\t\"fnFooterCallback\": null,\n\n\n\t/**\n\t * When rendering large numbers in the information element for the table\n\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t * function will override the default method DataTables uses.\n\t */\n\t\"fnFormatNumber\": function ( toFormat ) {\n\t\treturn toFormat.toString().replace(\n\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\tthis.oLanguage.sThousands\n\t\t);\n\t},\n\n\n\t/**\n\t * This function is called on every 'draw' event, and allows you to\n\t * dynamically modify the header row. This can be used to calculate and\n\t * display useful information about the table.\n\t */\n\t\"fnHeaderCallback\": null,\n\n\n\t/**\n\t * The information element can be used to convey information about the current\n\t * state of the table. Although the internationalisation options presented by\n\t * DataTables are quite capable of dealing with most customisations, there may\n\t * be times where you wish to customise the string further. This callback\n\t * allows you to do exactly that.\n\t */\n\t\"fnInfoCallback\": null,\n\n\n\t/**\n\t * Called when the table has been initialised. Normally DataTables will\n\t * initialise sequentially and there will be no need for this function,\n\t * however, this does not hold true when using external language information\n\t * since that is obtained using an async XHR call.\n\t */\n\t\"fnInitComplete\": null,\n\n\n\t/**\n\t * Called at the very start of each table draw and can be used to cancel the\n\t * draw by returning false, any other return (including undefined) results in\n\t * the full draw occurring).\n\t */\n\t\"fnPreDrawCallback\": null,\n\n\n\t/**\n\t * This function allows you to 'post process' each row after it have been\n\t * generated for each table draw, but before it is rendered on screen. This\n\t * function might be used for setting the row class name etc.\n\t */\n\t\"fnRowCallback\": null,\n\n\n\t/**\n\t * Load the table state. With this function you can define from where, and how, the\n\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t */\n\t\"fnStateLoadCallback\": function ( settings ) {\n\t\ttry {\n\t\t\treturn JSON.parse(\n\t\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).getItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (e) {\n\t\t\treturn {};\n\t\t}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the saved state prior to loading that state.\n\t * This callback is called when the table is loading state from the stored data, but\n\t * prior to the settings object being modified by the saved state. Note that for\n\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t * a plug-in.\n\t */\n\t\"fnStateLoadParams\": null,\n\n\n\t/**\n\t * Callback that is called when the state has been loaded from the state saving method\n\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t */\n\t\"fnStateLoaded\": null,\n\n\n\t/**\n\t * Save the table state. This function allows you to define where and how the state\n\t * information for the table is stored By default DataTables will use `localStorage`\n\t * but you might wish to use a server-side database or cookies.\n\t */\n\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\ttry {\n\t\t\t(settings.iStateDuration === -1 ? sessionStorage : localStorage).setItem(\n\t\t\t\t'DataTables_'+settings.sInstance+'_'+location.pathname,\n\t\t\t\tJSON.stringify( data )\n\t\t\t);\n\t\t} catch (e) {\n\t\t\t// noop\n\t\t}\n\t},\n\n\n\t/**\n\t * Callback which allows modification of the state to be saved. Called when the table\n\t * has changed state a new state save is required. This method allows modification of\n\t * the state saving object prior to actually doing the save, including addition or\n\t * other state properties or modification. Note that for plug-in authors, you should\n\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t */\n\t\"fnStateSaveParams\": null,\n\n\n\t/**\n\t * Duration for which the saved state information is considered valid. After this period\n\t * has elapsed the state will be returned to the default.\n\t * Value is given in seconds.\n\t */\n\t\"iStateDuration\": 7200,\n\n\n\t/**\n\t * Number of rows to display on a single page when using pagination. If\n\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t * this to a custom setting using a pop-up menu.\n\t */\n\t\"iDisplayLength\": 10,\n\n\n\t/**\n\t * Define the starting point for data display when using DataTables with\n\t * pagination. Note that this parameter is the number of records, rather than\n\t * the page number, so if you have 10 records per page and want to start on\n\t * the third page, it should be \"20\".\n\t */\n\t\"iDisplayStart\": 0,\n\n\n\t/**\n\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t * allows you to tab through the controls and press the enter key to activate them.\n\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t * disable built-in keyboard navigation.\n\t */\n\t\"iTabIndex\": 0,\n\n\n\t/**\n\t * Classes that DataTables assigns to the various components and features\n\t * that it adds to the HTML table. This allows classes to be configured\n\t * during initialisation in addition to through the static\n\t * {@link DataTable.ext.oStdClasses} object).\n\t */\n\t\"oClasses\": {},\n\n\n\t/**\n\t * All strings that DataTables uses in the user interface that it creates\n\t * are defined in this object, allowing you to modified them individually or\n\t * completely replace them all as required.\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t * must be internationalised as well).\n\t\t */\n\t\t\"oAria\": {\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column may be sorted\n\t\t\t */\n\t\t\t\"orderable\": \": Activate to sort\",\n\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column is currently being sorted\n\t\t\t */\n\t\t\t\"orderableReverse\": \": Activate to invert sorting\",\n\n\t\t\t/**\n\t\t\t * ARIA label that is added to the table headers when the column is currently being \n\t\t\t * sorted and next step is to remove sorting\n\t\t\t */\n\t\t\t\"orderableRemove\": \": Activate to remove sorting\",\n\n\t\t\tpaginate: {\n\t\t\t\tfirst: 'First',\n\t\t\t\tlast: 'Last',\n\t\t\t\tnext: 'Next',\n\t\t\t\tprevious: 'Previous',\n\t\t\t\tnumber: ''\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t * control types.\n\t\t */\n\t\t\"oPaginate\": {\n\t\t\t/**\n\t\t\t * Label and character for first page button (\u00AB)\n\t\t\t */\n\t\t\t\"sFirst\": \"\\u00AB\",\n\n\t\t\t/**\n\t\t\t * Last page button (\u00BB)\n\t\t\t */\n\t\t\t\"sLast\": \"\\u00BB\",\n\n\t\t\t/**\n\t\t\t * Next page button (\u203A)\n\t\t\t */\n\t\t\t\"sNext\": \"\\u203A\",\n\n\t\t\t/**\n\t\t\t * Previous page button (\u2039)\n\t\t\t */\n\t\t\t\"sPrevious\": \"\\u2039\",\n\t\t},\n\n\t\t/**\n\t\t * Plural object for the data type the table is showing\n\t\t */\n\t\tentries: {\n\t\t\t_: \"entries\",\n\t\t\t1: \"entry\"\n\t\t},\n\n\t\t/**\n\t\t * Page length options\n\t\t */\n\t\tlengthLabels: {\n\t\t\t'-1': 'All'\n\t\t},\n\n\t\t/**\n\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t * instead (either the default or given value).\n\t\t */\n\t\t\"sEmptyTable\": \"No data available in table\",\n\n\n\t\t/**\n\t\t * This string gives information to the end user about the information\n\t\t * that is current on display on the page. The following tokens can be\n\t\t * used in the string and will be dynamically replaced as the table\n\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t * removed as needed by the language requires:\n\t\t *\n\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t * * `\\_PAGE\\_` - Current page number\n\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t */\n\t\t\"sInfo\": \"Showing _START_ to _END_ of _TOTAL_ _ENTRIES-TOTAL_\",\n\n\n\t\t/**\n\t\t * Display information string for when the table is empty. Typically the\n\t\t * format of this string should match `info`.\n\t\t */\n\t\t\"sInfoEmpty\": \"Showing 0 to 0 of 0 _ENTRIES-TOTAL_\",\n\n\n\t\t/**\n\t\t * When a user filters the information in a table, this string is appended\n\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t */\n\t\t\"sInfoFiltered\": \"(filtered from _MAX_ total _ENTRIES-MAX_)\",\n\n\n\t\t/**\n\t\t * If can be useful to append extra information to the info string at times,\n\t\t * and this variable does exactly that. This information will be appended to\n\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t * being used) at all times.\n\t\t */\n\t\t\"sInfoPostFix\": \"\",\n\n\n\t\t/**\n\t\t * This decimal place operator is a little different from the other\n\t\t * language options since DataTables doesn't output floating point\n\t\t * numbers, so it won't ever use this for display of a number. Rather,\n\t\t * what this parameter does is modify the sort methods of the table so\n\t\t * that numbers which are in a format which has a character other than\n\t\t * a period (`.`) as a decimal place will be sorted numerically.\n\t\t *\n\t\t * Note that numbers with different decimal places cannot be shown in\n\t\t * the same table and still be sortable, the table must be consistent.\n\t\t * However, multiple different tables on the page can use different\n\t\t * decimal place characters.\n\t\t */\n\t\t\"sDecimal\": \"\",\n\n\n\t\t/**\n\t\t * DataTables has a build in number formatter (`formatNumber`) which is\n\t\t * used to format large numbers that are used in the table information.\n\t\t * By default a comma is used, but this can be trivially changed to any\n\t\t * character you wish with this parameter.\n\t\t */\n\t\t\"sThousands\": \",\",\n\n\n\t\t/**\n\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t * with a custom select box if required.\n\t\t */\n\t\t\"sLengthMenu\": \"_MENU_ _ENTRIES_ per page\",\n\n\n\t\t/**\n\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t * indicate to the end user the data is being loaded. Note that this\n\t\t * parameter is not used when loading data by server-side processing, just\n\t\t * Ajax sourced data with client-side processing.\n\t\t */\n\t\t\"sLoadingRecords\": \"Loading...\",\n\n\n\t\t/**\n\t\t * Text which is displayed when the table is processing a user action\n\t\t * (usually a sort command or similar).\n\t\t */\n\t\t\"sProcessing\": \"\",\n\n\n\t\t/**\n\t\t * Details the actions that will be taken when the user types into the\n\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t * then the input box is appended to the string automatically.\n\t\t */\n\t\t\"sSearch\": \"Search:\",\n\n\n\t\t/**\n\t\t * Assign a `placeholder` attribute to the search `input` element\n\t\t *  @type string\n\t\t *  @default \n\t\t *\n\t\t *  @dtopt Language\n\t\t *  @name DataTable.defaults.language.searchPlaceholder\n\t\t */\n\t\t\"sSearchPlaceholder\": \"\",\n\n\n\t\t/**\n\t\t * All of the language information can be stored in a file on the\n\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t * and the object has the same properties as the oLanguage object in the\n\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t * the example language files to see how this works in action.\n\t\t */\n\t\t\"sUrl\": \"\",\n\n\n\t\t/**\n\t\t * Text shown inside the table records when the is no information to be\n\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t * information in the table at all (regardless of filtering).\n\t\t */\n\t\t\"sZeroRecords\": \"No matching records found\"\n\t},\n\n\n\t/** The initial data order is reversed when `desc` ordering */\n\torderDescReverse: true,\n\n\n\t/**\n\t * This parameter allows you to have define the global filtering state at\n\t * initialisation time. As an object the `search` parameter must be\n\t * defined, but all other parameters are optional. When `regex` is true,\n\t * the search string will be treated as a regular expression, when false\n\t * (default) it will be treated as a straight string. When `smart`\n\t * DataTables will use it's smart filtering methods (to word match at\n\t * any point in the data), when false this will not be done.\n\t */\n\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\n\n\t/**\n\t * Table and control layout. This replaces the legacy `dom` option.\n\t */\n\tlayout: {\n\t\ttopStart: 'pageLength',\n\t\ttopEnd: 'search',\n\t\tbottomStart: 'info',\n\t\tbottomEnd: 'paging'\n\t},\n\n\n\t/**\n\t * Legacy DOM layout option\n\t */\n\t\"sDom\": null,\n\n\n\t/**\n\t * Search delay option. This will throttle full table searches that use the\n\t * DataTables provided search input element (it does not effect calls to\n\t * `dt-api search()`, providing a delay before the search is made.\n\t */\n\t\"searchDelay\": null,\n\n\n\t/**\n\t * DataTables features six different built-in options for the buttons to\n\t * display for pagination control:\n\t *\n\t * * `numbers` - Page number buttons only\n\t * * `simple` - 'Previous' and 'Next' buttons only\n\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus page numbers\n\t * * `first_last_numbers` - 'First' and 'Last' buttons, plus page numbers\n\t */\n\t\"sPaginationType\": \"\",\n\n\n\t/**\n\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t * certain layout, or you have a large number of columns in the table, you\n\t * can enable x-scrolling to show the table in a viewport, which can be\n\t * scrolled. This property can be `true` which will allow the table to\n\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t * is recommended.\n\t */\n\t\"sScrollX\": \"\",\n\n\n\t/**\n\t * This property can be used to force a DataTable to use more width than it\n\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t * table which requires to be well spaced, this parameter is useful for\n\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t * measurement).\n\t */\n\t\"sScrollXInner\": \"\",\n\n\n\t/**\n\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t * to the given height, and enable scrolling for any data which overflows the\n\t * current viewport. This can be used as an alternative to paging to display\n\t * a lot of data in a small area (although paging and scrolling can both be\n\t * enabled at the same time). This property can be any CSS unit, or a number\n\t * (in which case it will be treated as a pixel measurement).\n\t */\n\t\"sScrollY\": \"\",\n\n\n\t/**\n\t * __Deprecated__ The functionality provided by this parameter has now been\n\t * superseded by that provided through `ajax`, which should be used instead.\n\t *\n\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t * processing or Ajax sourced data.\n\t */\n\t\"sServerMethod\": \"GET\",\n\n\n\t/**\n\t * DataTables makes use of renderers when displaying HTML elements for\n\t * a table. These renderers can be added or modified by plug-ins to\n\t * generate suitable mark-up for a site. For example the Bootstrap\n\t * integration plug-in for DataTables uses a paging button renderer to\n\t * display pagination buttons in the mark-up required by Bootstrap.\n\t *\n\t * For further information about the renderers available see\n\t * DataTable.ext.renderer\n\t */\n\t\"renderer\": null,\n\n\n\t/**\n\t * Set the data property name that DataTables should use to get a row's id\n\t * to set as the `id` property in the node.\n\t */\n\t\"rowId\": \"DT_RowId\",\n\n\n\t/**\n\t * Caption value\n\t */\n\t\"caption\": null,\n\n\n\t/**\n\t * For server-side processing - use the data from the DOM for the first draw\n\t */\n\tiDeferLoading: null,\n\n\t/** Event listeners */\n\ton: null,\n\n\t/** Title wrapper element type */\n\tcolumnTitleTag: 'span'\n};\n\n_fnHungarianMap( DataTable.defaults );\n\n\n\n/*\n * Developer note - See note in model.defaults.js about the use of Hungarian\n * notation and camel case.\n */\n\n/**\n * Column options that can be given to DataTables at initialisation time.\n *  @namespace\n */\nDataTable.defaults.column = {\n\t/**\n\t * Define which column(s) an order will occur on for this column. This\n\t * allows a column's ordering to take multiple columns into account when\n\t * doing a sort or use the data from a different column. For example first\n\t * name / last name columns make sense to do a multi-column sort over the\n\t * two columns.\n\t */\n\t\"aDataSort\": null,\n\t\"iDataSort\": -1,\n\n\tariaTitle: '',\n\n\n\t/**\n\t * You can control the default ordering direction, and even alter the\n\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t * using this parameter.\n\t */\n\t\"asSorting\": [ 'asc', 'desc', '' ],\n\n\n\t/**\n\t * Enable or disable filtering on the data in this column.\n\t */\n\t\"bSearchable\": true,\n\n\n\t/**\n\t * Enable or disable ordering on this column.\n\t */\n\t\"bSortable\": true,\n\n\n\t/**\n\t * Enable or disable the display of this column.\n\t */\n\t\"bVisible\": true,\n\n\n\t/**\n\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t * allowing you to modify the DOM element (add background colour for example) when the\n\t * element is available.\n\t */\n\t\"fnCreatedCell\": null,\n\n\n\t/**\n\t * This property can be used to read data from any data source property,\n\t * including deeply nested objects / properties. `data` can be given in a\n\t * number of different ways which effect its behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted JavaScript notation. Just as you use a `.` in\n\t *      JavaScript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object. Note that\n\t *      function notation is recommended for use in `render` rather than\n\t *      `data` as it is much simpler to use as a renderer.\n\t * * `null` - use the original data source for the row rather than plucking\n\t *   data directly from it. This action has effects on two other\n\t *   initialisation options:\n\t *    * `defaultContent` - When null is given as the `data` option and\n\t *      `defaultContent` is specified for the column, the value defined by\n\t *      `defaultContent` will be used for the cell.\n\t *    * `render` - When null is used for the `data` option and the `render`\n\t *      option is specified for the column, the whole data source for the\n\t *      row is used for the renderer.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * `{array|object}` The data source for the row\n\t *      * `{string}` The type call data requested - this will be 'set' when\n\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t *        when gathering data. Note that when `undefined` is given for the\n\t *        type DataTables expects to get the raw data for the object back<\n\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t *    * Return:\n\t *      * The return value from the function is not required when 'set' is\n\t *        the type of call, but otherwise the return is what will be used\n\t *        for the data requested.\n\t *\n\t * Note that `data` is a getter and setter option. If you just require\n\t * formatting of data for output, you will likely want to use `render` which\n\t * is simply a getter and thus simpler to use.\n\t *\n\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t * name change reflects the flexibility of this property and is consistent\n\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t * be used by DataTables, as it automatically maps the old name to the new\n\t * if required.\n\t */\n\t\"mData\": null,\n\n\n\t/**\n\t * This property is the rendering partner to `data` and it is suggested that\n\t * when you want to manipulate data for display (including filtering,\n\t * sorting etc) without altering the underlying data for the table, use this\n\t * property. `render` can be considered to be the read only companion to\n\t * `data` which is read / write (then as such more complex). Like `data`\n\t * this option can be given in a number of different ways to effect its\n\t * behaviour:\n\t *\n\t * * `integer` - treated as an array index for the data source. This is the\n\t *   default that DataTables uses (incrementally increased for each column).\n\t * * `string` - read an object property from the data source. There are\n\t *   three 'special' options that can be used in the string to alter how\n\t *   DataTables reads the data from the source object:\n\t *    * `.` - Dotted JavaScript notation. Just as you use a `.` in\n\t *      JavaScript to read from nested objects, so to can the options\n\t *      specified in `data`. For example: `browser.version` or\n\t *      `browser.name`. If your object parameter name contains a period, use\n\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t *      from and array source, joining the data with the characters provided\n\t *      between the two brackets. For example: `name[, ]` would provide a\n\t *      comma-space separated list from the source array. If no characters\n\t *      are provided between the brackets, the original array source is\n\t *      returned.\n\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t *      execute a function of the name given. For example: `browser()` for a\n\t *      simple function on the data source, `browser.version()` for a\n\t *      function in a nested property or even `browser().version` to get an\n\t *      object property if the function called returns an object.\n\t * * `object` - use different data for the different data types requested by\n\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t *   of the object is the data type the property refers to and the value can\n\t *   defined using an integer, string or function using the same rules as\n\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t *   This is the default value to use if you haven't specified a value for\n\t *   the data type requested by DataTables.\n\t * * `function` - the function given will be executed whenever DataTables\n\t *   needs to set or get the data for a cell in the column. The function\n\t *   takes three parameters:\n\t *    * Parameters:\n\t *      * {array|object} The data source for the row (based on `data`)\n\t *      * {string} The type call data requested - this will be 'filter',\n\t *        'display', 'type' or 'sort'.\n\t *      * {array|object} The full data source for the row (not based on\n\t *        `data`)\n\t *    * Return:\n\t *      * The return value from the function is what will be used for the\n\t *        data requested.\n\t */\n\t\"mRender\": null,\n\n\n\t/**\n\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t */\n\t\"sCellType\": \"td\",\n\n\n\t/**\n\t * Class to give to each cell in this column.\n\t */\n\t\"sClass\": \"\",\n\n\t/**\n\t * When DataTables calculates the column widths to assign to each column,\n\t * it finds the longest string in each column and then constructs a\n\t * temporary table and reads the widths from that. The problem with this\n\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t * string - thus the calculation can go wrong (doing it properly and putting\n\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t * a \"work around\" we provide this option. It will append its value to the\n\t * text that is found to be the longest string for the column - i.e. padding.\n\t * Generally you shouldn't need this!\n\t */\n\t\"sContentPadding\": \"\",\n\n\n\t/**\n\t * Allows a default value to be given for a column's data, and will be used\n\t * whenever a null data source is encountered (this can be because `data`\n\t * is set to null, or because the data source itself is null).\n\t */\n\t\"sDefaultContent\": null,\n\n\n\t/**\n\t * This parameter is only used in DataTables' server-side processing. It can\n\t * be exceptionally useful to know what columns are being displayed on the\n\t * client side, and to map these to database fields. When defined, the names\n\t * also allow DataTables to reorder information from the server if it comes\n\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t * client-side, your server-side code does not also need updating).\n\t */\n\t\"sName\": \"\",\n\n\n\t/**\n\t * Defines a data source type for the ordering which can be used to read\n\t * real-time information from the table (updating the internally cached\n\t * version) prior to ordering. This allows ordering to occur on user\n\t * editable elements such as form inputs.\n\t */\n\t\"sSortDataType\": \"std\",\n\n\n\t/**\n\t * The title of this column.\n\t */\n\t\"sTitle\": null,\n\n\n\t/**\n\t * The type allows you to specify how the data for this column will be\n\t * ordered. Four types (string, numeric, date and html (which will strip\n\t * HTML tags before ordering)) are currently available. Note that only date\n\t * formats understood by JavaScript's Date() object will be accepted as type\n\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t * through plug-ins.\n\t */\n\t\"sType\": null,\n\n\n\t/**\n\t * Defining the width of the column, this parameter may take any CSS value\n\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t * been given a specific width through this interface ensuring that the table\n\t * remains readable.\n\t */\n\t\"sWidth\": null\n};\n\n_fnHungarianMap( DataTable.defaults.column );\n\n\n\n/**\n * DataTables settings object - this holds all the information needed for a\n * given table, including configuration, data and current application of the\n * table options. DataTables does not have a single instance for each DataTable\n * with the settings attached to that instance, but rather instances of the\n * DataTable \"class\" are created on-the-fly as needed (typically by a\n * $().dataTable() call) and the settings object is then applied to that\n * instance.\n *\n * Note that this object is related to {@link DataTable.defaults} but this\n * one is the internal data store for DataTables's cache of columns. It should\n * NOT be manipulated outside of DataTables. Any configuration should be done\n * through the initialisation options.\n */\nDataTable.models.oSettings = {\n\t/**\n\t * Primary features of DataTables and their enablement state.\n\t */\n\t\"oFeatures\": {\n\n\t\t/**\n\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t * optimum table and columns widths (true) or not (false).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bAutoWidth\": null,\n\n\t\t/**\n\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t * needed by a driven page draw. This can give a significant speed\n\t\t * increase for Ajax source and JavaScript source data, but makes no\n\t\t * difference at all for DOM and server-side processing tables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bDeferRender\": null,\n\n\t\t/**\n\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bFilter\": null,\n\n\t\t/**\n\t\t * Used only for compatibility with DT1\n\t\t * @deprecated\n\t\t */\n\t\t\"bInfo\": true,\n\n\t\t/**\n\t\t * Used only for compatibility with DT1\n\t\t * @deprecated\n\t\t */\n\t\t\"bLengthChange\": true,\n\n\t\t/**\n\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t * changing must also be disabled.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bPaginate\": null,\n\n\t\t/**\n\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t * user request - typically an Ajax request for server-side processing.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bProcessing\": null,\n\n\t\t/**\n\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t * get all data from the server for every draw - there is no filtering,\n\t\t * sorting or paging done on the client-side.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bServerSide\": null,\n\n\t\t/**\n\t\t * Sorting enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bSort\": null,\n\n\t\t/**\n\t\t * Multi-column sorting\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bSortMulti\": null,\n\n\t\t/**\n\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t * there is a lot of DOM interaction.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bSortClasses\": null,\n\n\t\t/**\n\t\t * State saving enablement flag.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bStateSave\": null\n\t},\n\n\n\t/**\n\t * Scrolling settings for a table.\n\t */\n\t\"oScroll\": {\n\t\t/**\n\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t * table container down to the height of the table (when true).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"bCollapse\": null,\n\n\t\t/**\n\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t * during table initialisation.\n\t\t */\n\t\t\"iBarWidth\": 0,\n\n\t\t/**\n\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t * disabled if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"sX\": null,\n\n\t\t/**\n\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t * should not need to use this.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @deprecated\n\t\t */\n\t\t\"sXInner\": null,\n\n\t\t/**\n\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t * if an empty string.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t */\n\t\t\"sY\": null\n\t},\n\n\t/**\n\t * Language information for the table.\n\t */\n\t\"oLanguage\": {\n\t\t/**\n\t\t * Information callback function. See\n\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t */\n\t\t\"fnInfoCallback\": null\n\t},\n\n\t/**\n\t * Browser support parameters\n\t */\n\t\"oBrowser\": {\n\t\t/**\n\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t * scrolling container - needed for rtl language layout, although not\n\t\t * all browsers move the scrollbar (Safari).\n\t\t */\n\t\t\"bScrollbarLeft\": false,\n\n\t\t/**\n\t\t * Browser scrollbar width\n\t\t */\n\t\t\"barWidth\": 0\n\t},\n\n\n\t\"ajax\": null,\n\n\n\t/**\n\t * Array referencing the nodes which are used for the features. The\n\t * parameters of this object match what is allowed by sDom - i.e.\n\t *   <ul>\n\t *     <li>'l' - Length changing</li>\n\t *     <li>'f' - Filtering input</li>\n\t *     <li>'t' - The table!</li>\n\t *     <li>'i' - Information</li>\n\t *     <li>'p' - Pagination</li>\n\t *     <li>'r' - pRocessing</li>\n\t *   </ul>\n\t */\n\t\"aanFeatures\": [],\n\n\t/**\n\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t * information.\n\t */\n\t\"aoData\": [],\n\n\t/**\n\t * Array of indexes which are in the current display (after filtering etc)\n\t */\n\t\"aiDisplay\": [],\n\n\t/**\n\t * Array of indexes for display - no filtering\n\t */\n\t\"aiDisplayMaster\": [],\n\n\t/**\n\t * Map of row ids to data indexes\n\t */\n\t\"aIds\": {},\n\n\t/**\n\t * Store information about each column that is in use\n\t */\n\t\"aoColumns\": [],\n\n\t/**\n\t * Store information about the table's header\n\t */\n\t\"aoHeader\": [],\n\n\t/**\n\t * Store information about the table's footer\n\t */\n\t\"aoFooter\": [],\n\n\t/**\n\t * Store the applied global search information in case we want to force a\n\t * research or compare the old search to a new one.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"oPreviousSearch\": {},\n\n\t/**\n\t * Store for named searches\n\t */\n\tsearchFixed: {},\n\n\t/**\n\t * Store the applied search for each column - see\n\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t * filtering information for each column.\n\t */\n\t\"aoPreSearchCols\": [],\n\n\t/**\n\t * Sorting that is applied to the table. Note that the inner arrays are\n\t * used in the following manner:\n\t * <ul>\n\t *   <li>Index 0 - column number</li>\n\t *   <li>Index 1 - current sorting direction</li>\n\t * </ul>\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"aaSorting\": null,\n\n\t/**\n\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t * aaSorting).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"aaSortingFixed\": [],\n\n\t/**\n\t * If restoring a table - we should restore its width\n\t */\n\t\"sDestroyWidth\": 0,\n\n\t/**\n\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t */\n\t\"aoRowCallback\": [],\n\n\t/**\n\t * Callback functions for the header on each draw.\n\t */\n\t\"aoHeaderCallback\": [],\n\n\t/**\n\t * Callback function for the footer on each draw.\n\t */\n\t\"aoFooterCallback\": [],\n\n\t/**\n\t * Array of callback functions for draw callback functions\n\t */\n\t\"aoDrawCallback\": [],\n\n\t/**\n\t * Array of callback functions for row created function\n\t */\n\t\"aoRowCreatedCallback\": [],\n\n\t/**\n\t * Callback functions for just before the table is redrawn. A return of\n\t * false will be used to cancel the draw.\n\t */\n\t\"aoPreDrawCallback\": [],\n\n\t/**\n\t * Callback functions for when the table has been initialised.\n\t */\n\t\"aoInitComplete\": [],\n\n\n\t/**\n\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t * saving state.\n\t */\n\t\"aoStateSaveParams\": [],\n\n\t/**\n\t * Callbacks for modifying the settings that have been stored for state saving\n\t * prior to using the stored values to restore the state.\n\t */\n\t\"aoStateLoadParams\": [],\n\n\t/**\n\t * Callbacks for operating on the settings object once the saved state has been\n\t * loaded\n\t */\n\t\"aoStateLoaded\": [],\n\n\t/**\n\t * Cache the table ID for quick access\n\t */\n\t\"sTableId\": \"\",\n\n\t/**\n\t * The TABLE node for the main table\n\t */\n\t\"nTable\": null,\n\n\t/**\n\t * Permanent ref to the thead element\n\t */\n\t\"nTHead\": null,\n\n\t/**\n\t * Permanent ref to the tfoot element - if it exists\n\t */\n\t\"nTFoot\": null,\n\n\t/**\n\t * Permanent ref to the tbody element\n\t */\n\t\"nTBody\": null,\n\n\t/**\n\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t */\n\t\"nTableWrapper\": null,\n\n\t/**\n\t * Indicate if all required information has been read in\n\t */\n\t\"bInitialised\": false,\n\n\t/**\n\t * Information about open rows. Each object in the array has the parameters\n\t * 'nTr' and 'nParent'\n\t */\n\t\"aoOpenRows\": [],\n\n\t/**\n\t * Dictate the positioning of DataTables' control elements - see\n\t * {@link DataTable.model.oInit.sDom}.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"sDom\": null,\n\n\t/**\n\t * Search delay (in mS)\n\t */\n\t\"searchDelay\": null,\n\n\t/**\n\t * Which type of pagination should be used.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"sPaginationType\": \"two_button\",\n\n\t/**\n\t * Number of paging controls on the page. Only used for backwards compatibility\n\t */\n\tpagingControls: 0,\n\n\t/**\n\t * The state duration (for `stateSave`) in seconds.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"iStateDuration\": 0,\n\n\t/**\n\t * Array of callback functions for state saving. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the JSON string to save that has been thus far created. Returns\n\t *       a JSON string to be inserted into a json object\n\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t */\n\t\"aoStateSave\": [],\n\n\t/**\n\t * Array of callback functions for state loading. Each array element is an\n\t * object with the following parameters:\n\t *   <ul>\n\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t *       and the object stored. May return false to cancel state loading</li>\n\t *     <li>string:sName - name of callback</li>\n\t *   </ul>\n\t */\n\t\"aoStateLoad\": [],\n\n\t/**\n\t * State that was saved. Useful for back reference\n\t */\n\t\"oSavedState\": null,\n\n\t/**\n\t * State that was loaded. Useful for back reference\n\t */\n\t\"oLoadedState\": null,\n\n\t/**\n\t * Note if draw should be blocked while getting data\n\t */\n\t\"bAjaxDataGet\": true,\n\n\t/**\n\t * The last jQuery XHR object that was used for server-side data gathering.\n\t * This can be used for working with the XHR information in one of the\n\t * callbacks\n\t */\n\t\"jqXHR\": null,\n\n\t/**\n\t * JSON returned from the server in the last Ajax request\n\t */\n\t\"json\": undefined,\n\n\t/**\n\t * Data submitted as part of the last Ajax request\n\t */\n\t\"oAjaxData\": undefined,\n\n\t/**\n\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t * required).\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"sServerMethod\": null,\n\n\t/**\n\t * Format numbers for display.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"fnFormatNumber\": null,\n\n\t/**\n\t * List of options that can be used for the user selectable length menu.\n\t * Note that this parameter will be set by the initialisation routine. To\n\t * set a default use {@link DataTable.defaults}.\n\t */\n\t\"aLengthMenu\": null,\n\n\t/**\n\t * Counter for the draws that the table does. Also used as a tracker for\n\t * server-side processing\n\t */\n\t\"iDraw\": 0,\n\n\t/**\n\t * Indicate if a redraw is being done - useful for Ajax\n\t */\n\t\"bDrawing\": false,\n\n\t/**\n\t * Draw index (iDraw) of the last error when parsing the returned data\n\t */\n\t\"iDrawError\": -1,\n\n\t/**\n\t * Paging display length\n\t */\n\t\"_iDisplayLength\": 10,\n\n\t/**\n\t * Paging start point - aiDisplay index\n\t */\n\t\"_iDisplayStart\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the result set\n\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t */\n\t\"_iRecordsTotal\": 0,\n\n\t/**\n\t * Server-side processing - number of records in the current display set\n\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t * this property to get the value of the number of records, regardless of\n\t * the server-side processing setting.\n\t */\n\t\"_iRecordsDisplay\": 0,\n\n\t/**\n\t * The classes to use for the table\n\t */\n\t\"oClasses\": {},\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @deprecated\n\t */\n\t\"bFiltered\": false,\n\n\t/**\n\t * Flag attached to the settings object so you can check in the draw\n\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t * events.\n\t *  @deprecated\n\t */\n\t\"bSorted\": false,\n\n\t/**\n\t * Indicate that if multiple rows are in the header and there is more than\n\t * one unique cell per column. Replaced by titleRow\n\t */\n\t\"bSortCellsTop\": null,\n\n\t/**\n\t * Initialisation object that is used for the table\n\t */\n\t\"oInit\": null,\n\n\t/**\n\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t * destroy so they can clean up markup and events.\n\t */\n\t\"aoDestroyCallback\": [],\n\n\n\t/**\n\t * Get the number of records in the current record set, before filtering\n\t */\n\t\"fnRecordsTotal\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsTotal * 1 :\n\t\t\tthis.aiDisplayMaster.length;\n\t},\n\n\t/**\n\t * Get the number of records in the current record set, after filtering\n\t */\n\t\"fnRecordsDisplay\": function ()\n\t{\n\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\tthis.aiDisplay.length;\n\t},\n\n\t/**\n\t * Get the display end point - aiDisplay index\n\t */\n\t\"fnDisplayEnd\": function ()\n\t{\n\t\tvar\n\t\t\tlen      = this._iDisplayLength,\n\t\t\tstart    = this._iDisplayStart,\n\t\t\tcalc     = start + len,\n\t\t\trecords  = this.aiDisplay.length,\n\t\t\tfeatures = this.oFeatures,\n\t\t\tpaginate = features.bPaginate;\n\n\t\tif ( features.bServerSide ) {\n\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\tstart + records :\n\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t}\n\t\telse {\n\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\trecords :\n\t\t\t\tcalc;\n\t\t}\n\t},\n\n\t/**\n\t * The DataTables object for this table\n\t */\n\t\"oInstance\": null,\n\n\t/**\n\t * Unique identifier for each instance of the DataTables object. If there\n\t * is an ID on the table node, then it takes that value, otherwise an\n\t * incrementing internal counter is used.\n\t */\n\t\"sInstance\": null,\n\n\t/**\n\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t * keyboard navigation of the table and its controls.\n\t */\n\t\"iTabIndex\": 0,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollHead\": null,\n\n\t/**\n\t * DIV container for the footer scrolling table if scrolling\n\t */\n\t\"nScrollFoot\": null,\n\n\t/**\n\t * Last applied sort\n\t */\n\t\"aLastSort\": [],\n\n\t/**\n\t * Stored plug-in instances\n\t */\n\t\"oPlugins\": {},\n\n\t/**\n\t * Function used to get a row's id from the row's data\n\t */\n\t\"rowIdFn\": null,\n\n\t/**\n\t * Data location where to store a row's id\n\t */\n\t\"rowId\": null,\n\n\tcaption: '',\n\n\tcaptionNode: null,\n\n\tcolgroup: null,\n\n\t/** Delay loading of data */\n\tdeferLoading: null,\n\n\t/** Allow auto type detection */\n\ttypeDetect: true,\n\n\t/** ResizeObserver for the container div */\n\tresizeObserver: null,\n\n\t/** Keep a record of the last size of the container, so we can skip duplicates */\n\tcontainerWidth: -1,\n\n\t/** Reverse the initial order of the data set on desc ordering */\n\torderDescReverse: null,\n\n\t/** Show / hide ordering indicators in headers */\n\torderIndicators: true,\n\n\t/** Default ordering listener */\n\torderHandler: true,\n\n\t/** Title row indicator */\n\ttitleRow: null,\n\n\t/** Title wrapper element type */\n\tcolumnTitleTag: 'span'\n};\n\n/**\n * Extension object for DataTables that is used to provide all extension\n * options.\n *\n * Note that the `DataTable.ext` object is available through\n * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n *  @namespace\n *  @extends DataTable.models.ext\n */\n\n\nvar extPagination = DataTable.ext.pager;\n\n// Paging buttons configuration\n$.extend( extPagination, {\n\tsimple: function () {\n\t\treturn [ 'previous', 'next' ];\n\t},\n\n\tfull: function () {\n\t\treturn [ 'first', 'previous', 'next', 'last' ];\n\t},\n\n\tnumbers: function () {\n\t\treturn [ 'numbers' ];\n\t},\n\n\tsimple_numbers: function () {\n\t\treturn [ 'previous', 'numbers', 'next' ];\n\t},\n\n\tfull_numbers: function () {\n\t\treturn [ 'first', 'previous', 'numbers', 'next', 'last' ];\n\t},\n\n\tfirst_last: function () {\n\t\treturn ['first', 'last'];\n\t},\n\n\tfirst_last_numbers: function () {\n\t\treturn ['first', 'numbers', 'last'];\n\t},\n\n\t// For testing and plug-ins to use\n\t_numbers: _pagingNumbers,\n\n\t// Number of number buttons - legacy, use `numbers` option for paging feature\n\tnumbers_length: 7\n} );\n\n\n$.extend( true, DataTable.ext.renderer, {\n\tpagingButton: {\n\t\t_: function (settings, buttonType, content, active, disabled) {\n\t\t\tvar classes = settings.oClasses.paging;\n\t\t\tvar btnClasses = [classes.button];\n\t\t\tvar btn;\n\n\t\t\tif (active) {\n\t\t\t\tbtnClasses.push(classes.active);\n\t\t\t}\n\n\t\t\tif (disabled) {\n\t\t\t\tbtnClasses.push(classes.disabled)\n\t\t\t}\n\n\t\t\tif (buttonType === 'ellipsis') {\n\t\t\t\tbtn = $('<span class=\"ellipsis\"></span>').html(content)[0];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtn = $('<button>', {\n\t\t\t\t\tclass: btnClasses.join(' '),\n\t\t\t\t\trole: 'link',\n\t\t\t\t\ttype: 'button'\n\t\t\t\t}).html(content);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdisplay: btn,\n\t\t\t\tclicker: btn\n\t\t\t}\n\t\t}\n\t},\n\n\tpagingContainer: {\n\t\t_: function (settings, buttons) {\n\t\t\t// No wrapping element - just append directly to the host\n\t\t\treturn buttons;\n\t\t}\n\t}\n} );\n\n// Common function to remove new lines, strip HTML and diacritic control\nvar _filterString = function (stripHtml, normalize) {\n\treturn function (str) {\n\t\tif (_empty(str) || typeof str !== 'string') {\n\t\t\treturn str;\n\t\t}\n\n\t\tstr = str.replace( _re_new_lines, \" \" );\n\n\t\tif (stripHtml) {\n\t\t\tstr = _stripHtml(str);\n\t\t}\n\n\t\tif (normalize) {\n\t\t\tstr = _normalize(str, false);\n\t\t}\n\n\t\treturn str;\n\t};\n}\n\n/*\n * Public helper functions. These aren't used internally by DataTables, or\n * called by any of the options passed into DataTables, but they can be used\n * externally by developers working with DataTables. They are helper functions\n * to make working with DataTables a little bit easier.\n */\n\n/**\n * Common logic for moment, luxon or a date action.\n *\n * Happens after __mldObj, so don't need to call `resolveWindowsLibs` again\n */\nfunction __mld( dtLib, momentFn, luxonFn, dateFn, arg1 ) {\n\tif (__moment) {\n\t\treturn dtLib[momentFn]( arg1 );\n\t}\n\telse if (__luxon) {\n\t\treturn dtLib[luxonFn]( arg1 );\n\t}\n\t\n\treturn dateFn ? dtLib[dateFn]( arg1 ) : dtLib;\n}\n\n\nvar __mlWarning = false;\nvar __luxon; // Can be assigned in DateTable.use()\nvar __moment; // Can be assigned in DateTable.use()\nvar __reIsoTimezone = /[T\\s]\\d{2}.*?(Z|[+-]\\d{2}(?::?\\d{2})?)$/;\n\n/**\n * \n */\nfunction resolveWindowLibs() {\n\tif (window.luxon && ! __luxon) {\n\t\t__luxon = window.luxon;\n\t}\n\t\n\tif (window.moment && ! __moment) {\n\t\t__moment = window.moment;\n\t}\n}\n\nfunction __mldObj (d, format, locale) {\n\tvar dt;\n\n\tresolveWindowLibs();\n\n\tif (__moment) {\n\t\tdt = __moment( d, format, locale, true );\n\n\t\tif (! dt.isValid()) {\n\t\t\treturn null;\n\t\t}\n\t}\n\telse if (__luxon) {\n\t\tdt = format && typeof d === 'string'\n\t\t\t? __luxon.DateTime.fromFormat( d, format )\n\t\t\t: __luxon.DateTime.fromISO( d );\n\n\t\tif (! dt.isValid) {\n\t\t\treturn null;\n\t\t}\n\n\t\tdt = dt.setLocale(locale);\n\t}\n\telse if (! format) {\n\t\t// No format given, must be ISO\n\t\tdt = new Date(d);\n\t}\n\telse {\n\t\tif (! __mlWarning) {\n\t\t\talert('DataTables warning: Formatted date without Moment.js or Luxon - https://datatables.net/tn/17');\n\t\t}\n\n\t\t__mlWarning = true;\n\t}\n\n\treturn dt;\n}\n\n// Wrapper for date, datetime and time which all operate the same way with the exception of\n// the output string for auto locale support\nfunction __mlHelper (localeString) {\n\treturn function ( from, to, locale, def ) {\n\t\t// Luxon and Moment support\n\t\t// Argument shifting\n\t\tif ( arguments.length === 0 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = null; // means toLocaleString\n\t\t\tfrom = null; // means iso8601\n\t\t}\n\t\telse if ( arguments.length === 1 ) {\n\t\t\tlocale = 'en';\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\t\telse if ( arguments.length === 2 ) {\n\t\t\tlocale = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t}\n\n\t\tvar typeName = 'datetime' + (to ? '-' + to : '');\n\n\t\t// Add type detection and sorting specific to this date format - we need to be able to identify\n\t\t// date type columns as such, rather than as numbers in extensions. Hence the need for this.\n\t\tif (! DataTable.ext.type.order[typeName + '-pre']) {\n\t\t\tDataTable.type(typeName, {\n\t\t\t\tdetect: function (d) {\n\t\t\t\t\t// The renderer will give the value to type detect as the type!\n\t\t\t\t\treturn d === typeName ? typeName : false;\n\t\t\t\t},\n\t\t\t\torder: {\n\t\t\t\t\tpre: function (d) {\n\t\t\t\t\t\t// The renderer gives us Moment, Luxon or Date objects for the sorting, all of which have a\n\t\t\t\t\t\t// `valueOf` which gives milliseconds epoch\n\t\t\t\t\t\treturn d.valueOf();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclassName: 'dt-right'\n\t\t\t});\n\t\t}\n\t\n\t\treturn function ( d, type ) {\n\t\t\t// Allow for a default value\n\t\t\tif (d === null || d === undefined) {\n\t\t\t\tif (def === '--now') {\n\t\t\t\t\t// We treat everything as UTC further down, so no changes are\n\t\t\t\t\t// made, as such need to get the local date / time as if it were\n\t\t\t\t\t// UTC\n\t\t\t\t\tvar local = new Date();\n\t\t\t\t\td = new Date( Date.UTC(\n\t\t\t\t\t\tlocal.getFullYear(), local.getMonth(), local.getDate(),\n\t\t\t\t\t\tlocal.getHours(), local.getMinutes(), local.getSeconds()\n\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (type === 'type') {\n\t\t\t\t// Typing uses the type name for fast matching\n\t\t\t\treturn typeName;\n\t\t\t}\n\n\t\t\tif (d === '') {\n\t\t\t\treturn type !== 'sort'\n\t\t\t\t\t? ''\n\t\t\t\t\t: __mldObj('0000-01-01 00:00:00', null, locale);\n\t\t\t}\n\n\t\t\t// Shortcut. If `from` and `to` are the same, we are using the renderer to\n\t\t\t// format for ordering, not display - its already in the display format.\n\t\t\tif ( to !== null && from === to && type !== 'sort' && type !== 'type' && ! (d instanceof Date) ) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\t// Determine if there is a timezone. If there is, we want to reuse\n\t\t\t// it for the output, so the timezone doesn't change between the\n\t\t\t// input and output.\n\t\t\tlet options = {};\n\t\t\tlet tzMatch = typeof d === 'string' ? d.match(__reIsoTimezone) : null;\n\n\t\t\tif (tzMatch) {\n\t\t\t\toptions.timeZone = tzMatch[1] === 'Z' ? 'UTC' : tzMatch[1];\n\t\t\t}\n\n\t\t\tvar dt = __mldObj(d, from, locale);\n\n\t\t\tif (dt === null) {\n\t\t\t\treturn d;\n\t\t\t}\n\n\t\t\tif (type === 'sort') {\n\t\t\t\treturn dt;\n\t\t\t}\n\t\t\t\n\t\t\tvar formatted = to === null\n\t\t\t\t? __mld(dt, 'toDate', 'toJSDate', '')[localeString](\n\t\t\t\t\tnavigator.language,\n\t\t\t\t\toptions\n\t\t\t\t)\n\t\t\t\t: __mld(dt, 'format', 'toFormat', 'toISOString', to);\n\n\t\t\t// XSS protection\n\t\t\treturn type === 'display' ?\n\t\t\t\t_escapeHtml( formatted ) :\n\t\t\t\tformatted;\n\t\t};\n\t}\n}\n\n// Based on locale, determine standard number formatting\n// Fallback for legacy browsers is US English\nvar __thousands = ',';\nvar __decimal = '.';\n\nif (window.Intl !== undefined) {\n\ttry {\n\t\tvar num = new Intl.NumberFormat().formatToParts(100000.1);\n\t\n\t\tfor (var i=0 ; i<num.length ; i++) {\n\t\t\tif (num[i].type === 'group') {\n\t\t\t\t__thousands = num[i].value;\n\t\t\t}\n\t\t\telse if (num[i].type === 'decimal') {\n\t\t\t\t__decimal = num[i].value;\n\t\t\t}\n\t\t}\n\t}\n\tcatch (e) {\n\t\t// noop\n\t}\n}\n\n// Formatted date time detection - use by declaring the formats you are going to use\nDataTable.datetime = function ( format, locale ) {\n\tvar typeName = 'datetime-' + format;\n\n\tif (! locale) {\n\t\tlocale = 'en';\n\t}\n\n\tif (! DataTable.ext.type.order[typeName]) {\n\t\tDataTable.type(typeName, {\n\t\t\tdetect: function (d) {\n\t\t\t\tvar dt = __mldObj(d, format, locale);\n\t\t\t\treturn d === '' || dt ? typeName : false;\n\t\t\t},\n\t\t\torder: {\n\t\t\t\tpre: function (d) {\n\t\t\t\t\treturn __mldObj(d, format, locale) || 0;\n\t\t\t\t}\n\t\t\t},\n\t\t\tclassName: 'dt-right'\n\t\t});\n\t}\n}\n\n/**\n * Helpers for `columns.render`.\n *\n * The options defined here can be used with the `columns.render` initialisation\n * option to provide a display renderer. The following functions are defined:\n *\n * * `moment` - Uses the MomentJS library to convert from a given format into another.\n * This renderer has three overloads:\n *   * 1 parameter:\n *     * `string` - Format to convert to (assumes input is ISO8601 and locale is `en`)\n *   * 2 parameters:\n *     * `string` - Format to convert from\n *     * `string` - Format to convert to. Assumes `en` locale\n *   * 3 parameters:\n *     * `string` - Format to convert from\n *     * `string` - Format to convert to\n *     * `string` - Locale\n * * `number` - Will format numeric data (defined by `columns.data`) for\n *   display, retaining the original unformatted data for sorting and filtering.\n *   It takes 5 parameters:\n *   * `string` - Thousands grouping separator\n *   * `string` - Decimal point indicator\n *   * `integer` - Number of decimal points to show\n *   * `string` (optional) - Prefix.\n *   * `string` (optional) - Postfix (/suffix).\n * * `text` - Escape HTML to help prevent XSS attacks. It has no optional\n *   parameters.\n *\n * @example\n *   // Column definition using the number renderer\n *   {\n *     data: \"salary\",\n *     render: $.fn.dataTable.render.number( '\\'', '.', 0, '$' )\n *   }\n *\n * @namespace\n */\nDataTable.render = {\n\tdate: __mlHelper('toLocaleDateString'),\n\tdatetime: __mlHelper('toLocaleString'),\n\ttime: __mlHelper('toLocaleTimeString'),\n\tnumber: function ( thousands, decimal, precision, prefix, postfix ) {\n\t\t// Auto locale detection\n\t\tif (thousands === null || thousands === undefined) {\n\t\t\tthousands = __thousands;\n\t\t}\n\n\t\tif (decimal === null || decimal === undefined) {\n\t\t\tdecimal = __decimal;\n\t\t}\n\n\t\treturn {\n\t\t\tdisplay: function ( d ) {\n\t\t\t\tif ( typeof d !== 'number' && typeof d !== 'string' ) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tif (d === '' || d === null) {\n\t\t\t\t\treturn d;\n\t\t\t\t}\n\n\t\t\t\tvar negative = d < 0 ? '-' : '';\n\t\t\t\tvar flo = parseFloat( d );\n\t\t\t\tvar abs = Math.abs(flo);\n\n\t\t\t\t// Scientific notation for large and small numbers\n\t\t\t\tif (abs >= 100000000000 || (abs < 0.0001 && abs !== 0) ) {\n\t\t\t\t\tvar exp = flo.toExponential(precision).split(/e\\+?/);\n\t\t\t\t\treturn exp[0] + ' x 10<sup>' + exp[1] + '</sup>';\n\t\t\t\t}\n\n\t\t\t\t// If NaN then there isn't much formatting that we can do - just\n\t\t\t\t// return immediately, escaping any HTML (this was supposed to\n\t\t\t\t// be a number after all)\n\t\t\t\tif ( isNaN( flo ) ) {\n\t\t\t\t\treturn _escapeHtml( d );\n\t\t\t\t}\n\n\t\t\t\tflo = flo.toFixed( precision );\n\t\t\t\td = Math.abs( flo );\n\n\t\t\t\tvar intPart = parseInt( d, 10 );\n\t\t\t\tvar floatPart = precision ?\n\t\t\t\t\tdecimal+(d - intPart).toFixed( precision ).substring( 2 ):\n\t\t\t\t\t'';\n\n\t\t\t\t// If zero, then can't have a negative prefix\n\t\t\t\tif (intPart === 0 && parseFloat(floatPart) === 0) {\n\t\t\t\t\tnegative = '';\n\t\t\t\t}\n\n\t\t\t\treturn negative + (prefix||'') +\n\t\t\t\t\tintPart.toString().replace(\n\t\t\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g, thousands\n\t\t\t\t\t) +\n\t\t\t\t\tfloatPart +\n\t\t\t\t\t(postfix||'');\n\t\t\t}\n\t\t};\n\t},\n\n\ttext: function () {\n\t\treturn {\n\t\t\tdisplay: _escapeHtml,\n\t\t\tfilter: _escapeHtml\n\t\t};\n\t}\n};\n\n\nvar _extTypes = DataTable.ext.type;\n\n// Get / set type\nDataTable.type = function (name, prop, val) {\n\tif (! prop) {\n\t\treturn {\n\t\t\tclassName: _extTypes.className[name],\n\t\t\tdetect: _extTypes.detect.find(function (fn) {\n\t\t\t\treturn fn._name === name;\n\t\t\t}),\n\t\t\torder: {\n\t\t\t\tpre: _extTypes.order[name + '-pre'],\n\t\t\t\tasc: _extTypes.order[name + '-asc'],\n\t\t\t\tdesc: _extTypes.order[name + '-desc']\n\t\t\t},\n\t\t\trender: _extTypes.render[name],\n\t\t\tsearch: _extTypes.search[name]\n\t\t};\n\t}\n\n\tvar setProp = function(prop, propVal) {\n\t\t_extTypes[prop][name] = propVal;\n\t};\n\tvar setDetect = function (detect) {\n\t\t// `detect` can be a function or an object - we set a name\n\t\t// property for either - that is used for the detection\n\t\tObject.defineProperty(detect, \"_name\", {value: name});\n\n\t\tvar idx = _extTypes.detect.findIndex(function (item) {\n\t\t\treturn item._name === name;\n\t\t});\n\n\t\tif (idx === -1) {\n\t\t\t_extTypes.detect.unshift(detect);\n\t\t}\n\t\telse {\n\t\t\t_extTypes.detect.splice(idx, 1, detect);\n\t\t}\n\t};\n\tvar setOrder = function (obj) {\n\t\t_extTypes.order[name + '-pre'] = obj.pre; // can be undefined\n\t\t_extTypes.order[name + '-asc'] = obj.asc; // can be undefined\n\t\t_extTypes.order[name + '-desc'] = obj.desc; // can be undefined\n\t};\n\n\t// prop is optional\n\tif (val === undefined) {\n\t\tval = prop;\n\t\tprop = null;\n\t}\n\n\tif (prop === 'className') {\n\t\tsetProp('className', val);\n\t}\n\telse if (prop === 'detect') {\n\t\tsetDetect(val);\n\t}\n\telse if (prop === 'order') {\n\t\tsetOrder(val);\n\t}\n\telse if (prop === 'render') {\n\t\tsetProp('render', val);\n\t}\n\telse if (prop === 'search') {\n\t\tsetProp('search', val);\n\t}\n\telse if (! prop) {\n\t\tif (val.className) {\n\t\t\tsetProp('className', val.className);\n\t\t}\n\n\t\tif (val.detect !== undefined) {\n\t\t\tsetDetect(val.detect);\n\t\t}\n\n\t\tif (val.order) {\n\t\t\tsetOrder(val.order);\n\t\t}\n\n\t\tif (val.render !== undefined) {\n\t\t\tsetProp('render', val.render);\n\t\t}\n\n\t\tif (val.search !== undefined) {\n\t\t\tsetProp('search', val.search);\n\t\t}\n\t}\n}\n\n// Get a list of types\nDataTable.types = function () {\n\treturn _extTypes.detect.map(function (fn) {\n\t\treturn fn._name;\n\t});\n};\n\nvar __diacriticSort = function (a, b) {\n\ta = a !== null && a !== undefined ? a.toString().toLowerCase() : '';\n\tb = b !== null && b !== undefined ? b.toString().toLowerCase() : '';\n\n\t// Checked for `navigator.languages` support in `oneOf` so this code can't execute in old\n\t// Safari and thus can disable this check\n\t// eslint-disable-next-line compat/compat\n\treturn a.localeCompare(b, navigator.languages[0] || navigator.language, {\n\t\tnumeric: true,\n\t\tignorePunctuation: true,\n\t});\n}\n\nvar __diacriticHtmlSort = function (a, b) {\n\ta = _stripHtml(a);\n\tb = _stripHtml(b);\n\n\treturn __diacriticSort(a, b);\n}\n\n//\n// Built in data types\n//\n\nDataTable.type('string', {\n\tdetect: function () {\n\t\treturn 'string';\n\t},\n\torder: {\n\t\tpre: function ( a ) {\n\t\t\t// This is a little complex, but faster than always calling toString,\n\t\t\t// http://jsperf.com/tostring-v-check\n\t\t\treturn _empty(a) && typeof a !== 'boolean' ?\n\t\t\t\t'' :\n\t\t\t\ttypeof a === 'string' ?\n\t\t\t\t\ta.toLowerCase() :\n\t\t\t\t\t! a.toString ?\n\t\t\t\t\t\t'' :\n\t\t\t\t\t\ta.toString();\n\t\t}\n\t},\n\tsearch: _filterString(false, true)\n});\n\nDataTable.type('string-utf8', {\n\tdetect: {\n\t\tallOf: function ( d ) {\n\t\t\treturn true;\n\t\t},\n\t\toneOf: function ( d ) {\n\t\t\t// At least one data point must contain a non-ASCII character\n\t\t\t// This line will also check if navigator.languages is supported or not. If not (Safari 10.0-)\n\t\t\t// this data type won't be supported.\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\treturn ! _empty( d ) && navigator.languages && typeof d === 'string' && d.match(/[^\\x00-\\x7F]/);\n\t\t}\n\t},\n\torder: {\n\t\tasc: __diacriticSort,\n\t\tdesc: function (a, b) {\n\t\t\treturn __diacriticSort(a, b) * -1;\n\t\t}\n\t},\n\tsearch: _filterString(false, true)\n});\n\n\nDataTable.type('html', {\n\tdetect: {\n\t\tallOf: function ( d ) {\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1);\n\t\t},\n\t\toneOf: function ( d ) {\n\t\t\t// At least one data point must contain a `<`\n\t\t\treturn ! _empty( d ) && typeof d === 'string' && d.indexOf('<') !== -1;\n\t\t}\n\t},\n\torder: {\n\t\tpre: function ( a ) {\n\t\t\treturn _empty(a) ?\n\t\t\t\t'' :\n\t\t\t\ta.replace ?\n\t\t\t\t\t_stripHtml(a).trim().toLowerCase() :\n\t\t\t\t\ta+'';\n\t\t}\n\t},\n\tsearch: _filterString(true, true)\n});\n\n\nDataTable.type('html-utf8', {\n\tdetect: {\n\t\tallOf: function ( d ) {\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1);\n\t\t},\n\t\toneOf: function ( d ) {\n\t\t\t// At least one data point must contain a `<` and a non-ASCII character\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\treturn navigator.languages &&\n\t\t\t\t! _empty( d ) &&\n\t\t\t\ttypeof d === 'string' &&\n\t\t\t\td.indexOf('<') !== -1 &&\n\t\t\t\ttypeof d === 'string' && d.match(/[^\\x00-\\x7F]/);\n\t\t}\n\t},\n\torder: {\n\t\tasc: __diacriticHtmlSort,\n\t\tdesc: function (a, b) {\n\t\t\treturn __diacriticHtmlSort(a, b) * -1;\n\t\t}\n\t},\n\tsearch: _filterString(true, true)\n});\n\n\nDataTable.type('date', {\n\tclassName: 'dt-type-date',\n\tdetect: {\n\t\tallOf: function ( d ) {\n\t\t\t// V8 tries _very_ hard to make a string passed into `Date.parse()`\n\t\t\t// valid, so we need to use a regex to restrict date formats. Use a\n\t\t\t// plug-in for anything other than ISO8601 style strings\n\t\t\tif ( d && !(d instanceof Date) && ! _re_date.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d);\n\t\t},\n\t\toneOf: function ( d ) {\n\t\t\t// At least one entry must be a date or a string with a date\n\t\t\treturn (d instanceof Date) || (typeof d === 'string' && _re_date.test(d));\n\t\t}\n\t},\n\torder: {\n\t\tpre: function ( d ) {\n\t\t\tvar ts = Date.parse( d );\n\t\t\treturn isNaN(ts) ? -Infinity : ts;\n\t\t}\n\t}\n});\n\n\nDataTable.type('html-num-fmt', {\n\tclassName: 'dt-type-numeric',\n\tdetect: {\n\t\tallOf: function ( d, settings ) {\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true, false );\n\t\t},\n\t\toneOf: function (d, settings) {\n\t\t\t// At least one data point must contain a numeric value\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, true, false );\n\t\t}\n\t},\n\torder: {\n\t\tpre: function ( d, s ) {\n\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\treturn __numericReplace( d, dp, _re_html, _re_formatted_numeric );\n\t\t}\n\t},\n\tsearch: _filterString(true, true)\n});\n\n\nDataTable.type('html-num', {\n\tclassName: 'dt-type-numeric',\n\tdetect: {\n\t\tallOf: function ( d, settings ) {\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, false, true );\n\t\t},\n\t\toneOf: function (d, settings) {\n\t\t\t// At least one data point must contain a numeric value\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _htmlNumeric( d, decimal, false, false );\n\t\t}\n\t},\n\torder: {\n\t\tpre: function ( d, s ) {\n\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\treturn __numericReplace( d, dp, _re_html );\n\t\t}\n\t},\n\tsearch: _filterString(true, true)\n});\n\n\nDataTable.type('num-fmt', {\n\tclassName: 'dt-type-numeric',\n\tdetect: {\n\t\tallOf: function ( d, settings ) {\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true, true );\n\t\t},\n\t\toneOf: function (d, settings) {\n\t\t\t// At least one data point must contain a numeric value\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, true, false );\n\t\t}\n\t},\n\torder: {\n\t\tpre: function ( d, s ) {\n\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\treturn __numericReplace( d, dp, _re_formatted_numeric );\n\t\t}\n\t}\n});\n\n\nDataTable.type('num', {\n\tclassName: 'dt-type-numeric',\n\tdetect: {\n\t\tallOf: function ( d, settings ) {\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, false, true );\n\t\t},\n\t\toneOf: function (d, settings) {\n\t\t\t// At least one data point must contain a numeric value\n\t\t\tvar decimal = settings.oLanguage.sDecimal;\n\t\t\treturn _isNumber( d, decimal, false, false );\n\t\t}\n\t},\n\torder: {\n\t\tpre: function (d, s) {\n\t\t\tvar dp = s.oLanguage.sDecimal;\n\t\t\treturn __numericReplace( d, dp );\n\t\t}\n\t}\n});\n\n\n\n\nvar __numericReplace = function ( d, decimalPlace, re1, re2 ) {\n\tif ( d !== 0 && (!d || d === '-') ) {\n\t\treturn -Infinity;\n\t}\n\t\n\tvar type = typeof d;\n\n\tif (type === 'number' || type === 'bigint') {\n\t\treturn d;\n\t}\n\n\t// If a decimal place other than `.` is used, it needs to be given to the\n\t// function so we can detect it and replace with a `.` which is the only\n\t// decimal place JavaScript recognises - it is not locale aware.\n\tif ( decimalPlace ) {\n\t\td = _numToDecimal( d, decimalPlace );\n\t}\n\n\tif ( d.replace ) {\n\t\tif ( re1 ) {\n\t\t\td = d.replace( re1, '' );\n\t\t}\n\n\t\tif ( re2 ) {\n\t\t\td = d.replace( re2, '' );\n\t\t}\n\t}\n\n\treturn d * 1;\n};\n\n\n$.extend( true, DataTable.ext.renderer, {\n\tfooter: {\n\t\t_: function ( settings, cell, classes ) {\n\t\t\tcell.addClass(classes.tfoot.cell);\n\t\t}\n\t},\n\n\theader: {\n\t\t_: function ( settings, cell, classes ) {\n\t\t\tcell.addClass(classes.thead.cell);\n\n\t\t\tif (! settings.oFeatures.bSort) {\n\t\t\t\tcell.addClass(classes.order.none);\n\t\t\t}\n\n\t\t\tvar titleRow = settings.titleRow;\n\t\t\tvar headerRows = cell.closest('thead').find('tr');\n\t\t\tvar rowIdx = cell.parent().index();\n\n\t\t\t// Conditions to not apply the ordering icons\n\t\t\tif (\n\t\t\t\t// Cells and rows which have the attribute to disable the icons\n\t\t\t\tcell.attr('data-dt-order') === 'disable' ||\n\t\t\t\tcell.parent().attr('data-dt-order') === 'disable' ||\n\n\t\t\t\t// titleRow support, for defining a specific row in the header\n\t\t\t\t(titleRow === true && rowIdx !== 0) ||\n\t\t\t\t(titleRow === false && rowIdx !== headerRows.length - 1) ||\n\t\t\t\t(typeof titleRow === 'number' && rowIdx !== titleRow)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// No additional mark-up required\n\t\t\t// Attach a sort listener to update on sort - note that using the\n\t\t\t// `DT` namespace will allow the event to be removed automatically\n\t\t\t// on destroy, while the `dt` namespaced event is the one we are\n\t\t\t// listening for\n\t\t\t$(settings.nTable).on( 'order.dt.DT column-visibility.dt.DT', function ( e, ctx, column ) {\n\t\t\t\tif ( settings !== ctx ) { // need to check if this is the host\n\t\t\t\t\treturn;               // table, not a nested one\n\t\t\t\t}\n\n\t\t\t\tvar sorting = ctx.sortDetails;\n\n\t\t\t\tif (! sorting) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar orderedColumns = _pluck(sorting, 'col');\n\n\t\t\t\t// This handler is only needed on column visibility if the column is part of the\n\t\t\t\t// ordering. If it isn't, then we can bail out to save performance. It could be a\n\t\t\t\t// separate event handler, but this is a balance between code reuse / size and performance\n\t\t\t\t// console.log(e, e.name, column, orderedColumns, orderedColumns.includes(column))\n\t\t\t\tif (e.type === 'column-visibility' && ! orderedColumns.includes(column)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar i;\n\t\t\t\tvar orderClasses = classes.order;\n\t\t\t\tvar columns = ctx.api.columns( cell );\n\t\t\t\tvar col = settings.aoColumns[columns.flatten()[0]];\n\t\t\t\tvar orderable = columns.orderable().includes(true);\n\t\t\t\tvar ariaType = '';\n\t\t\t\tvar indexes = columns.indexes();\n\t\t\t\tvar sortDirs = columns.orderable(true).flatten();\n\t\t\t\tvar tabIndex = settings.iTabIndex;\n\t\t\t\tvar canOrder = ctx.orderHandler && orderable;\n\n\t\t\t\tcell\n\t\t\t\t\t.removeClass(\n\t\t\t\t\t\torderClasses.isAsc +' '+\n\t\t\t\t\t\torderClasses.isDesc\n\t\t\t\t\t)\n\t\t\t\t\t.toggleClass( orderClasses.none, ! orderable )\n\t\t\t\t\t.toggleClass( orderClasses.canAsc, canOrder && sortDirs.includes('asc') )\n\t\t\t\t\t.toggleClass( orderClasses.canDesc, canOrder && sortDirs.includes('desc') );\n\n\t\t\t\t// Determine if all of the columns that this cell covers are included in the\n\t\t\t\t// current ordering\n\t\t\t\tvar isOrdering = true;\n\t\t\t\t\n\t\t\t\tfor (i=0; i<indexes.length; i++) {\n\t\t\t\t\tif (! orderedColumns.includes(indexes[i])) {\n\t\t\t\t\t\tisOrdering = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( isOrdering ) {\n\t\t\t\t\t// Get the ordering direction for the columns under this cell\n\t\t\t\t\t// Note that it is possible for a cell to be asc and desc sorting\n\t\t\t\t\t// (column spanning cells)\n\t\t\t\t\tvar orderDirs = columns.order();\n\n\t\t\t\t\tcell.addClass(\n\t\t\t\t\t\torderDirs.includes('asc') ? orderClasses.isAsc : '' +\n\t\t\t\t\t\torderDirs.includes('desc') ? orderClasses.isDesc : ''\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Find the first visible column that has ordering applied to it - it get's\n\t\t\t\t// the aria information, as the ARIA spec says that only one column should\n\t\t\t\t// be marked with aria-sort\n\t\t\t\tvar firstVis = -1; // column index\n\n\t\t\t\tfor (i=0; i<orderedColumns.length; i++) {\n\t\t\t\t\tif (settings.aoColumns[orderedColumns[i]].bVisible) {\n\t\t\t\t\t\tfirstVis = orderedColumns[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (indexes[0] == firstVis) {\n\t\t\t\t\tvar firstSort = sorting[0];\n\t\t\t\t\tvar sortOrder = col.asSorting;\n\n\t\t\t\t\tcell.attr('aria-sort', firstSort.dir === 'asc' ? 'ascending' : 'descending');\n\n\t\t\t\t\t// Determine if the next click will remove sorting or change the sort\n\t\t\t\t\tariaType = ! sortOrder[firstSort.index + 1] ? 'Remove' : 'Reverse';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcell.removeAttr('aria-sort');\n\t\t\t\t}\n\n\t\t\t\t// Make the headers tab-able for keyboard navigation\n\t\t\t\tif (orderable) {\n\t\t\t\t\tvar orderSpan = cell.find('.dt-column-order');\n\t\t\t\t\t\n\t\t\t\t\torderSpan\n\t\t\t\t\t\t.attr('role', 'button')\n\t\t\t\t\t\t.attr('aria-label', orderable\n\t\t\t\t\t\t\t? col.ariaTitle + ctx.api.i18n('oAria.orderable' + ariaType)\n\t\t\t\t\t\t\t: col.ariaTitle\n\t\t\t\t\t\t);\n\n\t\t\t\t\tif (tabIndex !== -1) {\n\t\t\t\t\t\torderSpan.attr('tabindex', tabIndex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t},\n\n\tlayout: {\n\t\t_: function ( settings, container, items ) {\n\t\t\tvar classes = settings.oClasses.layout;\n\t\t\tvar row = $('<div/>')\n\t\t\t\t.attr('id', items.id || null)\n\t\t\t\t.addClass(items.className || classes.row)\n\t\t\t\t.appendTo( container );\n\n\t\t\tDataTable.ext.renderer.layout._forLayoutRow(items, function (key, val) {\n\t\t\t\tif (key === 'id' || key === 'className') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar klass = '';\n\n\t\t\t\tif (val.table) {\n\t\t\t\t\trow.addClass(classes.tableRow);\n\t\t\t\t\tklass += classes.tableCell + ' ';\n\t\t\t\t}\n\n\t\t\t\tif (key === 'start') {\n\t\t\t\t\tklass += classes.start;\n\t\t\t\t}\n\t\t\t\telse if (key === 'end') {\n\t\t\t\t\tklass += classes.end;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tklass += classes.full;\n\t\t\t\t}\n\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.attr({\n\t\t\t\t\t\tid: val.id || null,\n\t\t\t\t\t\t\"class\": val.className\n\t\t\t\t\t\t\t? val.className\n\t\t\t\t\t\t\t: classes.cell + ' ' + klass\n\t\t\t\t\t})\n\t\t\t\t\t.append( val.contents )\n\t\t\t\t\t.appendTo( row );\n\t\t\t});\n\t\t},\n\n\t\t// Shared for use by the styling frameworks\n\t\t_forLayoutRow: function (items, fn) {\n\t\t\t// As we are inserting dom elements, we need start / end in a\n\t\t\t// specific order, this function is used for sorting the layout\n\t\t\t// keys.\n\t\t\tvar layoutEnum = function (x) {\n\t\t\t\tswitch (x) {\n\t\t\t\t\tcase '': return 0;\n\t\t\t\t\tcase 'start': return 1;\n\t\t\t\t\tcase 'end': return 2;\n\t\t\t\t\tdefault: return 3;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tObject\n\t\t\t\t.keys(items)\n\t\t\t\t.sort(function (a, b) {\n\t\t\t\t\treturn layoutEnum(a) - layoutEnum(b);\n\t\t\t\t})\n\t\t\t\t.forEach(function (key) {\n\t\t\t\t\tfn(key, items[key]);\n\t\t\t\t});\n\t\t}\n\t}\n} );\n\n\nDataTable.feature = {};\n\n// Third parameter is internal only!\nDataTable.feature.register = function ( name, cb, legacy ) {\n\tDataTable.ext.features[ name ] = cb;\n\n\tif (legacy) {\n\t\t_ext.feature.push({\n\t\t\tcFeature: legacy,\n\t\t\tfnInit: cb\n\t\t});\n\t}\n};\n\nfunction _divProp(el, prop, val) {\n\tif (val) {\n\t\tel[prop] = val;\n\t}\n}\n\nDataTable.feature.register( 'div', function ( settings, opts ) {\n\tvar n = $('<div>')[0];\n\n\tif (opts) {\n\t\t_divProp(n, 'className', opts.className);\n\t\t_divProp(n, 'id', opts.id);\n\t\t_divProp(n, 'innerHTML', opts.html);\n\t\t_divProp(n, 'textContent', opts.text);\n\t}\n\n\treturn n;\n} );\n\nDataTable.feature.register( 'info', function ( settings, opts ) {\n\t// For compatibility with the legacy `info` top level option\n\tif (! settings.oFeatures.bInfo) {\n\t\treturn null;\n\t}\n\n\tvar\n\t\tlang  = settings.oLanguage,\n\t\ttid = settings.sTableId,\n\t\tn = $('<div/>', {\n\t\t\t'class': settings.oClasses.info.container,\n\t\t} );\n\n\topts = $.extend({\n\t\tcallback: lang.fnInfoCallback,\n\t\tempty: lang.sInfoEmpty,\n\t\tpostfix: lang.sInfoPostFix,\n\t\tsearch: lang.sInfoFiltered,\n\t\ttext: lang.sInfo,\n\t}, opts);\n\n\n\t// Update display on each draw\n\tsettings.aoDrawCallback.push(function (s) {\n\t\t_fnUpdateInfo(s, opts, n);\n\t});\n\n\t// For the first info display in the table, we add a callback and aria information.\n\tif (! settings._infoEl) {\n\t\tn.attr({\n\t\t\t'aria-live': 'polite',\n\t\t\tid: tid+'_info',\n\t\t\trole: 'status'\n\t\t});\n\n\t\t// Table is described by our info div\n\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\n\t\tsettings._infoEl = n;\n\t}\n\n\treturn n;\n}, 'i' );\n\n/**\n * Update the information elements in the display\n *  @param {object} settings dataTables settings object\n *  @memberof DataTable#oApi\n */\nfunction _fnUpdateInfo ( settings, opts, node )\n{\n\tvar\n\t\tstart = settings._iDisplayStart+1,\n\t\tend   = settings.fnDisplayEnd(),\n\t\tmax   = settings.fnRecordsTotal(),\n\t\ttotal = settings.fnRecordsDisplay(),\n\t\tout   = total\n\t\t\t? opts.text\n\t\t\t: opts.empty;\n\n\tif ( total !== max ) {\n\t\t// Record set after filtering\n\t\tout += ' ' + opts.search;\n\t}\n\n\t// Convert the macros\n\tout += opts.postfix;\n\tout = _fnMacros( settings, out );\n\n\tif ( opts.callback ) {\n\t\tout = opts.callback.call( settings.oInstance,\n\t\t\tsettings, start, end, max, total, out\n\t\t);\n\t}\n\n\tnode.html( out );\n\n\t_fnCallbackFire(settings, null, 'info', [settings, node[0], out]);\n}\n\nvar __searchCounter = 0;\n\n// opts\n// - text\n// - placeholder\nDataTable.feature.register( 'search', function ( settings, opts ) {\n\t// Don't show the input if filtering isn't available on the table\n\tif (! settings.oFeatures.bFilter) {\n\t\treturn null;\n\t}\n\n\tvar classes = settings.oClasses.search;\n\tvar tableId = settings.sTableId;\n\tvar language = settings.oLanguage;\n\tvar previousSearch = settings.oPreviousSearch;\n\tvar input = '<input type=\"search\" class=\"'+classes.input+'\"/>';\n\n\topts = $.extend({\n\t\tplaceholder: language.sSearchPlaceholder,\n\t\tprocessing: false,\n\t\ttext: language.sSearch\n\t}, opts);\n\n\t// The _INPUT_ is optional - is appended if not present\n\tif (opts.text.indexOf('_INPUT_') === -1) {\n\t\topts.text += '_INPUT_';\n\t}\n\n\topts.text = _fnMacros(settings, opts.text);\n\n\t// We can put the <input> outside of the label if it is at the start or end\n\t// which helps improve accessability (not all screen readers like implicit\n\t// for elements).\n\tvar end = opts.text.match(/_INPUT_$/);\n\tvar start = opts.text.match(/^_INPUT_/);\n\tvar removed = opts.text.replace(/_INPUT_/, '');\n\tvar str = '<label>' + opts.text + '</label>';\n\n\tif (start) {\n\t\tstr = '_INPUT_<label>' + removed + '</label>';\n\t}\n\telse if (end) {\n\t\tstr = '<label>' + removed + '</label>_INPUT_';\n\t}\n\n\tvar filter = $('<div>')\n\t\t.addClass(classes.container)\n\t\t.append(str.replace(/_INPUT_/, input));\n\n\t// add for and id to label and input\n\tfilter.find('label').attr('for', 'dt-search-' + __searchCounter);\n\tfilter.find('input').attr('id', 'dt-search-' + __searchCounter);\n\t__searchCounter++;\n\n\tvar searchFn = function(event) {\n\t\tvar val = this.value;\n\n\t\tif(previousSearch.return && event.key !== \"Enter\") {\n\t\t\treturn;\n\t\t}\n\n\t\t/* Now do the filter */\n\t\tif ( val != previousSearch.search ) {\n\t\t\t_fnProcessingRun(settings, opts.processing, function () {\n\t\t\t\tpreviousSearch.search = val;\n\t\t\n\t\t\t\t_fnFilterComplete( settings, previousSearch );\n\t\t\n\t\t\t\t// Need to redraw, without resorting\n\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t_fnDraw( settings );\n\t\t\t});\n\t\t}\n\t};\n\n\tvar searchDelay = settings.searchDelay !== null ?\n\t\tsettings.searchDelay :\n\t\t0;\n\n\tvar jqFilter = $('input', filter)\n\t\t.val( previousSearch.search )\n\t\t.attr( 'placeholder', opts.placeholder )\n\t\t.on(\n\t\t\t'keyup.DT search.DT input.DT paste.DT cut.DT',\n\t\t\tsearchDelay ?\n\t\t\t\tDataTable.util.debounce( searchFn, searchDelay ) :\n\t\t\t\tsearchFn\n\t\t)\n\t\t.on( 'mouseup.DT', function(e) {\n\t\t\t// Edge fix! Edge 17 does not trigger anything other than mouse events when clicking\n\t\t\t// on the clear icon (Edge bug 17584515). This is safe in other browsers as `searchFn`\n\t\t\t// checks the value to see if it has changed. In other browsers it won't have.\n\t\t\tsetTimeout( function () {\n\t\t\t\tsearchFn.call(jqFilter[0], e);\n\t\t\t}, 10);\n\t\t} )\n\t\t.on( 'keypress.DT', function(e) {\n\t\t\t/* Prevent form submission */\n\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} )\n\t\t.attr('aria-controls', tableId);\n\n\t// Update the input elements whenever the table is filtered\n\t$(settings.nTable).on( 'search.dt.DT', function ( ev, s ) {\n\t\tif ( settings === s && jqFilter[0] !== document.activeElement ) {\n\t\t\tjqFilter.val( typeof previousSearch.search !== 'function'\n\t\t\t\t? previousSearch.search\n\t\t\t\t: ''\n\t\t\t);\n\t\t}\n\t} );\n\n\treturn filter;\n}, 'f' );\n\n// opts\n// - type - button configuration\n// - buttons - number of buttons to show - must be odd\nDataTable.feature.register( 'paging', function ( settings, opts ) {\n\t// Don't show the paging input if the table doesn't have paging enabled\n\tif (! settings.oFeatures.bPaginate) {\n\t\treturn null;\n\t}\n\n\topts = $.extend({\n\t\tbuttons: DataTable.ext.pager.numbers_length,\n\t\ttype: settings.sPaginationType,\n\t\tboundaryNumbers: true,\n\t\tfirstLast: true,\n\t\tpreviousNext: true,\n\t\tnumbers: true\n\t}, opts);\n\n\tvar host = $('<div/>')\n\t\t.addClass(settings.oClasses.paging.container + (opts.type ? ' paging_' + opts.type : ''))\n\t\t.append(\n\t\t\t$('<nav>')\n\t\t\t\t.attr('aria-label', 'pagination')\n\t\t\t\t.addClass(settings.oClasses.paging.nav)\n\t\t);\n\tvar draw = function () {\n\t\t_pagingDraw(settings, host.children(), opts);\n\t};\n\n\tsettings.aoDrawCallback.push(draw);\n\n\t// Responsive redraw of paging control\n\t$(settings.nTable).on('column-sizing.dt.DT', draw);\n\n\treturn host;\n}, 'p' );\n\n/**\n * Dynamically create the button type array based on the configuration options.\n * This will only happen if the paging type is not defined.\n */\nfunction _pagingDynamic(opts) {\n\tvar out = [];\n\n\tif (opts.numbers) {\n\t\tout.push('numbers');\n\t}\n\n\tif (opts.previousNext) {\n\t\tout.unshift('previous');\n\t\tout.push('next');\n\t}\n\n\tif (opts.firstLast) {\n\t\tout.unshift('first');\n\t\tout.push('last');\n\t}\n\n\treturn out;\n}\n\nfunction _pagingDraw(settings, host, opts) {\n\tif (! settings._bInitComplete) {\n\t\treturn;\n\t}\n\n\tvar\n\t\tplugin = opts.type\n\t\t\t? DataTable.ext.pager[ opts.type ]\n\t\t\t: _pagingDynamic,\n\t\taria = settings.oLanguage.oAria.paginate || {},\n\t\tstart      = settings._iDisplayStart,\n\t\tlen        = settings._iDisplayLength,\n\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\tall        = len === -1,\n\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\tbuttons = [],\n\t\tbuttonEls = [],\n\t\tbuttonsNested = plugin(opts)\n\t\t\t.map(function (val) {\n\t\t\t\treturn val === 'numbers'\n\t\t\t\t\t? _pagingNumbers(page, pages, opts.buttons, opts.boundaryNumbers)\n\t\t\t\t\t: val;\n\t\t\t});\n\n\t// .flat() would be better, but not supported in old Safari\n\tbuttons = buttons.concat.apply(buttons, buttonsNested);\n\n\tfor (var i=0 ; i<buttons.length ; i++) {\n\t\tvar button = buttons[i];\n\n\t\tvar btnInfo = _pagingButtonInfo(settings, button, page, pages);\n\t\tvar btn = _fnRenderer( settings, 'pagingButton' )(\n\t\t\tsettings,\n\t\t\tbutton,\n\t\t\tbtnInfo.display,\n\t\t\tbtnInfo.active,\n\t\t\tbtnInfo.disabled\n\t\t);\n\n\t\tvar ariaLabel = typeof button === 'string'\n\t\t\t? aria[ button ]\n\t\t\t: aria.number\n\t\t\t\t? aria.number + (button+1)\n\t\t\t\t: null;\n\n\t\t// Common attributes\n\t\t$(btn.clicker).attr({\n\t\t\t'aria-controls': settings.sTableId,\n\t\t\t'aria-disabled': btnInfo.disabled ? 'true' : null,\n\t\t\t'aria-current': btnInfo.active ? 'page' : null,\n\t\t\t'aria-label': ariaLabel,\n\t\t\t'data-dt-idx': button,\n\t\t\t'tabIndex': btnInfo.disabled\n\t\t\t\t? -1\n\t\t\t\t: settings.iTabIndex && btn.clicker[0].nodeName.toLowerCase() !== 'span'\n\t\t\t\t\t? settings.iTabIndex\n\t\t\t\t\t: null, // `0` doesn't need a tabIndex since it is the default\n\t\t});\n\n\t\tif (typeof button !== 'number') {\n\t\t\t$(btn.clicker).addClass(button);\n\t\t}\n\n\t\t_fnBindAction(\n\t\t\tbtn.clicker, {action: button}, function(e) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t}\n\t\t);\n\n\t\tbuttonEls.push(btn.display);\n\t}\n\n\tvar wrapped = _fnRenderer(settings, 'pagingContainer')(\n\t\tsettings, buttonEls\n\t);\n\n\tvar activeEl = host.find(document.activeElement).data('dt-idx');\n\n\thost.empty().append(wrapped);\n\n\tif ( activeEl !== undefined ) {\n\t\thost.find( '[data-dt-idx='+activeEl+']' ).trigger('focus');\n\t}\n\n\t// Responsive - check if the buttons are over two lines based on the\n\t// height of the buttons and the container.\n\tif (buttonEls.length) {\n\t\tvar outerHeight = $(buttonEls[0]).outerHeight();\n\t\n\t\tif (\n\t\t\topts.buttons > 1 && // prevent infinite\n\t\t\touterHeight > 0 && // will be 0 if hidden\n\t\t\t$(host).height() >= (outerHeight * 2) - 10\n\t\t) {\n\t\t\t_pagingDraw(settings, host, $.extend({}, opts, { buttons: opts.buttons - 2 }));\n\t\t}\n\t}\n}\n\n/**\n * Get properties for a button based on the current paging state of the table\n *\n * @param {*} settings DT settings object\n * @param {*} button The button type in question\n * @param {*} page Table's current page\n * @param {*} pages Number of pages\n * @returns Info object\n */\nfunction _pagingButtonInfo(settings, button, page, pages) {\n\tvar lang = settings.oLanguage.oPaginate;\n\tvar o = {\n\t\tdisplay: '',\n\t\tactive: false,\n\t\tdisabled: false\n\t};\n\n\tswitch ( button ) {\n\t\tcase 'ellipsis':\n\t\t\to.display = '&#x2026;';\n\t\t\tbreak;\n\n\t\tcase 'first':\n\t\t\to.display = lang.sFirst;\n\n\t\t\tif (page === 0) {\n\t\t\t\to.disabled = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'previous':\n\t\t\to.display = lang.sPrevious;\n\n\t\t\tif ( page === 0 ) {\n\t\t\t\to.disabled = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'next':\n\t\t\to.display = lang.sNext;\n\n\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\to.disabled = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'last':\n\t\t\to.display = lang.sLast;\n\n\t\t\tif ( pages === 0 || page === pages-1 ) {\n\t\t\t\to.disabled = true;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tif ( typeof button === 'number' ) {\n\t\t\t\to.display = settings.fnFormatNumber( button + 1 );\n\t\t\t\t\n\t\t\t\tif (page === button) {\n\t\t\t\t\to.active = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn o;\n}\n\n/**\n * Compute what number buttons to show in the paging control\n *\n * @param {*} page Current page\n * @param {*} pages Total number of pages\n * @param {*} buttons Target number of number buttons\n * @param {boolean} addFirstLast Indicate if page 1 and end should be included\n * @returns Buttons to show\n */\nfunction _pagingNumbers ( page, pages, buttons, addFirstLast ) {\n\tvar\n\t\tnumbers = [],\n\t\thalf = Math.floor(buttons / 2),\n\t\tbefore = addFirstLast ? 2 : 1,\n\t\tafter = addFirstLast ? 1 : 0;\n\n\tif ( pages <= buttons ) {\n\t\tnumbers = _range(0, pages);\n\t}\n\telse if (buttons === 1) {\n\t\t// Single button - current page only\n\t\tnumbers = [page];\n\t}\n\telse if (buttons === 3) {\n\t\t// Special logic for just three buttons\n\t\tif (page <= 1) {\n\t\t\tnumbers = [0, 1, 'ellipsis'];\n\t\t}\n\t\telse if (page >= pages - 2) {\n\t\t\tnumbers = _range(pages-2, pages);\n\t\t\tnumbers.unshift('ellipsis');\n\t\t}\n\t\telse {\n\t\t\tnumbers = ['ellipsis', page, 'ellipsis'];\n\t\t}\n\t}\n\telse if ( page <= half ) {\n\t\tnumbers = _range(0, buttons-before);\n\t\tnumbers.push('ellipsis');\n\n\t\tif (addFirstLast) {\n\t\t\tnumbers.push(pages-1);\n\t\t}\n\t}\n\telse if ( page >= pages - 1 - half ) {\n\t\tnumbers = _range(pages-(buttons-before), pages);\n\t\tnumbers.unshift('ellipsis');\n\n\t\tif (addFirstLast) {\n\t\t\tnumbers.unshift(0);\n\t\t}\n\t}\n\telse {\n\t\tnumbers = _range(page-half+before, page+half-after);\n\t\tnumbers.push('ellipsis');\n\t\tnumbers.unshift('ellipsis');\n\n\t\tif (addFirstLast) {\n\t\t\tnumbers.push(pages-1);\n\t\t\tnumbers.unshift(0);\n\t\t}\n\t}\n\n\treturn numbers;\n}\n\nvar __lengthCounter = 0;\n\n// opts\n// - menu\n// - text\nDataTable.feature.register( 'pageLength', function ( settings, opts ) {\n\tvar features = settings.oFeatures;\n\n\t// For compatibility with the legacy `pageLength` top level option\n\tif (! features.bPaginate || ! features.bLengthChange) {\n\t\treturn null;\n\t}\n\n\topts = $.extend({\n\t\tmenu: settings.aLengthMenu,\n\t\ttext: settings.oLanguage.sLengthMenu\n\t}, opts);\n\n\tvar\n\t\tclasses  = settings.oClasses.length,\n\t\ttableId  = settings.sTableId,\n\t\tmenu     = opts.menu,\n\t\tlengths  = [],\n\t\tlanguage = [],\n\t\ti;\n\n\t// Options can be given in a number of ways\n\tif (Array.isArray( menu[0] )) {\n\t\t// Old 1.x style - 2D array\n\t\tlengths = menu[0];\n\t\tlanguage = menu[1];\n\t}\n\telse {\n\t\tfor ( i=0 ; i<menu.length ; i++ ) {\n\t\t\t// An object with different label and value\n\t\t\tif ($.isPlainObject(menu[i])) {\n\t\t\t\tlengths.push(menu[i].value);\n\t\t\t\tlanguage.push(menu[i].label);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Or just a number to display and use\n\t\t\t\tlengths.push(menu[i]);\n\t\t\t\tlanguage.push(menu[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\t// We can put the <select> outside of the label if it is at the start or\n\t// end which helps improve accessability (not all screen readers like\n\t// implicit for elements).\n\tvar end = opts.text.match(/_MENU_$/);\n\tvar start = opts.text.match(/^_MENU_/);\n\tvar removed = opts.text.replace(/_MENU_/, '');\n\tvar str = '<label>' + opts.text + '</label>';\n\n\tif (start) {\n\t\tstr = '_MENU_<label>' + removed + '</label>';\n\t}\n\telse if (end) {\n\t\tstr = '<label>' + removed + '</label>_MENU_';\n\t}\n\n\t// Wrapper element - use a span as a holder for where the select will go\n\tvar tmpId = 'tmp-' + (+new Date())\n\tvar div = $('<div/>')\n\t\t.addClass( classes.container )\n\t\t.append(\n\t\t\tstr.replace( '_MENU_', '<span id=\"'+tmpId+'\"></span>' )\n\t\t);\n\n\t// Save text node content for macro updating\n\tvar textNodes = [];\n\tArray.prototype.slice.call(div.find('label')[0].childNodes).forEach(function (el) {\n\t\tif (el.nodeType === Node.TEXT_NODE) {\n\t\t\ttextNodes.push({\n\t\t\t\tel: el,\n\t\t\t\ttext: el.textContent\n\t\t\t});\n\t\t}\n\t});\n\n\t// Update the label text in case it has an entries value\n\tvar updateEntries = function (len) {\n\t\ttextNodes.forEach(function (node) {\n\t\t\tnode.el.textContent = _fnMacros(settings, node.text, len);\n\t\t});\n\t}\n\n\t// Next, the select itself, along with the options\n\tvar select = $('<select/>', {\n\t\t'aria-controls': tableId,\n\t\t'class':         classes.select\n\t} );\n\n\tfor ( i=0 ; i<lengths.length ; i++ ) {\n\t\t// Attempt to look up the length from the i18n options\n\t\tvar label = settings.api.i18n('lengthLabels.' + lengths[i], null);\n\n\t\tif (label === null) {\n\t\t\t// If not present, fallback to old style\n\t\t\tlabel = typeof language[i] === 'number' ?\n\t\t\t\tsettings.fnFormatNumber( language[i] ) :\n\t\t\t\tlanguage[i];\n\t\t}\n\n\t\tselect[0][ i ] = new Option(label, lengths[i]);\n\t}\n\n\t// add for and id to label and input\n\tdiv.find('label').attr('for', 'dt-length-' + __lengthCounter);\n\tselect.attr('id', 'dt-length-' + __lengthCounter);\n\t__lengthCounter++;\n\n\t// Swap in the select list\n\tdiv.find('#' + tmpId).replaceWith(select);\n\n\t// Can't use `select` variable as user might provide their own and the\n\t// reference is broken by the use of outerHTML\n\t$('select', div)\n\t\t.val( settings._iDisplayLength )\n\t\t.on( 'change.DT', function() {\n\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t_fnDraw( settings );\n\t\t} );\n\n\t// Update node value whenever anything changes the table's length\n\t$(settings.nTable).on( 'length.dt.DT', function (e, s, len) {\n\t\tif ( settings === s ) {\n\t\t\t$('select', div).val( len );\n\n\t\t\t// Resolve plurals in the text for the new length\n\t\t\tupdateEntries(len);\n\t\t}\n\t} );\n\n\tupdateEntries(settings._iDisplayLength);\n\n\treturn div;\n}, 'l' );\n\n// jQuery access\n$.fn.dataTable = DataTable;\n\n// Provide access to the host jQuery object (circular reference)\nDataTable.$ = $;\n\n// Legacy aliases\n$.fn.dataTableSettings = DataTable.settings;\n$.fn.dataTableExt = DataTable.ext;\n\n// With a capital `D` we return a DataTables API instance rather than a\n// jQuery object\n$.fn.DataTable = function ( opts ) {\n\treturn $(this).dataTable( opts ).api();\n};\n\n// All properties that are available to $.fn.dataTable should also be\n// available on $.fn.DataTable\n$.each( DataTable, function ( prop, val ) {\n\t$.fn.DataTable[ prop ] = val;\n} );\n\nexport default DataTable;\n", "/*! DataTables Bootstrap 5 integration\n * \u00A9 SpryMedia Ltd - datatables.net/license\n */\n\nimport jQuery from 'jquery';\nimport DataTable from 'datatables.net';\n\n// Allow reassignment of the $ variable\nlet $ = jQuery;\n\n\n/**\n * DataTables integration for Bootstrap 5.\n *\n * This file sets the defaults and adds options to DataTables to style its\n * controls using Bootstrap. See https://datatables.net/manual/styling/bootstrap\n * for further information.\n */\n\n/* Set the defaults for DataTables initialisation */\n$.extend( true, DataTable.defaults, {\n\trenderer: 'bootstrap'\n} );\n\n\n/* Default class modification */\n$.extend( true, DataTable.ext.classes, {\n\tcontainer: \"dt-container dt-bootstrap5\",\n\tsearch: {\n\t\tinput: \"form-control form-control-sm\"\n\t},\n\tlength: {\n\t\tselect: \"form-select form-select-sm\"\n\t},\n\tprocessing: {\n\t\tcontainer: \"dt-processing card\"\n\t},\n\tlayout: {\n\t\trow: 'row mt-2 justify-content-between',\n\t\tcell: 'd-md-flex justify-content-between align-items-center',\n\t\ttableCell: 'col-12',\n\t\tstart: 'dt-layout-start col-md-auto me-auto',\n\t\tend: 'dt-layout-end col-md-auto ms-auto',\n\t\tfull: 'dt-layout-full col-md'\n\t}\n} );\n\n\n/* Bootstrap paging button renderer */\nDataTable.ext.renderer.pagingButton.bootstrap = function (settings, buttonType, content, active, disabled) {\n\tvar btnClasses = ['dt-paging-button', 'page-item'];\n\n\tif (active) {\n\t\tbtnClasses.push('active');\n\t}\n\n\tif (disabled) {\n\t\tbtnClasses.push('disabled')\n\t}\n\n\tvar li = $('<li>').addClass(btnClasses.join(' '));\n\tvar a = $('<button>', {\n\t\t'class': 'page-link',\n\t\trole: 'link',\n\t\ttype: 'button'\n\t})\n\t\t.html(content)\n\t\t.appendTo(li);\n\n\treturn {\n\t\tdisplay: li,\n\t\tclicker: a\n\t};\n};\n\nDataTable.ext.renderer.pagingContainer.bootstrap = function (settings, buttonEls) {\n\treturn $('<ul/>').addClass('pagination').append(buttonEls);\n};\n\n\nexport default DataTable;\n", "import { Controller } from \"@hotwired/stimulus\"\n\nrequire('leaflet/dist/leaflet')\nrequire('leaflet-providers/leaflet-providers')\nrequire('leaflet.sync')\nrequire('leaflet-fullscreen/dist/Leaflet.fullscreen')\nimport DataTable from 'datatables.net-bs5'\nrequire('datatables.net-scroller' )\nrequire('d3')\nrequire('d3-scale')\nrequire('d3-simple-slider/dist/d3-simple-slider')\nrequire('d3-svg-legend')\n\nimport { template } from \"lodash\"\nimport * as d3Base from 'd3'\nimport { sliderHorizontal } from 'd3-simple-slider'\nimport { legendColor } from 'd3-svg-legend'\nimport { legend } from '../src/legend'\nimport { responsivefy } from '../responsivefy'\n\n// attach all d3 plugins to the d3 library\nconst d3 = Object.assign(d3Base, { sliderHorizontal, legendColor })\n\nimport { deserialize } from \"deserialize-json-api\"\n\nconst overlays = {\n  water: {\n    overlay: 'water',\n    colormap: 'blues',\n    range_l: 0.28244146704673767,\n    range_r: 1\n  },\n  sanitation: {\n    overlay: 'sani',\n    colormap: 'reds',\n    range_l: 0.28244146704673767,\n    range_r: 1\n  },\n  cases: {\n    overlay: 'cases',\n    colormap: 'reds',\n    range_l: 0,\n    range_r: 4.582231044769287\n  },\n  rates: {\n    overlay: 'rates',\n    colormap: 'rdbu_r',\n    range_l: 1.0000000116860974e-7,\n    range_r: 0.00006835951353423297\n  }\n}\n\nexport default class extends Controller {\n  static targets = [ 'locationList', 'locationSelector', 'locationForm', 'childLocationForm', 'childLocationError', 'assetImageLeft', 'assetImageRight', 'locationMap', 'countryMap', 'compositePreview', 'maiInfoTemplate', 'printableView', 'vaccinationFigure', 'vaccinationTable', 'vaccinationDataTemplate', 'epicurve', 'epicurveTitle' ]\n  \n  initialize() {\n    this.maps = {}\n    this.layers = {}\n    this.legends = {}\n    this.activeRight = '#summary-stats'\n    \n    this.initializeCountryMaps()\n\n    //this.initializePrintableView()\n\n    this.showSummaryStats()\n\n    $(\".unified-data-sets\").dataTable({\n      paging: false,\n      searching: false,\n      scrollY: 200,\n      scrollCollapse: true\n    })\n\n    if (this.hasEpicurveTarget) {\n      this.epicurveFigure = {}\n      \n      this.initializeEpicurve()\n      this.renderEpicurve()\n    }\n  }\n\n  initializePrintableView() {\n    this.initializePersistenceFigure(`#dataviz-center`) \n    this.initializeCasesFigure(`#cases-center`)\n    this.initializeSeasonalityFigure(`#seasonality`)\n    this.initializeHotspotFigure(`#hotspot-center`)\n  }\n\n  showSummaryStats() {    \n    let map = this.maps['mapleft']\n\n    this.layers['suspected'] = L.geoJSON($('#latestSuspectedCard').data('geojson'), {\n      style: (feature) => {\n        return { color: '#01bda6', fillOpacity: 0.5}\n      }})\n      .setStyle({className: 'latest-suspected'})\n      .addTo(map)\n\n    this.layers['confirmed'] = L.geoJSON($('#latestConfirmedCard').data('geojson'), {\n      style: (feature) => {\n        return { className: 'latest-confirmed', color: '#6879ce', fillOpacity: 0.5}\n      }}).addTo(map)\n\n    if (this.activeRight != '#summary-stats') {\n      this.clearSecondaryPanel()\n\n      this.activeRight = '#summary-stats'\n\n      $(this.activeRight).show()\n    }\n  }\n  \n  toggleMapSync() {\n    if ( $('#sync_maps').prop('checked') ) {\n      this.maps['mapleft'].sync(this.maps['mapright'])\n      this.maps['mapright'].sync(this.maps['mapleft'])\n    } else {\n      this.maps['mapleft'].unsync(this.maps['mapright'])\n      this.maps['mapright'].unsync(this.maps['mapleft'])\n    }\n  }\n\n  initializeVaccinationTable() {    \n    $(\"#vaccinations-table\").dataTable({\n      retrieve: true,\n      paging: false,\n      searching: false,\n      scrollY: 400,\n      order: [4, 'desc']})\n  }\n    \n  initializeCountryMaps() {\n    $('.map-container').each((index, element) => {\n      let container = element.closest('.maps-container')\n\n      if (! $(container).hasClass('hidden-flat')) {\n\tthis.initializeMap(element)\n      }\n    })\t\t\t     \n  }\n\n  initializeMap(map_container) {\n    let id = $(map_container).data('location-period-id')\n\n    let placement = $(map_container).data('placement')\n    \n    let mapName = `map${placement}`\n\n    this.maps[mapName] = L.map(`location-period-map-${placement}`, {\n      fullscreenControl: true,\n      attributionControl: false})\n      .fitBounds([[$(map_container).data('y-min'),\n\t\t   $(map_container).data('x-min') ],\n\t\t  [$(map_container).data('y-max'),\n\t\t   $(map_container).data('x-max')]])\n    \n    L.tileLayer.provider('CartoDB.Positron').addTo(this.maps[mapName])   \n    \n    if ($(map_container).data('geojson'))\n      L.geoJSON($(map_container).data('geojson'), {\n\tstyle: (feature) => {\n          return { color: '#76CCCE', fillOpacity: 0.05}\n\t}})\n      .addTo(this.maps[mapName])\n  }\n\n  clearSecondaryPanel() {\n    $(this.activeRight).hide()\n\n    this.clearLayers('right')\n  }\n  \n  /* SECTION - OVERLAYS */\n  activateOverlay(srcElement, overlayName, placement) {\n    if (placement == 'right' && this.activeRight != '#maps-right') {\n      this.clearSecondaryPanel()\n\n      this.activeRight = '#maps-right'\n\n      $(this.activeRight).removeClass('hidden-flat')\n\n      $(this.activeRight).show( () => {\n\tif (! this.maps['mapright']) {\n\t  this.initializeMap('.map-container-right')\n\n\t  this.applyOverlay(placement, overlayName)\n\t}\n      })\n    } else {\n      this.applyOverlay(placement, overlayName)\n    }\n\n    $(`#maps-${placement}`).find(`.${overlayName}-caption`).show()\n  }\n  \n  applyOverlay(placement, overlayName) {\n    this.clearLayers(placement)\n    \n    let map = this.maps[`map${placement}`]\n    \n    let overlay = overlays[overlayName]\n    \n    let layerName = `${overlayName}Layer${placement}`\n    \n    if (this.layers[layerName]) {\n      map.removeLayer(this.layers[layerName])\n      \n      this.layers[layerName] = null\n    } else {      \n      this.layers[layerName] = L.tileLayer(`${gon.terracotta_host}/singleband/${overlay.overlay}/{z}/{x}/{y}.png?colormap=${overlay.colormap}&stretch_range=[${overlay.range_l},${overlay.range_r}]`,\n\t\t   {opacity: 0.4})\n\t.addTo(map)\n    }\n  }\n\n  clearOverlays(event) {\n    this.clearLayers($(event.srcElement).closest('.button-controls').data('placement'))\n  }\n  \n  clearLayers(placement) {\n    let mapName = `map${placement}`\n    \n    Object.keys(overlays).forEach( (overlay) => {\n      let layerName = `${overlay}Layer${placement}`\n      let legendName = `${overlay}Legend${placement}`\n  \n      if (this.layers[layerName]) {\n\tthis.maps[mapName].removeLayer(this.layers[layerName])\n\n\tthis.layers[layerName] = null\n      }\n      \n      if (this.legends[legendName]) {\n\tthis.maps[mapName].removeControl(this.legends[legendName])\n\n\tthis.legends[legendName] = null\n      }\n    })\n\n    this.clearMapOverlays()\n\n    $(`#maps-${placement} .caption`).hide()\n  }\n\n  clearMapOverlays() {\n    let layers = ['suspected', 'confirmed', 'hotspots', 'vaccinations', 'seasonality', 'regional_ocs']\n\n    layers.forEach( (layerName) => {\n      if (this.layers[layerName]) {\n\tthis.maps['mapleft'].removeLayer(this.layers[layerName])\n\t\n\tthis.layers[layerName] = null\n      }\n    })\t\t\t       \n  }\n  \n  changeOpacity(e) {\n    let value = $(e.srcElement).val()\n    \n    let container = $(e.srcElement).closest('.overlayControl')\n\n    let overlayName = container.data('overlay') + 'Layer' + container.data('placement')\n\n    let layer = this.layers[overlayName]\n\n    if (layer != undefined)\n      layer.setOpacity(value)\n  } \n  \n  sanitationOverlay(e) {\n    let placement = $(e.srcElement).closest('.button-controls').data('placement')\n    \n    this.activateOverlay(e.srcElement, 'sanitation', placement)\n\n    let map = this.maps[`map${placement}`]\n    \n    $(e.srcElement).closest('.country-map-container').find('.sanitation-caption').show()\n    \n    let mapLegend = legend(d3, {\n      color: d3.scaleSequential([0, 100], d3.interpolateReds),\n      title: \"Sanitation access\"\n    })\n\n    let legendName = `sanitationLegend${placement}`\n    \n    this.legends[legendName] = L.control({position: 'bottomright'})\n\n    this.legends[legendName].onAdd = function (map) {\n      var div = L.DomUtil.create('div', 'legend col')\n\n      div.innerHTML = '<svg>' + mapLegend.html() + '</svg>'\n      \n      return div\n    }\n\n    this.legends[legendName].addTo(map);\n  }\n  \n  waterOverlay(e) {\n    let placement = $(e.srcElement).closest('.button-controls').data('placement')\n    \n    this.activateOverlay(e.srcElement, 'water', placement)\n\n    let map = this.maps[`map${placement}`]\n    \n    $(e.srcElement).closest('.country-map-container').find('.water-caption').toggle()\n    \n    let mapLegend = legend(d3, {\n      color: d3.scaleSequential([0, 100], d3.interpolateBlues),\n      title: \"Water access\"\n    })\n\n    let legendName = `waterLegend${placement}`\n    \n    this.legends[legendName] = L.control({position: 'bottomright'})\n\n    this.legends[legendName].onAdd = function (map) {\n      var div = L.DomUtil.create('div', 'legend col')\n\n      div.innerHTML = '<svg>' + mapLegend.html() + '</svg>'\n      \n      return div\n    }\n\n    this.legends[legendName].addTo(map)\n  }\n\n  casesOverlay(e) {\n    let placement = $(e.srcElement).closest('.button-controls').data('placement')\n    \n    this.activateOverlay(e.srcElement,\n\t\t\t 'cases',\n\t\t\t placement)\n\n    let map = this.maps[`map${placement}`]\n\n    $(e.srcElement).closest('.country-map-container').find('.cases-caption').show()\n\n    let mapLegend = legend(d3, {\n      color: d3.scaleDivergingLog([0.001, 1, 10000], d3.interpolateReds),\n      title: \"Cases\",\n      ticks: 7,\n      tickFormat: \"~g\"\n    })\n\n    let legendName = `casesLegend${placement}`\n    \n    this.legends[legendName] = L.control({position: 'bottomright'})\n\n    this.legends[legendName].onAdd = function (map) {\n      var div = L.DomUtil.create('div', 'legend col')\n\n      div.innerHTML = '<div><svg class=\"ms-2\">' + mapLegend.html() + '</svg></div>'\n      \n      return div\n    }\n\n    this.legends[legendName].addTo(map)\n  }\n\n  ratesOverlay(e) {\n    let placement = $(e.srcElement).closest('.button-controls').data('placement')\n    \n    this.activateOverlay(e.srcElement, 'rates', placement)\n\n    let map = this.maps[`map${placement}`]\n\n    let mapLegend = legend(d3, {\n      color: d3.scaleDivergingLog([10000, 1, 0.0001], d3.interpolateRdBu),\n      title: \"Rates\",\n      ticks: 7,\n      tickFormat: \"~g\"\n    })\n\n    let legendName = `ratesLegend${placement}`\n\n    this.legends[legendName] = L.control({position: 'bottomright'})\n\n    this.legends[legendName].onAdd = function (map) {\n      var div = L.DomUtil.create('div', 'legend col')\n\n      div.innerHTML = '<svg class=\"ms-2\">' + mapLegend.html() + '</svg>'\n      \n      return div\n    }\n\n    this.legends[legendName].addTo(map)\n  }\n\n  /* SECTION - FIGURES */\n  showPersistenceFigure(e) {\n    let figures_container = $(event.srcElement).closest('.figures-container')\n    let placement = figures_container.data('placement')\n    let figure = figures_container.find('.mai-figure')\n\n    figures_container.find('.active-figure').hide()\n    \n    figure.addClass('active-figure')\n    figure.show()\n    \n    this.initializePersistenceFigure(`#dataviz-${placement}`)\n  }\n\n  showSeasonalityFigure(e) {\n    this.clearLayers('right')\n\n    $(this.activeRight).hide()\n\n    this.activeRight = '#seasonality-right'\n\n    $(this.activeRight).show( () => {\n      this.initializeSeasonalityFigure(this.activeRight)\n    })\n  }\n\n  showCasesFigure(srcElement) {\n    let placement = $(srcElement).closest('.button-controls').data('placement')\n\n    if (this.activeRight != '#cases-right') {\n      this.clearSecondaryPanel()\n      \n      this.activeRight = '#cases-right'\n      \n      $(this.activeRight).show( () => {\n\tthis.initializeCasesFigure('#cases-right')\n      })\n    }\n  }\n  \n  initializeCasesFigure(viz_target) {\n    var margin = {top: 10, right: 30, bottom: 30, left: 70},\n\twidth = 460 - margin.left - margin.right,\n\theight = 200 - margin.top - margin.bottom;\n\n    var x = d3.scaleBand()\n\t.rangeRound([0, width])\n\t.padding(0.1)\n\n    var y = d3.scaleLinear()\n\t.rangeRound([height, 0])\n\n    d3.selectAll(`${viz_target} > *`).remove()\n\n    var svg = d3.select(viz_target)\n\t.append(\"svg\")\n\t.attr(\"width\", width + margin.left + margin.right)\n\t.attr(\"height\", height + margin.top + margin.bottom)\n\t.call(responsivefy)\n\t.append(\"g\")\n\t.attr(\"transform\", \n\t      \"translate(\" + margin.left + \",\" + margin.top + \")\");\n    \n    svg.append(\"text\")\n      .attr(\"transform\", \"rotate(-90)\")\n      .attr(\"y\", 0 - margin.left) \n      .attr(\"x\", 0 - (height / 2))\n      .attr(\"dy\", \"1em\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Suspected Cases\");\n\n    // text label for the x axis\n    svg.append(\"text\")             \n      .attr(\"transform\",\n            \"translate(\" + (width/2) + \" ,\" + \n                           (height + margin.top + 20) + \")\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Year\");\n\n    d3.csv(\"/cases.csv\").then(function(data) {\n      // format the data\n      data.forEach(function(d) {\n\td.cases = +d.cases;\n      });\n\n      // Scale the range of the data in the domains\n      x.domain(data.map(function(d) { return d.year; }));\n      y.domain([0, d3.max(data, function(d) { return d.cases; })]);\n\n      // append the rectangles for the bar chart\n      svg.selectAll(\".bar\")\n\t.data(data)\n\t.enter().append(\"rect\")\n\t.attr(\"class\", \"bar\")\n\t.attr(\"x\", function(d) { return x(d.year); })\n\t.attr(\"width\", x.bandwidth())\n\t.attr(\"y\", function(d) { return y(d.cases); })\n\t.attr(\"height\", function(d) { return height - y(d.cases); })\n\t.style(\"fill\", \"#183742\")\n\n      // add the x Axis\n      svg.append(\"g\")\n\t.attr(\"transform\", \"translate(0,\" + height + \")\")\n\t.call(d3.axisBottom(x));\n      \n      // add the y Axis\n      svg.append(\"g\")\n\t.call(d3.axisLeft(y));\n    });\n  }\n    \n  initializePersistenceFigure(viz_target) {\n    var margin = {top: 10, right: 30, bottom: 30, left: 60},\n\twidth = 860 - margin.left - margin.right,\n\theight = 640 - margin.top - margin.bottom;\n\n    d3.selectAll(`${viz_target} > *`).remove()\n    \n    // append the svg object to the body of the page\n    var svg = d3.select(viz_target)\n\t.append(\"svg\")\n\t.attr(\"width\", width + margin.left + margin.right)\n\t.attr(\"height\", height + margin.top + margin.bottom)\n        .call(responsivefy)\n\t.append(\"g\")\n\t.attr(\"transform\",\n              `translate(${margin.left}, ${margin.top})`)\n\n    svg.append(\"g\")\n      .attr(\"class\", \"legendOrdinal\")\n      .attr(\"transform\", `translate(${width - 40}, ${height - 80})`)\n    \n    // Add X axis\n    var x = d3.scaleLinear()\n    \t  .domain([0, 20])\n    \t  .range([ 0, width ]);\n    \n    svg.append(\"g\")\n    \t.attr(\"transform\", \"translate(0,\" + height + \")\")\n    \t.call(d3.axisBottom(x));\n    \n    // Add Y axis\n    var y = d3.scaleLinear()\n      \t  .domain([0, 40])\n    \t  .range([ height, 0]);\n    \n    svg.append(\"g\")\n      .call(d3.axisLeft(y));\n\n    svg.append(\"text\")\n      .attr(\"transform\", \"rotate(-90)\")\n      .attr(\"y\", 0 - margin.left)\n      .attr(\"x\",0 - (height / 2))\n      .attr(\"dy\", \"1em\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Mean Annual Incidence per 10,000 population\")\n\n    // text label for the x axis\n    svg.append(\"text\")             \n      .attr(\"transform\",\n            \"translate(\" + (width/2) + \" ,\" + \n                           (height + margin.top + 20) + \")\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Persistence (% weeks)\")\n    \n    d3.select('body')\n      .append(\"div\")\n      .attr('id', 'tooltip')\n      .style(\"opacity\", 0)\n      .style(\"position\", 'absolute')\n      .attr(\"class\", \"tooltip\")\n      .style(\"background-color\", \"white\")\n      .style(\"border\", \"solid\")\n      .style(\"border-width\", \"1px\")\n      .style(\"border-radius\", \"5px\")\n      .style(\"padding\", \"10px\")\n\n    // Continue to display tooltip on mouseover\n    // d3.select(\"#tooltip\").on('mouseout', function(d) {\n    //   d3.select(\"#tooltip\").on('mouseover', null)\n      \n    //   d3.select(\"#tooltip\")\n    // \t.style(\"opacity\", \"0\")\n    // });\n\n    // Provide a reference to the controller for target lookup\n    let controller = this\n\n    var priorityScale = d3.scaleOrdinal().domain([1,2,3]).range(['#e87d72', '#53b64c', '#6c9df8'])\n    var legendOrdinal = d3.legendColor().scale(priorityScale)\n    \n    svg.select(\".legendOrdinal\")\n      .call(legendOrdinal)\n\n    d3.csv(\"/example_ET_mai_persistence.csv\").then( (data) => {\n      svg.append('g')\n      \t.selectAll(\"dot\")\n      \t.data(data)\n      \t.enter()\n      \t.append(\"circle\")\n      \t.attr(\"cx\", (d) => { return x(d.persistence) } )\n      \t.attr(\"cy\", (d) => { return y(d.mai_10K) } )\n      \t.attr(\"r\", 4)\n      \t.attr(\"fill\",  d => { return priorityScale(d.priority) } )\n        .on('mouseover', function (d) {\n\t  d3.select(this).attr('r', 8)\n\n\t  let maiInfoTemplate = template(controller.maiInfoTemplateTarget.innerHTML)\n\n\t  let html = maiInfoTemplate({\n\t    location_name: d.Location,\n\t    tl: d.TL,\n\t    tr: d.TR,\n\t    sCh: d.sCh,\n\t    weeks_with_cases: d.weeks_with_cases,\n\t    weeks_total: parseFloat(d.weeks_total).toFixed(2),\n\t    mai_10k: parseFloat(d.mai_10K).toFixed(2),\n\t    persistence: parseFloat(d.persistence).toFixed(2),\n\t    priority: d.priority\n\t  })\n\t  \n\t  d3.select('#tooltip')\n\t    .html(html)\n\t    .style('left', (d3.event.pageX+10) + 'px')\n\t    .style('top', (d3.event.pageY+10) + 'px')\n\t    .style(\"opacity\", 1)\n\t})\n\t.on('mouseleave', function(d) {\n       \t  d3.select(this).attr('r', 4)\n\n\t  // move tooltip out of the way to prevent overlap\n       \t  d3.select('#tooltip')\n\t    .style('left', '0')\n\t    .style('top', '0')\n      \t    .style(\"opacity\", 0)\n       \t})\n    })\n  }\n\n  initializeSeasonalityFigure(viz_target) {\n    this.clearMapOverlays()\n    \n    // set the dimensions and margins of the graph\n    var margin = {top: 10,\n\t\t  right: 30,\n\t\t  bottom: 35,\n\t\t  left: 50},\n\twidth = 560 - margin.left - margin.right,\n\theight = 400 - margin.top - margin.bottom;\n\n    $(viz_target).show()\n\n    d3.selectAll(`${viz_target} > *`).remove()\n    \n    // append the svg object to the body of the page\n    var svg = d3.select(viz_target)\n\t.append(\"svg\")\n\t.attr(\"width\", width + margin.left + margin.right)\n\t.attr(\"height\", height + margin.top + margin.bottom)\n\t.call(responsivefy)\n\t.append(\"g\")\n\t.attr(\"transform\",\n              \"translate(\" + margin.left + \",\" + margin.top + \")\")\n\n    svg.append(\"text\")\n      .attr(\"transform\", \"rotate(-90)\")\n      .attr(\"y\", 0 - margin.left)\n      .attr(\"x\", 0 - (height / 2))\n      .attr(\"dy\", \"1em\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Seasonality\")\n\n    // text label for the x axis\n    svg.append(\"text\")             \n      .attr(\"transform\",\n            \"translate(\" + (width/2) + \" ,\" + \n                           (height + margin.top + 25) + \")\")\n      .style(\"text-anchor\", \"middle\")\n      .text(\"Month\")\n    \n    \n    var priorityScale = d3.scaleOrdinal().domain([1,2,3], ['', '', ''])    \n\n    this.maps['mapleft'].invalidateSize()\n\n    d3\n      .json(`/covariate_collections/seasonality_collections/${gon.country_id}.json`)\n      .then( (data) => {\n\tlet collection = data.collection\n\t\n\tlet means = collection.features.map( d => d.properties.lambda )\n\n\tlet max = parseFloat(d3.max(means))\n\tlet min = parseFloat(d3.min(means))\n\tlet half = ((max - min) / 2) + min\n\t\n\tlet colorScale = d3\n\t  .scaleLinear()\n\t    .domain([min, half, max])\n\t    .range([\"#4a94e9\", '#fff', \"#f6c054\"])\n\n\tlet stool = (feature) => {\n\t  return {\n            fillColor: colorScale(feature.properties.lambda),\n            weight: 1,\n            opacity: 1,\n            color: 'black',\n            dashArray: '5',\n            fillOpacity: 0.3\n\t  }\n\t}\n\n\tthis.layers['seasonality'] = L.geoJson(collection, {style: stool}).addTo(this.maps[\"mapleft\"])\n\n\t//Read the data\n\t//let month_data = data.monthly_collection\n\t//console.log(month_data)\n\t\n\t// Add X axis --> it is a date format\n\tvar x = d3.scaleLinear()\n\t    .domain([1,12])\n\t    .range([ 0, width ]);\n\t\n\tsvg.append(\"g\")\n\t  .attr(\"transform\", \"translate(0,\" + height + \")\")\n\t  .call(d3.axisBottom(x));\n\t\n\t// Add Y axis\n\tvar y = d3.scaleLinear()\n\t    .domain([-5, 5])\n\t    .range([ height, 0 ]);\n\t\n\tsvg.append(\"g\")\n\t  .call(d3.axisLeft(y));\n\n\t// Add the lines\n\tsvg\n\t  .append(\"path\")\n\t  .datum(data.monthly_collection.filter(function(d) { return d.data.param_fam == 'betas_g1' }))\n\t  .attr(\"fill\", \"none\")\n\t  .attr(\"stroke\", \"#f6c054\")\n\t  .attr(\"stroke-width\", 3)\n\t  .attr(\"d\", d3.line()\n\t\t.x(function(d) { return x(d.data.month) })\n\t\t.y(function(d) { return y(d.data.mean) })\n               )\n\t\n\tsvg\n\t  .append(\"path\")\n\t  .datum(data.monthly_collection.filter(function(d) {  return d.data.param_fam == 'betas_g1' }))\n\t  .attr(\"fill\", \"#f6c054\")\n\t  .attr(\"opacity\",\"0.15\")\n\t  .attr(\"stroke\", \"none\")\n\t  .attr(\"d\", d3.area()\n\t\t.x(function(d) { return x(d.data.month) })\n\t\t.y0(function(d) { return y(d.data['q975']) })\n\t\t.y1(function(d) { return y(d.data['q025']) })\n               )\n\t\n\tsvg\n\t  .append(\"path\")\n\t  .datum(data.monthly_collection.filter(function(d) { return d.data.param_fam == 'betas_g2' }))\n\t  .attr(\"fill\", \"#4a94e9\")\n\t  .attr(\"opacity\",\"0.15\")\n\t  .attr(\"stroke\", \"none\")\n\t  .attr(\"d\", d3.area()\n\t\t.x(function(d) { return x(d.data.month) })\n\t\t.y0(function(d) { return y(d.data['q975']) })\n\t\t.y1(function(d) { return y(d.data['q025']) })\n               )\n\t\n\tsvg\n\t  .append(\"path\")\n\t  .datum(data.monthly_collection.filter(function(d) { return d.data.param_fam == 'betas_g2' }))\n\t  .attr(\"fill\", \"none\")\n\t  .attr(\"stroke\", \"#4a94e9\")\n\t  .attr(\"stroke-width\", 3)\n\t  .attr(\"d\", d3.line()\n\t\t.x(function(d) { return x(d.data.month) })\n\t\t.y(function(d) { return y(d.data.mean) })\n               )\n      })\n  }\n\n  initializeHotspotFigure(geo_target) {\n    this.clearMapOverlays()\n    \n    var priorityScale = d3\n\t.scaleOrdinal()\n\t.domain([1,2,3])\n\t.range(['#e87d72', '#53b64c', '#6c9df8'])\n    \n    function style(feature) {\n      return {\n        fillColor: priorityScale(feature.properties.color_value),\n        weight: 1,\n        opacity: 1,\n        color: 'black',\n        dashArray: '5',\n        fillOpacity: 0.3\n      };\n    }\n\n    function getColor(d) {\n      return d > 1000 ? '#800026' :\n        d > 500  ? '#BD0026' :\n        d > 200  ? '#E31A1C' :\n        d > 100  ? '#FC4E2A' :\n        d > 50   ? '#FD8D3C' :\n        d > 20   ? '#FEB24C' :\n        d > 10   ? '#FED976' :\n        '#FFEDA0';\n    }\n\n    d3.json(\"/ETH_hotspots.geojson\").then( (geojson) => {\n      d3.csv(\"/ETH_hotspots.csv\").then( (data) => {\n\tfor (var i = 0; i < data.length; i++) {\n\t  for (var j = 0; j < geojson.features.length; j++)  {\n\t    let location_period_id = geojson.features[j].properties.location_period_id\n\t    \n\t    if (location_period_id == data[i].location_period_id) {\n\t      geojson.features[j].properties.color_value = data[i].value \n\n\t      break;\n\t    }\n\t  }\n\t}\n\n\tthis.layers['hotspots'] = L.geoJson(geojson, {\n\t  style: style,\n\t  onEachFeature: (feature, layer) => {\n            layer.bindTooltip(feature.properties.color_value.toString() );\n\t  }}).addTo(this.maps[\"mapleft\"])\n      })\n    })\n    \n    this.clearSecondaryPanel()\n    \n    this.activeRight = '#persistence-right'\n\n    $(this.activeRight).show( () => {\n      this.initializePersistenceFigure(`#persistence-right`)\n    })\n  }\n\n  showHotspotsFigure(e) {\n    this.clearSecondaryPanel()\n    \n    this.activeRight = '#persistence-right'\n\n    $(this.activeRight).show( () => {\n      this.initializeHotspotFigure(this.activeRight)\n    })\n  }\n\n  showVaccination(event) {\n    this.clearMapOverlays()\n\n    this.clearSecondaryPanel()\n    \n    this.activeRight = '#vaccination-table'\n\n    $(this.activeRight).show()\n\n    this.initializeVaccinationTable()\n    \n    let style = (feature) => {\n      return {\n        fillColor: feature.properties.vaccination_round == 1 ? 'red' : 'blue',\n        weight: 1,\n        opacity: 1,\n        color: 'black',\n        dashArray: '5',\n        fillOpacity: 0.3\n      }\n    }\n    \n    d3\n      .json(`/covariate_collections/by_name_and_location/Vaccination%20Data/${gon.country_id}.json`)\n      .then( (data) => {\t\n\tthis.layers['vaccinations'] = L.geoJson(data, {\n\t  style: style,\n\t  onEachFeature: (feature, layer) => {\n\t    let vTemplate = template(this.vaccinationDataTemplateTarget.innerHTML)\n\n\t    let tooltip = vTemplate({\n\t      doses: feature.properties.doses,\n\t      target_population: feature.properties.target_population,\n\t      round: feature.properties.vaccination_round\n\t    })\n\n\t    layer.bindTooltip(tooltip)\n\t  }}).addTo(this.maps[\"mapleft\"])\n      })\n  }\n\n  showRegionalObservationCollections(event) {\n    this.clearMapOverlays()\n\n    this.clearSecondaryPanel()\n    \n    this.activeRight = '#regional-oc-table'\n\n    $(this.activeRight).show()\n\n    $(\"#regional-ocs-table\").dataTable({\n      retrieve: true,\n      paging: false,\n      searching: false,\n      scrollY: 400})\n    \n    let oc_ids = $('#regional-ocs-table').data('regional-oc-ids')\n\n    let style = (feature) => {\n      return {\n        fillColor: '#76CCCE',\n        weight: 1,\n        opacity: 1,\n        color: 'black',\n        dashArray: '5',\n        fillOpacity: 0.4\n      }\n    }\n    \n    d3\n      .json(`/observation_collections/geojson_for_multiple_collections/${oc_ids}`)\n      .then( (data) => {\t\n\tthis.layers['regional_ocs'] = L.geoJson(data, {\n\t  style: style,\n\t  onEachFeature: (feature, layer) => {\n\t    console.log(`feature${feature.id}`)\n\t    /*let vTemplate = template(this.vaccinationDataTemplateTarget.innerHTML)\n\n\t    let tooltip = vTemplate({\n\t      doses: feature.properties.doses,\n\t      target_population: feature.properties.target_population,\n\t      round: feature.properties.vaccination_round\n\t    })\n\n\t    layer.bindTooltip(tooltip)*/\n\t  }}).addTo(this.maps[\"mapleft\"])\n      })\n  }\n\n\n  latestSuspected(event) {\n    //let table = $('#oc-table').DataTable()\n    //console.log(table)\n    //table.rows('#oc-row-20437').scrollTo()\n    //table.row(30).scrollTo()\n    //$(\"#oc-row-20437\").scrollTo()\n    //table.scroller.toPosition( 100 );\n    //console.log( table.rows('.selected').data().length +' row(s) selected' )\n  }\n\n  latestConfirmed(event) {\n    //$('#oc-table').row('#oc-row-20437').scrollTo()\n  }\n\n  selectObservationCollection(event) {\n    let id = $(event.srcElement).closest('tr').data('observationCollectionId')\n\n    d3.json(`/observation_collections/${id}/get_geojson`).then( (data) => {\n      L.geoJson(data).addTo(this.maps[\"mapcenter\"])\n    })\n  }\n\n  initializeEpicurve() {\n    this.epicurveFigure.oc_id = this.epicurveTarget.dataset.observationCollectionId\n    \n    this.epicurveFigure.margin = {top: 10, right: 30, bottom: 30, left: 40}\n    this.epicurveFigure.width = 2560 - this.epicurveFigure.margin.left - this.epicurveFigure.margin.right\n    this.epicurveFigure.height = 800 - this.epicurveFigure.margin.top - this.epicurveFigure.margin.bottom\n        \n    this.epicurveFigure.parseTime = d3.timeParse(\"%Y-%m-%d\")\n    this.epicurveFigure.formatTime = d3.timeFormat(\"%b. %Y\")\n   \n    this.epicurveFigure.svg = d3.select('#epicurve')\n      .append(\"svg\")\n      .attr(\"width\", this.epicurveFigure.width +\n\t    this.epicurveFigure.margin.left +\n\t    this.epicurveFigure.margin.right)\n      .attr(\"height\", this.epicurveFigure.height +\n\t    this.epicurveFigure.margin.top +\n\t    this.epicurveFigure.margin.bottom)\n      .call(responsivefy)\n      .append(\"g\")\n      .attr(\"transform\", \n\t    `translate(${this.epicurveFigure.margin.left}, ${this.epicurveFigure.margin.top})`)\n  }\n\n  renderEpicurve(startDate = '', endDate = '') {\n    this.epicurveFigure.svg.selectAll('*').remove()\n\n    d3.json(`/observation_collections/${this.epicurveFigure.oc_id}/summary_for_epicurve/${startDate}/${endDate}`)\n      .then( (data) => {\n\tthis.epicurveTitleTarget.innerHTML = `Data Source: <a href=\"/observation_collections/${data.observation_collection_id}\" target=\"_blank\">Observation Collection ${data.observation_collection_id} <i class=\"bi box-arrow-up-right\"></i><\\a>`\n\n\tdata.summary.forEach( (d) => {\n\t  d.date = this.epicurveFigure.parseTime(d.time_left)\n\n\t  d.start_date = this.epicurveFigure.parseTime(d.time_left)\n\n\t  d.end_date = this.epicurveFigure.parseTime(d.time_right)\n\t})\n\n\tlet earliest_date = d3.min(data.summary, (d) => d.start_date)\n\tlet latest_date = d3.max(data.summary, (d) => d.end_date)\n\tlet numDays = Math.round( Math.abs(latest_date - earliest_date) / (24 * 60 * 60 * 1000) )\n\n\tif (numDays >= 365) {\n\t  this.epicurveFigure.formatTime = d3.timeFormat(\"%Y\")\n\t} else if (numDays >= 28) {\n\t  this.epicurveFigure.formatTime = d3.timeFormat(\"%Y-%m\")\n\t} else {\n\t  this.epicurveFigure.formatTime = d3.timeFormat(\"%Y-%m-%d\")\n\t}\n\t\n\tlet x = d3\n\t    .scaleBand()\n\t    .domain(data.summary.map( (d) => d.date) )\n\t    .rangeRound([0,\n\t\t\t this.epicurveFigure.width])\n\t    .padding(0)\n\t\n\tlet y = d3\n\t    .scaleLinear()\n\t    .domain([0,\n\t\t     d3.max(data.summary, (d) => d.suspected_cases)])\n\t    .range([this.epicurveFigure.height - this.epicurveFigure.margin.bottom,\n\t\t    0])\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"fill\", \"#c13414\")\n\t  .selectAll(\"rect\")\n\t  .data( data.summary.filter( (d) =>{ return d.suspected_cases !== null }) )\n\t  .join(\"rect\")\n\t  .attr(\"x\", (d) => x(d.date))\n\t  .attr(\"y\", (d) => y(d.suspected_cases))\n\t  .attr(\"height\", (d) => y(0) - y(d.suspected_cases))\n\t  .attr(\"width\", x.bandwidth)\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"fill\", \"#a0a0a0\")\n\t  .selectAll(\"rect\")\n\t  .data( data.summary.filter( (d) =>{ return d.deaths !== null }) )\n\t  .join(\"rect\")\n\t  .attr(\"x\", (d) => x(d.date))\n\t  .attr(\"y\", (d) => y(d.deaths))\n\t  .attr(\"height\", (d) => y(0) - y(d.deaths))\n\t  .attr(\"width\", x.bandwidth)\n\n\n\tlet xScale = d3.scaleTime()\n            .domain([earliest_date,\n\t\t     latest_date])\n            .range([this.epicurveFigure.margin.left,\n\t\t    (this.epicurveFigure.width - this.epicurveFigure.margin.right)])\n\t\n\tlet xAxis = d3\n\t    .axisBottom()\n\t    .scale(xScale)\n\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"class\", \"epicurve-axis\")\n\t  .attr(\"transform\",\n\t\t`translate(0, ${this.epicurveFigure.height - this.epicurveFigure.margin.bottom})`)\n\t  .call(xAxis)\n\n\tlet yAxis = d3\n\t    .axisLeft(y)\n\t    .scale(y)\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"class\", \"epicurve-axis\")\n\t  .attr(\"transform\", `translate(${this.epicurveFigure.margin.left}, 0)`)\n\t  .call( yAxis )\n\t\n\tthis.renderRangeSlider(data.summary)\n\n\tlet summaryX = d3.scaleBand()\n\t    .domain(data.location_summary_result.map( (d) => { return d.region }))\n            .range([0, this.epicurveFigure.width])\n            .padding(0.1)\n\t\n\tlet summaryY = d3.scaleLinear()\n\t    .domain([0,\n\t\t     d3.max(data.location_summary_result, (d) => d.suspected_cases)])\n\t    .range([this.epicurveFigure.height - this.epicurveFigure.margin.bottom,\n\t\t    this.epicurveFigure.margin.top])\n      })\n  }\n\n  updateEpicurveCollection(event) {\n    this.epicurveFigure.oc_id = event.srcElement.value\n\n    this.epicurveFigure.oc_changed = true\n    \n    this.renderEpicurve()\n  }\n\n  renderRangeSlider (data) {\n    let dates = data.map( d => d.date )\n    \n    let sliderTicks = Math.round(Object.keys(dates).length / 50)\n    \n    let sliderRange = d3\n\t.sliderBottom()\n\t.min( d3.min(dates) )\n\t.max( d3.max(dates) )\n\t.width(800)\n\t.tickFormat(this.epicurveFigure.formatTime)\n\t.ticks(sliderTicks)\n\t.default([d3.min(dates), d3.max(dates)])\n\t.fill('#2196f3')\n\t.on('end', val => {\n\t  d3.select('div#value-range').text(val.map(this.epicurveFigure.formatTime).join(' - '));\n\n\t  this.renderEpicurve( Number.isInteger(val[0]) ? Math.round(val[0] / 1000): '',\n\t\t\t       Number.isInteger(val[1]) ? Math.round(val[1] / 1000): '' )\n\t})\n\n    if ( (! this.epicurveFigure.sliderRendered) ||\n\t this.epicurveFigure.oc_changed ) {\n      if ( this.epicurveFigure.oc_changed ) {\n\td3.select('div#slider-range').select(\"svg\").remove()\n\t\n\tthis.epicurveFigure.slider_value.selectAll('*').remove()\n\t\n\tthis.epicurveFigure.oc_changed = false\n      }\n    \n      this.epicurveFigure.range_slider = d3\n\t  .select('div#slider-range')\n\t  .append('svg')\n\t  .attr('width', 1400)\n\t  .attr('height', 100)\n\t  .append('g')\n\t  .attr('transform', 'translate(50,50)');\n\n      this.epicurveFigure.range_slider.call(sliderRange);\n\n      this.epicurveFigure.slider_value = d3\n\t.select('#value-range')\n\t.text(\n\t  sliderRange\n\t    .value()\n\t    .map(this.epicurveFigure.formatTime)\n\t    .join(' - ')\n\t)\n\n      this.epicurveFigure.sliderRendered = true\n    }\n  }\n}\n", "export const legend = function(\n  d3, {color,\n       title,\n       tickSize = 6,\n       width = 280,\n       height = 64 + tickSize,\n       marginTop = 18,\n       marginRight = 0,\n       marginBottom = 8 + tickSize,\n       marginLeft = 15,\n       ticks = width / 64,\n       tickFormat,\n       tickValues} = {}) {\n  const svg = d3.create(\"svg\")\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"viewBox\", [0, 0, width, height])\n    .style(\"overflow\", \"visible\")\n    .style(\"display\", \"block\");\n  \n  let x;\n\n  // Continuous\n  if (color.interpolator) {\n    x = Object.assign(color.copy()\n      .interpolator(d3.interpolateRound(marginLeft, width - marginRight)), {\n        range() {\n          return [marginLeft, width - marginRight];\n        }\n      });\n\n    svg.append(\"image\")\n      .attr(\"x\", marginLeft)\n      .attr(\"y\", marginTop)\n      .attr(\"width\", width - marginLeft - marginRight)\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"preserveAspectRatio\", \"none\")\n      .attr(\"xlink:href\", ramp(d3, color.interpolator()).toDataURL());\n\n    // scaleSequentialQuantile doesn\u2019t implement ticks or tickFormat.\n    if (!x.ticks) {\n      if (tickValues === undefined) {\n        const n = Math.round(ticks + 1);\n        tickValues = d3.range(n).map(i => d3.quantile(color.domain(), i / (n - 1)));\n      }\n      if (typeof tickFormat !== \"function\") {\n        tickFormat = d3.format(tickFormat === undefined ? \",f\" : tickFormat);\n      }\n    }\n  }\n  \n  // Discrete\n  else if (color.invertExtent) {\n    const thresholds = color.thresholds ? color.thresholds() // scaleQuantize\n      :\n      color.quantiles ? color.quantiles() // scaleQuantile\n      :\n      color.domain(); // scaleThreshold\n\n    const thresholdFormat = tickFormat === undefined ? d => d :\n      typeof tickFormat === \"string\" ? d3.format(tickFormat) :\n      tickFormat;\n\n    x = d3.scaleLinear()\n      .domain([-1, color.range().length - 1])\n      .rangeRound([marginLeft, width - marginRight]);\n\n    svg.append(\"g\")\n      .selectAll(\"rect\")\n      .data(color.range())\n      .join(\"rect\")\n      .attr(\"x\", (d, i) => x(i - 1))\n      .attr(\"y\", marginTop)\n      .attr(\"width\", (d, i) => x(i) - x(i - 1))\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"fill\", d => d);\n\n    tickValues = d3.range(thresholds.length);\n    tickFormat = i => thresholdFormat(thresholds[i], i);\n  }\n\n  svg.append(\"g\")\n    .attr(\"transform\", `translate(0, ${height - marginBottom})`)\n    .call(d3.axisBottom(x)\n      .ticks(ticks, typeof tickFormat === \"string\" ? tickFormat : undefined)\n      .tickFormat(typeof tickFormat === \"function\" ? tickFormat : undefined)\n      .tickSize(tickSize)\n      .tickValues(tickValues))\n    .call(g => g.selectAll(\".tick line\").attr(\"y1\", marginTop + marginBottom - height))\n    .call(g => g.select(\".domain\").remove())\n    .call(g => g.append(\"text\")\n\t  .attr(\"x\", marginLeft)\n\t  .attr(\"y\", marginTop + marginBottom - height - 6)\n\t  .attr(\"fill\", \"currentColor\")\n\t  .attr(\"text-anchor\", \"start\")\n\t  .attr(\"font-weight\", \"bold\")\n\t  .text(title));\n\n  return svg\n}\n\nfunction ramp(d3, color, n = 256) {\n  const canvas = document.createElement('canvas');\n  const context = canvas.getContext(\"2d\");\n\n  d3.select(canvas).attr(\"width\", n)\n    .attr(\"height\", 1);\n\n  for (let i = 0; i < n; ++i) {\n    context.fillStyle = color(i / (n - 1));\n    context.fillRect(i, 0, 1, 1);\n  }\n  return canvas;\n}\n", "require('d3')\nimport * as d3Base from 'd3'\nconst d3 = Object.assign(d3Base)\n\nexport function responsivefy(svg) {\n  // get container + svg aspect ratio\n  var container = d3.select(svg.node().parentNode),\n      width = parseInt(svg.style(\"width\")),\n      height = parseInt(svg.style(\"height\")),\n      aspect = width / height;\n\n  // add viewBox and preserveAspectRatio properties,\n  // and call resize so that svg resizes on inital page load\n  svg.attr(\"viewBox\", \"0 0 \" + width + \" \" + height)\n    .attr(\"perserveAspectRatio\", \"xMinYMid\")\n    .call(resize);\n  \n  // to register multiple listeners for same event type, \n  // you need to add namespace, i.e., 'click.foo'\n  // necessary if you call invoke this function for multiple svgs\n  // api docs: https://github.com/mbostock/d3/wiki/Selections#on\n  d3.select(window).on(\"resize.\" + container.attr(\"id\"), resize);\n  \n  // get width of container and resize svg to fit it\n  function resize() {\n    var targetWidth = parseInt(container.style(\"width\"));\n    svg.attr(\"width\", targetWidth);\n        svg.attr(\"height\", Math.round(targetWidth / aspect));\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'documentForm', 'locationDocuments' ]\n\n  initialize() {\n    console.log('initialize')\n  }\n\n  onDocumentCreateSuccess(event) {\n    const [data, status, xhr] = event.detail\n\n    this.locationDocumentsTarget.innerHTML = xhr.responseText\n\n    this.documentFormTarget.reset()\n\n    document.getElementById(`direct-upload-1`).remove()\n    document.getElementById(`location_document_file`).setAttribute('disabled', false)\n  }\n  \n  onDocumentUpdateError(event) {\n    const [data, status, xhr] = event.detail\n    console.error(xhr.responseText)\n    this.documentFormTarget.innerHTML = xhr.responseText\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  fill_file_input(e) {\n    let filename = e.srcElement.files[0].name\n    $(e.srcElement).parents().find('.custom-file-label').html(filename)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'roleSelector', 'roleSelectorDescription' ]\n  roleDescriptions = new Map( [\n    ['registered_visitor', 'View \"Complete\" OCs, view Observations, download Observations from public OCs, '],\n    ['data_enterer', 'Create OCs, create Locations, delete incomplete OCs'],\n    ['data_manager', 'Manage observations, view restricted data'] ] )\n    \n  showRoleDescription(event) {\n    if (event.srcElement.value != '') {\n      $(this.roleSelectorDescriptionTarget).html( this.roleDescriptions.get(event.srcElement.value) )\n      $(this.roleSelectorDescriptionTarget).collapse('show')\n    } else {\n      $(this.roleSelectorDescriptionTarget).html( '' )\n      $(this.roleSelectorDescriptionTarget).collapse('hide')\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport DataTable from 'datatables.net-bs5'\n\nexport default class extends Controller {\n  static targets = [ 'locationDocumentsTable']\n\n  initialize() {\n    if (this.hasLocationDocumentsTableTarget) {\n      let id = this.locationDocumentsTableTarget.id\n      \n      $(`#${id}`).dataTable({\n\torder: [],\n\tretrieve: true,\n\tpaging: false,\n\tsearching: false,\n\tscrollX: '100%',\n\tbInfo: false,\n\tstateSave: true})\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'actionsTable']\n\n  onLocationMigrationActionsUpdate(event) {\n    let [data, status, xhr] = event.detail;\n\n    this.actionsTableTarget.innerHTML = xhr.response\n  }\n}\n", "import ApplicationController from \"./application_controller\"\n\nexport default class extends ApplicationController {\n  static targets = [ 'lpForm', 'lpFormContainer']\n\n  initialize() {\n    super.initializeDatepickers()\n    \n    $('.map-container').each((index, element) => {\n      let id = $(element).data('location-period-id')\n       \n      let map = L.map(`location-period-map-${id}`).fitBounds([[$(element).data('y-min'), $(element).data('x-min') ],[$(element).data('y-max'), $(element).data('x-max')]])\n\t\n      L.tileLayer.provider('CartoDB.Positron').addTo(map)\n      \n      if ($(element).data('geojson'))\n        L.geoJSON($(element).data('geojson')).addTo(map)\n    })\n  }\n  \n  launchGeojsonModal() {\n    this.resetGeojsonModal()\n    $('#update-geojson').modal()\n  }\n\n  resetGeojsonModal() {\n    $('#error-explanation').html('')\n    $('#geojson_file').val('')\n    $('#geojson-updated').hide()\n    $('.custom-file-label').html('')\n  }\n  \n  onGeojsonUpdateError(event) {\n    let [data, status, xhr] = event.detail;\n    $('#geojson-updated').hide()\n    $('#error-explanation').html(xhr.response)\n    $('#error-explanation').show()\n  }\n\n  onGeojsonUpdateSuccess(event) {\n    let [data, status, xhr] = event.detail\n    $('#error-explanation').html('')\n    $('#error-explanation').hide()\n    $('#geojson-updated').html('The geojson field was successfully updated.')\n    $('#geojson-updated').show()\n  }\n\n  onLocationPeriodUpdateError(event) {\n    let [data, status, xhr] = event.detail;\n    this.lpFormContainerTarget.innerHTML = xhr.response\n\n    super.initializeaDatepickers()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nrequire('leaflet/dist/leaflet')\nrequire('leaflet-providers/leaflet-providers')\nrequire('leaflet.sync')\nrequire('leaflet-fullscreen/dist/Leaflet.fullscreen')\nimport DataTable from 'datatables.net-bs5'\nrequire('datatables.net-scroller' )\n\nimport { deserialize } from \"deserialize-json-api\"\n\nexport default class extends Controller {\n  static targets = [ 'locationList', 'locationSelector', 'locationForm', 'childLocationForm', 'childLocationError', 'assetImageLeft', 'assetImageRight', 'locationMap', 'countryMap', 'compositePreview']\n\n  initialize() {\n    this.maps = {}\n    \n    if (this.hasLocationMapTarget) {\n      this.initializeLocationMaps()\n    }\n  }\n\n  initializeCountryMaps() {\n    $('.map-container').each( (index, element) => {\n      console.log(element)\n      if ($(element).is(\":visible\")) {\n\tconsole.log(element)\n\tthis.initializeMap(element)\n      }\n    })\t\t\t     \n  }\n  \n  initializeLocationMaps() {\n    $('.map-container').each((index, element) => {\n      let id = $(element).data('location-period-id')\n      let link = $(element).data('link') ? $(element).data('link') : null\n      let mapName = `location-period-map-${id}`\n\n      this.maps[mapName] = L.map(mapName, {\n\tfullscreenControl: $(element).data('fullscreen'),\n\tzoomControl: ! element.classList.contains('small-map'),\n\tscrollWheelZoom: ! element.classList.contains('small-map'),\n\tattributionControl: false})\n\t.fitBounds([ [$(element).data('y-min'),\n\t\t      $(element).data('x-min')],\n\t\t     [$(element).data('y-max'),\n\t\t      $(element).data('x-max')] ])\n\n      if (link) {\n\tthis.maps[mapName].on('click', () => { window.location.href = link })\n      }\n      \n      L.tileLayer.provider('CartoDB.Positron').addTo(this.maps[mapName])\n\n      if ($(element).data('geojson'))\n\tL.geoJSON($(element).data('geojson'), {style: (feature) => {\n          return {color: '#76CCCE', fillOpacity: 0}\n\t}}).addTo(this.maps[mapName])\n    })\n  }\n  \n  updateLocationSelector(event) {\n    let form = $(event.srcElement).closest('form').get(0)\n    let selectedValue = event.srcElement.value\n\n    // If blank is selected in a sublevel, preserve parent level location\n    if (selectedValue === '') {\n      // Find all path selects with values to determine current parent\n      let pathSelects = Array.from(form.querySelectorAll('select[name^=\"path\"]'))\n      let lastSelectedLocationId = ''\n      \n      // Find the last non-empty select value before the current one\n      let currentSelectIndex = pathSelects.indexOf(event.srcElement)\n      for (let i = currentSelectIndex - 1; i >= 0; i--) {\n        if (pathSelects[i].value !== '') {\n          lastSelectedLocationId = pathSelects[i].value\n          break\n        }\n      }\n      \n      form.elements['selected_location_id'].value = lastSelectedLocationId\n    } else {\n      form.elements['selected_location_id'].value = selectedValue\n    }\n\n    Rails.fire(form, 'submit')\n  }\n\n  onLocationUpdate(e) {\n    this.locationListTarget.innerHTML = App.location_list\n    this.locationSelectorTarget.innerHTML = App.location_selection_form\n  }\n\n  onChildLocationCreationError(event) {\n    let [data, status, xhr] = event.detail\n\n    this.childLocationErrorTarget.innerHTML = xhr.response\n  }\n  \n  validateChildLocationForm(event) {\n    if (this.childLocationFormTarget.location_region.value.includes(\"|\")) {\n      alert('Please add Compsosite Locations using the \"Add Composite Location\" function.')\n      event.preventDefault()\n    }\n  }\n\n  onLocationPickerChange(event) {\n    const form = event.target.closest('form')\n    const picker = event.target.closest('.location-picker')\n    const index = picker.dataset.pickerIndex\n    const selectorSpan = event.target.closest('.selector-span')\n    const depthInput = selectorSpan.querySelector(`[name='${index}#depth']`)\n    const changeDepth = depthInput ? depthInput.value : '0'\n\n    // Create hidden input for change depth\n    const input = document.createElement('input')\n    input.type = 'hidden'\n    input.name = `${index}#change_depth`\n    input.value = changeDepth\n    form.appendChild(input)\n\n    // Submit the form to update the preview\n    form.requestSubmit()\n  }\n\n  previewCompositeLocationAddComponent(event) {\n    event.preventDefault()\n    const form = event.target.closest('form')\n    \n    const input = document.createElement('input')\n    input.type = 'hidden'\n    input.name = 'add_location'\n    input.value = '1'\n    form.appendChild(input)\n\n    form.requestSubmit()\n  }\n\n  previewCompositeLocationRemoveComponent(event) {\n    event.preventDefault()\n    const form = event.target.closest('form')\n    const picker = event.target.closest('.location-picker')\n    const index = picker.dataset.pickerIndex\n\n    const input = document.createElement('input')\n    input.type = 'hidden'\n    input.name = `${index}#remove_location`\n    input.value = '1'\n    form.appendChild(input)\n\n    form.requestSubmit()\n  }\n\n  previewCompositeLocationCreateLocation(event) {\n    event.preventDefault()\n    const form = event.target.closest('form')\n    \n    // Temporarily set the form to target _top for redirect\n    const originalTarget = form.dataset.turboFrame\n    form.dataset.turboFrame = '_top'\n    \n    const input = document.createElement('input')\n    input.type = 'hidden'\n    input.name = 'create_location'\n    input.value = '1'\n    form.appendChild(input)\n\n    form.requestSubmit()\n    \n    // Restore original target (though page will redirect)\n    form.dataset.turboFrame = originalTarget\n  }\n  \n  onCompositePreviewSubmitEnd(event) {\n    // Turbo will automatically update the turbo-frame\n    // This method can be used for any additional processing if needed\n    console.log('Composite preview updated')\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\nexport default class extends Controller {\n  connect() {\n    let backdrop = document.querySelector(\".modal-backdrop\")\n    if (backdrop) {\n      backdrop.remove()\n    }\n\n    this.modal = new Modal(this.element)\n    this.modal.show()\n\n    let myModal = Modal.getInstance(this.element)\n\n    this.element.addEventListener(\"hidden.bs.modal\", (event) => {\n      this.element.remove()\n    })\n  }\n}\n\n", "// Visit The Stimulus Handbook for more details\n// https://stimulusjs.org/handbook/introduction\n//\n// This example controller works with specially annotated HTML like:\n//\n//  <h4>Tasks</h4>\n//  <div data-controller=\"nested-form\">\n//    <template data-target=\"nested-form.template\">\n//      <%= form.fields_for :tasks, Task.new, child_index: 'NEW_RECORD' do |task| %>\n//        <%= render \"task_fields\", form: task %>\n//      <% end %>\n//    </template>\n//\n//    <%= form.fields_for :tasks do |task| %>\n//      <%= render \"task_fields\", form: task %>\n//    <% end %>\n//\n//    <div class=\"mb-3\" data-target=\"nested-form.links\">\n//      <%= link_to \"Add Task\", \"#\", class: \"btn btn-outline-primary\", data: { action: \"click->nested-form#add_association\" } %>\n//    </div>\n//  </div>\n//\n//  # _task_fields.html.erb\n//  <%= content_tag :div, class: \"nested-fields\", data: { new_record: form.object.new_record? } do %>\n//    <div class=\"form-group\">\n//      <%= form.label :description %>\n//      <%= form.text_field :description, class: 'form-control' %>\n//      <small><%= link_to \"Remove\", \"#\", data: { action: \"click->nested-form#remove_association\" } %></small>\n//    </div>\n//\n//    <%= form.hidden_field :_destroy %>\n//  <% end %>\n\nimport { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"links\", \"template\"];\n\n  connect() {\n    this.wrapperClass = this.data.get(\"wrapperClass\") || \"nested-fields\";\n    console.log(\"nested-form connected\")\n  }\n\n  add_association(event) {\n    event.preventDefault()\n\n    let content = this.templateTarget.innerHTML.replace(\n      /NEW_RECORD/g,\n      new Date().getTime()\n    );\n    this.linksTarget.insertAdjacentHTML(\"beforebegin\", content)\n  }\n\n  remove_association(event) {\n    event.preventDefault()\n\n    let wrapper = event.target.closest(\".\" + this.wrapperClass)\n\n    // New records are simply removed from the page\n    if (wrapper.dataset.newRecord == \"true\") {\n      wrapper.remove()\n\n      // Existing records are hidden and flagged for deletion\n    } else {\n      wrapper.querySelector(\"input[name*='_destroy']\").value = 1\n      wrapper.style.display = \"none\"\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"searchInput\", \"results\", \"selectedList\", \"hiddenField\"]\n  static values = { searchUrl: String, selectedIds: Array }\n\n  connect() {\n    this.selectedIdsValue = this.selectedIdsValue || []\n    this.updateSelectedDisplay()\n    this.loadInitialResults()\n  }\n\n  search() {\n    const query = this.searchInputTarget.value.trim()\n    this.performSearch(query)\n  }\n\n  async performSearch(query = \"\", page = 1) {\n    try {\n      const url = new URL(this.searchUrlValue, window.location.origin)\n      url.searchParams.set('search', query)\n      url.searchParams.set('page', page)\n      \n      const response = await fetch(url)\n      const data = await response.json()\n      \n      this.displayResults(data.collections, page === 1)\n    } catch (error) {\n      console.error('Search failed:', error)\n    }\n  }\n\n  displayResults(collections, clearPrevious = true) {\n    if (clearPrevious) {\n      this.resultsTarget.innerHTML = ''\n    }\n\n    collections.forEach(collection => {\n      const isSelected = this.selectedIdsValue.includes(collection.id)\n      const item = this.createResultItem(collection, isSelected)\n      this.resultsTarget.appendChild(item)\n    })\n  }\n\n  createResultItem(collection, isSelected) {\n    const div = document.createElement('div')\n    div.className = `border rounded p-3 mb-2 ${isSelected ? 'bg-light border-primary' : 'bg-white'}`\n    div.dataset.collectionId = collection.id\n    \n    div.innerHTML = `\n      <div class=\"d-flex justify-content-between align-items-start\">\n        <div class=\"flex-grow-1\">\n          <h6 class=\"mb-1\">OC #${collection.id}</h6>\n          <div class=\"text-muted\">\n            <div><strong>Source:</strong> ${this.escapeHtml(collection.source)}</div>\n            <small>\n              Contact: ${this.escapeHtml(collection.contact || 'N/A')} | \n              Status: ${collection.status} | \n              Owner: ${this.escapeHtml(collection.user_name || 'N/A')} |\n              Created: ${collection.created_at}\n            </small>\n          </div>\n        </div>\n        <button type=\"button\" class=\"btn btn-sm ${isSelected ? 'btn-outline-danger' : 'btn-outline-primary'}\" \n                data-action=\"click->observation-collection-selector#toggleSelection\"\n                data-collection-id=\"${collection.id}\">\n          ${isSelected ? 'Remove' : 'Add'}\n        </button>\n      </div>\n    `\n    \n    return div\n  }\n\n  toggleSelection(event) {\n    const button = event.currentTarget\n    const collectionId = parseInt(button.dataset.collectionId)\n    \n    if (this.selectedIdsValue.includes(collectionId)) {\n      this.removeSelection(collectionId)\n    } else {\n      this.addSelection(collectionId)\n    }\n    \n    this.updateButtonState(button, this.selectedIdsValue.includes(collectionId))\n    this.updateSelectedDisplay()\n    this.updateHiddenField()\n  }\n\n  addSelection(collectionId) {\n    if (!this.selectedIdsValue.includes(collectionId)) {\n      this.selectedIdsValue = [...this.selectedIdsValue, collectionId]\n    }\n  }\n\n  removeSelection(collectionId) {\n    this.selectedIdsValue = this.selectedIdsValue.filter(id => id !== collectionId)\n  }\n\n  updateButtonState(button, isSelected) {\n    button.textContent = isSelected ? 'Remove' : 'Add'\n    button.className = `btn btn-sm ${isSelected ? 'btn-outline-danger' : 'btn-outline-primary'}`\n    \n    // Update the parent container styling\n    const container = button.closest('[data-collection-id]')\n    if (container) {\n      container.className = `border rounded p-3 mb-2 ${isSelected ? 'bg-light border-primary' : 'bg-white'}`\n    }\n  }\n\n  updateSelectedDisplay() {\n    this.selectedListTarget.innerHTML = ''\n    \n    if (this.selectedIdsValue.length === 0) {\n      this.selectedListTarget.innerHTML = '<p class=\"text-muted\">No observation collections selected</p>'\n      return\n    }\n\n    this.selectedIdsValue.forEach(id => {\n      const item = document.createElement('div')\n      item.className = 'badge bg-primary me-2 mb-2 d-inline-flex align-items-center'\n      item.innerHTML = `\n        OC #${id}\n        <button type=\"button\" class=\"btn-close btn-close-white ms-2\" \n                data-action=\"click->observation-collection-selector#removeFromSelected\"\n                data-collection-id=\"${id}\" aria-label=\"Remove\"></button>\n      `\n      this.selectedListTarget.appendChild(item)\n    })\n  }\n\n  removeFromSelected(event) {\n    const collectionId = parseInt(event.currentTarget.dataset.collectionId)\n    this.removeSelection(collectionId)\n    this.updateSelectedDisplay()\n    this.updateHiddenField()\n    \n    // Update any visible buttons in the results\n    const visibleButton = this.resultsTarget.querySelector(`[data-collection-id=\"${collectionId}\"] button`)\n    if (visibleButton) {\n      this.updateButtonState(visibleButton, false)\n    }\n  }\n\n  updateHiddenField() {\n    this.hiddenFieldTarget.value = JSON.stringify(this.selectedIdsValue)\n  }\n\n  async loadInitialResults() {\n    await this.performSearch('')\n  }\n\n  escapeHtml(text) {\n    const div = document.createElement('div')\n    div.textContent = text\n    return div.innerHTML\n  }\n\n  // Handle form submission to convert JSON back to Rails array format\n  beforeSubmit(event) {\n    // Create hidden fields for each selected ID\n    const form = event.target\n    \n    // Remove any existing observation_collection_ids fields\n    form.querySelectorAll('input[name*=\"observation_collection_ids\"]').forEach(input => {\n      if (input !== this.hiddenFieldTarget) {\n        input.remove()\n      }\n    })\n    \n    // Add hidden fields for each selected ID\n    this.selectedIdsValue.forEach(id => {\n      const input = document.createElement('input')\n      input.type = 'hidden'\n      input.name = 'observation_collection_management_group[observation_collection_ids][]'\n      input.value = id\n      form.appendChild(input)\n    })\n    \n    // Clear the JSON field since we're using the array fields\n    this.hiddenFieldTarget.value = ''\n  }\n}", "import ApplicationController from \"./application_controller\"\nimport DataTable from 'datatables.net-bs5'\nimport * as bootstrap from \"bootstrap\"\nimport { Modal } from \"bootstrap\"\nimport Autocomplete from \"bootstrap5-autocomplete\"\nimport { TempusDominus } from '@eonasdan/tempus-dominus'\nimport * as d3Base from 'd3'\nimport { responsivefy } from '../responsivefy'\nimport { sliderBottom } from 'd3-simple-slider'\n\nconst d3 = Object.assign(d3Base, { sliderBottom })\n\nexport default class extends ApplicationController {\n  static targets = [ 'ocFormContainer', 'ocForm', 'ocList', 'ocFilter', 'filterForm', 'observationsFilterForm', 'errors', 'locationSelectionForm', 'addLocationSpan', 'setLocationButton', 'locationSaveAlert', 'editableObservations', 'epicurve', 'sourceDocumentSearch', 'sourceDocumentUpload', 'openFileListButton', 'closeFileListButton', 'uploadedAlert', 'openOutsideObservationsButton', 'closeOutsideObservationsButton' ]\n\n  updateOCFormLocation(event) {\n    event.target.elements['observation_collection[location_id]'].value = this.locationSelectionFormTarget.elements['location_id'].value\n  }\n  \n  initialize() {\n    super.initializeDatepickers()\n\n    if (this.hasSourceDocumentSearchTarget) {\n      this.sourceDocumentSearchTarget.setAttribute('autocomplete', 'off')\n\n      Autocomplete.init();\n\n      new Autocomplete(this.sourceDocumentSearchTarget,\n\t\t     {\n\t\t       suggestionsThreshold: 2,\n\t\t       server: \"/source_documents/search.json\",\n\t\t       liveServer: true,\n\t\t       valueField: 'value',\n\t\t       labelField: 'text',\n\t\t       onSelectItem: async (item) => {\n\t\t\t const response = await fetch(`/source_documents/${item.value}/pick`, {\n\t\t\t   method: 'GET',\n\t\t\t   headers: {\n\t\t\t     'Accept': 'text/vnd.turbo-stream.html',\n\t\t\t     'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content\n\t\t\t   }\n\t\t\t })\n\t\t\t if (response.ok) {\n\t\t\t   const text = await response.text()\n\t\t\t   document.getElementById('source-document-rows').insertAdjacentHTML('beforeend', text)\n\t\t\t }\n\t\t       }\n\t\t     })\n    }\n\n    if (this.hasSourceDocumentUploadTarget) {\n      this.sourceDocumentUploadTarget.addEventListener('change', (event) => {\n        let fileName = event.target.files[0].name\n        let label = event.target.nextElementSibling\n        if (label && label.classList.contains('custom-file-label')) {\n          label.textContent = fileName\n        }\n        let nameInput = event.target.closest('.source-document-upload').querySelector('#source_document_name')\n        if (nameInput) {\n          nameInput.value = fileName\n        }\n      })\n    }\n\n    this.applyDataTable()\n\n    document.querySelectorAll('.map-container').forEach((element) => {\t\n      let id = element.dataset.locationPeriodId\n\n      let map = L.map(`location-period-map-${id}`).fitBounds([\n        [parseFloat(element.dataset.yMin), parseFloat(element.dataset.xMin)],\n        [parseFloat(element.dataset.yMax), parseFloat(element.dataset.xMax)]\n      ])\n\t\n      L.tileLayer.provider('CartoDB.Positron').addTo(map)\n      \n      if (element.dataset.geojson)\n\tL.geoJSON(JSON.parse(element.dataset.geojson)).addTo(map)\n    })\n\n    super.disableAutocompletion()\n\n    if ( this.hasEpicurveTarget ) {\n      this.epicurveFigure = {}\n      \n      this.initializeEpicurve()\n      this.renderEpicurve()\n    }\n  }\n\n  applyDataTable() {\n    const collectionTable = document.getElementById(\"observation-collections-table\")\n    if (collectionTable && !DataTable.isDataTable(collectionTable)) {\n      new DataTable(collectionTable, {\n        order: [],\n        retrieve: true,\n        paging: false,\n        searching: false,\n        scrollX: '100%',\n        bInfo: false,\n        stateSave: true\n      })\n    }\n\n    const observationsTable = document.getElementById(\"observations-table\")\n    if (observationsTable && !DataTable.isDataTable(observationsTable)) {\n      new DataTable(observationsTable, {\n        columnDefs: [{ orderable: false, targets: 0 }],\n        retrieve: true,\n        paging: false,\n        searching: false,\n        scrollX: '100%',\n        autoWidth : false,\n        bInfo: false,\n        stateSave: true\n      })\n    }\n  }\n  \n  \n  initializeEpicurve() {\n    this.epicurveFigure.margin = {top: 10, right: 30, bottom: 30, left: 40}\n    this.epicurveFigure.width = 2560 - this.epicurveFigure.margin.left - this.epicurveFigure.margin.right\n    this.epicurveFigure.height = 800 - this.epicurveFigure.margin.top - this.epicurveFigure.margin.bottom\n        \n    this.epicurveFigure.parseTime = d3.timeParse(\"%Y-%m-%d\")\n    this.epicurveFigure.formatTime = d3.timeFormat(\"%b. %Y\")\n   \n    this.epicurveFigure.svg = d3.select('#epicurve')\n      .append(\"svg\")\n      .attr(\"width\", this.epicurveFigure.width +\n\t    this.epicurveFigure.margin.left +\n\t    this.epicurveFigure.margin.right)\n      .attr(\"height\", this.epicurveFigure.height +\n\t    this.epicurveFigure.margin.top +\n\t    this.epicurveFigure.margin.bottom)\n      .call(responsivefy)\n      .append(\"g\")\n      .attr(\"transform\", \n\t    `translate(${this.epicurveFigure.margin.left}, ${this.epicurveFigure.margin.top})`)\n\n    this.epicurveFigure.summarySvg = d3.select('#locationSummaries')\n      .append(\"svg\")\n      .attr(\"width\", this.epicurveFigure.width +\n\t    this.epicurveFigure.margin.left +\n\t    this.epicurveFigure.margin.right)\n      .attr(\"height\", this.epicurveFigure.height +\n\t    this.epicurveFigure.margin.top +\n\t    this.epicurveFigure.margin.bottom)\n      .call(responsivefy)\n      .append(\"g\")\n      .attr(\"transform\", \n\t    `translate(${this.epicurveFigure.margin.left}, ${this.epicurveFigure.margin.top})`)\n\n    /*this.epicurveFigure.indiSvg = d3.select('#locationEpicurves')\n      .append(\"svg\")\n      .attr(\"width\", this.epicurveFigure.width +\n\t    this.epicurveFigure.margin.left +\n\t    this.epicurveFigure.margin.right)\n      .attr(\"height\", this.epicurveFigure.height +\n\t    this.epicurveFigure.margin.top +\n\t    this.epicurveFigure.margin.bottom)\n      .call(responsivefy)\n      .append(\"g\")\n      .attr(\"transform\", \n\t    `translate(${this.epicurveFigure.margin.left}, ${this.epicurveFigure.margin.top})`)*/\n  }\n\n  renderEpicurve(startDate = '', endDate = '') {\n    this.epicurveFigure.svg.selectAll('*').remove()\n    this.epicurveFigure.summarySvg.selectAll('*').remove()\n\n    d3.json(`/observation_collections/${gon.observation_collection_id}/summary_for_epicurve/${startDate}/${endDate}`)\n      .then( (data) => {\n\tdata.summary.forEach( (d) => {\n\t  d.date = this.epicurveFigure.parseTime(d.time_left)\n\t})\n\t\n\tlet numTicks = Math.round(Object.keys(data.summary).length / 25)\n\t\n\tlet x = d3\n\t    .scaleBand()\n\t    .domain(data.summary.map( (d) => d.date) )\n\t    .rangeRound([this.epicurveFigure.margin.left,\n\t\t\t this.epicurveFigure.width - this.epicurveFigure.margin.right])\n\t    .padding(0)\n\t\n\tlet y = d3\n\t    .scaleLinear()\n\t    .domain([0,\n\t\t     d3.max(data.summary, (d) => d.suspected_cases)])\n\t    .range([this.epicurveFigure.height - this.epicurveFigure.margin.bottom,\n\t\t    this.epicurveFigure.margin.top])\n\t\n\tlet len = data.summary.length - 1\n\tlet tickValuesForAxis = data.summary.map( (d, i) => {\n\t    if (i % numTicks == 0 || i == len) return d.date\n\t})\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"fill\", \"#c13414\")\n\t  .selectAll(\"rect\")\n\t  .data(data.summary)\n\t  .join(\"rect\")\n\t  .attr(\"x\", (d) => x(d.date))\n\t  .attr(\"y\", (d) => y(d.suspected_cases))\n\t  .attr(\"height\", (d) => y(0) - y(d.suspected_cases))\n\t  .attr(\"width\", x.bandwidth)\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"fill\", \"#a0a0a0\")\n\t  .selectAll(\"rect\")\n\t  .data(data.summary)\n\t  .join(\"rect\")\n\t  .attr(\"x\", (d) => x(d.date))\n\t  .attr(\"y\", (d) => y(d.deaths))\n\t  .attr(\"height\", (d) => y(0) - y(d.deaths))\n\t  .attr(\"width\", x.bandwidth)\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"transform\", `translate(0, ${this.epicurveFigure.height - this.epicurveFigure.margin.bottom})`)\n\t  .call(\n\t    d3\n\t      .axisBottom(x)\n\t      .tickValues(tickValuesForAxis)\n\t      .tickFormat( (d, i) => {\n\t\tlet r = \"\"\n\t\tif (i % numTicks == 0 || i == len) {\n\t\t  r = this.epicurveFigure.formatTime(d)\n\t\t}\n\t\treturn r\n\t      })\n\t  )\n\t\n\tthis.epicurveFigure.svg\n\t  .append(\"g\")\n\t  .attr(\"transform\", `translate(0, 20)`)\n\t  .call( d3.axisLeft(y) )\n\n\tif (! this.epicurveFigure.sliderRendered) {\n\t  this.renderRangeSlider(data.summary)\n\t}\n\n\tlet summaryX = d3.scaleBand()\n\t    .domain(data.location_summary_result.map( (d) => { return d.region }))\n            .range([0, this.epicurveFigure.width])\n            .padding(0.1)\n\t\n\tlet summaryY = d3.scaleLinear()\n\t    .domain([0,\n\t\t     d3.max(data.location_summary_result, (d) => d.suspected_cases)])\n\t    .range([this.epicurveFigure.height - this.epicurveFigure.margin.bottom,\n\t\t    this.epicurveFigure.margin.top])\n\n\t// append the rectangles for the bar chart\n\tthis.epicurveFigure.summarySvg.selectAll(\".bar\")\n\t  .data(data.location_summary_result)\n\t  .enter().append(\"rect\")\n\t  .attr(\"class\", \"bar\")\n\t  .attr(\"x\", function(d) { return summaryX(d.region); })\n\t  .attr(\"width\", summaryX.bandwidth())\n\t  .attr(\"y\", (d) => { return summaryY(d.suspected_cases) })\n\t  .attr(\"height\", (d) => { return this.epicurveFigure.height - summaryY(d.suspected_cases) })\n\t  .on(\"mouseover\", function(d, i) {\n\t    let element = document.getElementById(`mini${i.parent_id}`);\n\n\t    element.scrollIntoView()\n\t  })\n\t\n\tthis.epicurveFigure.summarySvg.append(\"g\")\n\t  .attr(\"transform\", \"translate(0,\" + this.epicurveFigure.height + \")\")\n\t  .call(d3.axisBottom(summaryX))\n\t\n\tthis.epicurveFigure.summarySvg.append(\"g\")\n\t  .call(d3.axisLeft(summaryY))\n    \n\tvar width = 150;\n\tvar height = 120;\n\tvar margin = {top: 25, right: 60, bottom: 40, left: 35};\n\n\t// Create the axes\n\tvar xScale = d3.scaleBand()\n\t    .range([0, width])\n\t    .padding(0.1)\n\t\n\tvar yScale = d3.scaleLinear()\n\t    .range([height, 0])\n\t\n\tvar xAxis = d3.axisBottom()\n\t    .scale(xScale)\n\n\t// Small multiples\n\t\n\tlet data_by_locations = d3.group(data.location_epicurves, d => d.region)\n\t\n\t/*let svg = d3.select('#location_epicurves')\n\t    .selectAll('svg')\n\t    .data(data_by_locations)\n\t    .enter()\n\t    .append('svg')\n\t    .attr(\"class\", (d) => { return d.value[0].location_id})*/\n\t// loop over the data and create the bars\n\tdata_by_locations.forEach( (d, i) => {\n\t  d.forEach( (datum) => {\n\t    datum.date = this.epicurveFigure.parseTime(datum.time_left)\n\t  })\n\n\t  d.total_suspected = d3.sum(d.map(d => d.suspected_cases))\n\t})\n\t  \n\t//yScale.domain([0, (d3.max(d, (d) => d.suspected_cases))])\n\n\td3.select(\"#locationEpicurves\").selectAll('*').remove()\n\tlet svg = d3.select(\"#locationEpicurves\")\n\t    .selectAll(\"uniqueChart\")\n\t    .data(data_by_locations) // use d.value to get to the the_value\n\t    .enter()\n\t    .append('svg')\n\t    .attr(\"id\", (d, i) => {\n\t      return `mini${d[1][0].parent_id}`\n\t    })\n\t    .attr(\"width\", width + margin.left + margin.right)\n\t    .attr(\"height\", height + margin.top + margin.bottom)\n\t    .append(\"g\")\n\t    .attr(\"transform\",\n\t\t  \"translate(\" + margin.left + \",\" + margin.top + \")\");\n\t\n\tconst lilx = d3.scaleLinear()\n\t      .domain(d3.extent(data.location_epicurves, (d) => { return d.date }))\n\t      .range([ 0, width ])\n\n\tsvg\n\t  .append(\"g\")\n\t  .attr(\"transform\", `translate(0, ${height})`)\n\t  .call(d3.axisBottom(lilx).ticks(0))\n\n\t //Add Y axis\n\tconst lily = d3.scaleLinear()\n\t      .domain([0, d3.max(data.location_epicurves, (d) => { return d.suspected_cases })])\n\t      .range([ height, 0 ]);\n\tsvg.append(\"g\")\n\t  .call(d3.axisLeft(lily).ticks(5))\n\n\tsvg\n\t  .append(\"text\")\n\t  .attr(\"text-anchor\", \"start\")\n\t  .attr(\"y\", -5)\n\t  .attr(\"x\", -20)\n\t  .text(function(d){ return(d[0])})\n\t  .style(\"font-size\", \"120%\")\n\t  .style(\"font-weight\", \"bold\")\n\t  .style(\"fill\", \"#1d685e\")\t\n\t  //.style(\"fill\", function(d){ return color(d[0]) })\n\n\tsvg\n\t  .append(\"path\")\n\t  .attr(\"fill\", \"none\")\n\t  .attr(\"stroke\", '#000')\n\t  .attr(\"stroke-width\", 1.9)\n\t  .attr(\"d\", function(d){\n            return d3.line()\n              .x(function(d) { return lilx(d.date) })\n              .y(function(d) { return lily(d.suspected_cases) })\n          (d[1])\n\t  })\n      })\n  }\n\t     \n  renderRangeSlider (data) {\n    let dates = data.map( d => d.date)\n    let sliderTicks = Math.round(Object.keys(dates).length / 50)\n    \n    let sliderRange = d3\n\t.sliderBottom()\n\t.min( d3.min(dates) )\n\t.max( d3.max(dates) )\n\t.width(800)\n\t.tickFormat(this.epicurveFigure.formatTime)\n\t.ticks(sliderTicks)\n\t.default([d3.min(dates), d3.max(dates)])\n\t.fill('#2196f3')\n\t.on('end', val => {\n\t  d3.select('p#value-range').text(val.map(this.epicurveFigure.formatTime).join(' - '));\n\n\t  this.renderEpicurve( Number.isInteger(val[0]) ? Math.round(val[0] / 1000): '',\n\t\t\t       Number.isInteger(val[1]) ? Math.round(val[1] / 1000): '' )\n\t})\n    \n    var gRange = d3\n\t.select('div#slider-range')\n\t.append('svg')\n\t.attr('width', 1000)\n\t.attr('height', 100)\n\t.append('g')\n\t.attr('transform', 'translate(30,30)');\n    \n    gRange.call(sliderRange);\n    \n    d3.select('p#value-range').text(\n      sliderRange\n\t.value()\n\t.map(this.epicurveFigure.formatTime)\n\t.join(' - ') )\n\n    this.epicurveFigure.sliderRendered = true\n  }\n\n  disableAutocompletion() {\n    document.querySelectorAll('.no-autocomplete').forEach(el => {\n      el.setAttribute('autocomplete', 'off')\n    })\n  }\n  \n  submitFilterForm() {\n    this.filterFormTarget.requestSubmit()\n  }\n\n  clearFilterForm() {\n    this.filterFormTarget.querySelectorAll('input:not(#filter-submit-button), select, textarea').forEach(input => {\n      if (input.type === 'checkbox' || input.type === 'radio') {\n        input.checked = false\n      } else {\n        input.value = ''\n      }\n    })\n    this.filterFormTarget.requestSubmit()\n  }\n\n  clearObservationsFilterForm() {\n    this.observationsFilterFormTarget.elements[\"selected_location_id\"].value = this.observationsFilterFormTarget.elements[\"oc_location_id\"].value\n\n    this.observationsFilterFormTarget.requestSubmit()\n  }\n  \n  onNewObservationCollectionError(event) {\n    let [data, status, xhr] = event.detail;\n    this.ocFormContainerTarget.innerHTML = xhr.response\n  }\n\n  onObservationsUpload(event) {\n    if (event.detail.success) {\n      document.addEventListener(\"turbo:load\", () => {\n\tthis.openFileList()\n\n\tlet uploadedCollapse = new bootstrap.Collapse(this.uploadedAlertTarget)\n\tconsole.log(uploadedCollapse)\n\tuploadedCollapse.show()\n\n\tthis.uploadedAlertTarget.scrollIntoView()\n      })\n    }\n  }\n\n  openFileList() {\n    const filesRow = document.getElementById('observations-files-row')\n    if (filesRow) filesRow.style.display = 'block'\n    \n    let openCollapse = new bootstrap.Collapse(this.openFileListButtonTarget)\n    let closeCollapse = new bootstrap.Collapse(this.closeFileListButtonTarget)\n\n    openCollapse.show()\n    closeCollapse.hide()\n  }\n\n  closeFileList() {\n    const filesRow = document.getElementById('observations-files-row')\n    if (filesRow) filesRow.style.display = 'none'\n\n    let openCollapse = new bootstrap.Collapse(this.openFileListButtonTarget)\n    let closeCollapse = new bootstrap.Collapse(this.closeFileListButtonTarget)\n\n    openCollapse.hide()\n    closeCollapse.show()\n  }\n\n  showOutsideObservationsInfo() {\n    const outsideRow = document.getElementById('outside-observations-row')\n    if (outsideRow) outsideRow.style.display = 'block'\n    \n    let openCollapse = new bootstrap.Collapse(this.openOutsideObservationsButtonTarget)\n    let closeCollapse = new bootstrap.Collapse(this.closeOutsideObservationsButtonTarget)\n\n    openCollapse.show()\n    closeCollapse.hide()\n  }\n\n  hideOutsideObservationsInfo() {\n    console.log('hide outside observations')\n    const outsideRow = document.getElementById('outside-observations-row')\n    if (outsideRow) outsideRow.style.display = 'none'\n\n    let openCollapse = new bootstrap.Collapse(this.openOutsideObservationsButtonTarget)\n    let closeCollapse = new bootstrap.Collapse(this.closeOutsideObservationsButtonTarget)\n\n    openCollapse.hide()\n    closeCollapse.show()\n  }\n  \n  onFilterUpdate(event) {\n    super.initializeDatepickers()\n\n    this.applyDataTable()    \n  }\n\n  beforeObservationUpdate(event) {\n    event.target.closest('.observation-row').querySelectorAll('input').forEach(input => {\n      input.setAttribute('disabled', true)\n    })\n  }\n  \n  onObservationUpdate(event) {\n    super.disableAutocompletion()\n  }\n  \n  updateObservation(event) {\n    event.stopImmediatePropagation()\n    event.preventDefault()\n\n    let form = event.target.closest('form')\n    if (form) form.requestSubmit()\n  }\n\n  insertNewObservationRow(event) {\n    const rows = document.querySelectorAll('#editable-observation-list .observation-row')\n    const lastRow = rows[rows.length - 1]\n    \n    if (lastRow) {\n      const areaCol = lastRow.querySelector('.area-col')\n      const newRowAreaCol = document.querySelector('#new-observation-row .area-col')\n      if (areaCol && newRowAreaCol) {\n        newRowAreaCol.innerHTML = areaCol.innerHTML\n      }\n    }\n\n    const newObservationRow = document.getElementById('new-observation-row')\n    const newRows = document.getElementById('new-rows')\n    if (newObservationRow && newRows) {\n      newRows.insertAdjacentHTML('beforeend', newObservationRow.innerHTML)\n    }\n\n    super.disableAutocompletion()\n  }\n\n  onLocationSelectorChange(event) {\n    const selectorSpan = event.target.closest('.selector-span')\n    if (selectorSpan) {\n      const depthInput = selectorSpan.querySelector('#depth')\n      if (depthInput) {\n        this.locationSelectionFormTarget.elements['change_depth'].value = depthInput.value\n      }\n    }\n\n    this.locationSelectionFormTarget.requestSubmit()\n  }\n\n  addNewLocation(event) {\n    this.locationSelectionFormTarget.requestSubmit()\n  }\n\n  onSubregionAdded(event) {\n    if (this.locationSelectionFormTarget.elements['new_region'].value != '') {\n      this.addLocationSpanTarget.style.display = 'block'\n    } else {\n      this.addLocationSpanTarget.style.display = 'none'\n    }\n  } \n\n  primaryTimeCriteriaChanged(event) {\n    const wrapper = document.getElementById('primary-time-criteria-other-wrapper')\n    if (wrapper) {\n      wrapper.style.display = event.target.value === 'OTHER' ? 'block' : 'none'\n    }\n  }\n\n  primaryTestTypeChanged(event) {\n    const wrapper = document.getElementById('primary-test-type-other-wrapper')\n    if (wrapper) {\n      wrapper.style.display = event.target.value === 'OTHER' ? 'block' : 'none'\n    }\n  }\n  \n  setObservationCollectionLocation(event) {\n\n  }\n\n  onBeforeObservationDelete(event) {\n    this.elementToDelete = event.currentTarget.closest('.observation-row');\n  }\n\n  removeObservation(event) {\n    const row = event.target.closest('.observation-row')\n    if (row) row.remove()\n    event.preventDefault()\n  }\n  \n  destroyObservation(event) {\n    if (this.elementToDelete) {\n      this.elementToDelete.remove();\n    }\n  }\n\n  onDestroyAllObservationsSuccess(event) {\n    let [data, status, xhr] = event.detail\n    const observationList = document.getElementById('observation-list')\n    if (observationList) {\n      observationList.innerHTML = xhr.response\n    }\n  }\n\n  editableObservationsUpdated(event) {\n    let [data, status, xhr] = event.detail\n    const editableList = document.getElementById('editable-observation-list')\n    if (editableList) {\n      editableList.innerHTML = xhr.response\n    }\n  }\n\n  onRemoveSourceDocument(event) {\n    const row = event.target.closest('.source-document-row')\n    if (row) row.remove()\n  }\n\n  appendSourceDocumentRow(event) {\n    let [data, status, xhr] = event.detail\n    const sourceDocRows = document.getElementById('source-document-rows')\n    if (sourceDocRows) {\n      sourceDocRows.insertAdjacentHTML('beforeend', xhr.response)\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"filterForm\", \"locationSelector\", \"ocForm\"]\n\n  onLocationSelection(event) {\n    const regionRow = event.target.closest('.region-row')\n    if (regionRow) {\n      const depthInput = regionRow.querySelector('#depth')\n      if (depthInput && this.hasFilterFormTarget) {\n        this.filterFormTarget.elements['change_depth'].value = depthInput.value\n        this.filterFormTarget.requestSubmit()\n      }\n    }\n  }\n\n  onLocationChoice(event) {\n    let [data, status, xhr] = event.detail\n\n    if (this.hasLocationSelectorTarget) {\n      this.locationSelectorTarget.innerHTML = App.location_selector\n    }\n    if (App.location_id && this.hasOcFormTarget) {\n      this.ocFormTarget.elements['observation_collection[location_id]'].value = App.location_id\n    }\n  }\n\n  onLocationSelectorChange(event) {\n    const form = event.target.closest('form')\n    if (form) {\n      const selectorSpan = event.target.closest('.selector-span')\n      if (selectorSpan) {\n        // Look for either the standard depth field or a numbered depth field\n        let observationDepth = selectorSpan.querySelector('#observation_depth')\n        if (!observationDepth) {\n          // For options_to_higher_node case, find any depth field in this span\n          observationDepth = selectorSpan.querySelector('input[name=\"observation[depth]\"]')\n        }\n        \n        const changeDepthInput = form.querySelector('#observation_change_depth')\n        if (observationDepth && changeDepthInput) {\n          changeDepthInput.value = observationDepth.value\n          \n          // If the selected value is blank, clear all deeper path fields\n          if (event.target.value === '') {\n            const currentDepth = parseInt(observationDepth.value)\n            \n            // Find and clear all path fields at deeper levels\n            const allPathSelects = form.querySelectorAll('select[name^=\"observation[path\"]')\n            allPathSelects.forEach(select => {\n              const match = select.name.match(/observation\\[path(\\d+)\\]/)\n              if (match) {\n                const selectDepth = parseInt(match[1])\n                if (selectDepth > currentDepth) {\n                  select.value = ''\n                }\n              }\n            })\n            \n            // Also clear all_locations field since it might contain a deeper value\n            const allLocationsSelect = form.querySelector('select[name=\"observation[all_locations]\"]')\n            if (allLocationsSelect) {\n              allLocationsSelect.value = ''\n            }\n          }\n        }\n      }\n      form.requestSubmit()\n    }\n  }\n\n  addNewLocation(event) {\n    event.preventDefault()\n    const areaCol = event.target.closest('.area-col')\n    if (areaCol) {\n      const addNewRegionInput = areaCol.querySelector('#observation_add_new_region')\n      if (addNewRegionInput) {\n        addNewRegionInput.value = true\n      }\n      const form = areaCol.closest('form')\n      if (form) {\n        form.requestSubmit()\n      }\n    }\n  }\n\n  onAreaInputChanged(event) {\n    const areaCol = event.target.closest('.area-col')\n    if (areaCol) {\n      const button = areaCol.querySelector('.add-button')\n      if (button) {\n        button.style.display = event.target.value !== '' ? 'block' : 'none'\n      }\n    }\n  }\n\n  toggleCompositeLocations(event) {\n    event.preventDefault()\n\n    const row = event.target.closest('.observation-row')\n    if (row) {\n      const finalElement = row.querySelector('.final')\n      const allLocations = row.querySelector('.all-locations')\n      const addArea = row.querySelector('.add-area')\n      \n      if (finalElement && allLocations) {\n        // Clear existing options and copy from all_locations\n        finalElement.innerHTML = ''\n        \n        // Copy each option individually to maintain proper form binding\n        Array.from(allLocations.options).forEach(option => {\n          const newOption = document.createElement('option')\n          newOption.value = option.value\n          newOption.textContent = option.textContent\n          if (option.selected) {\n            newOption.selected = true\n          }\n          finalElement.appendChild(newOption)\n        })\n        \n        // Remove the all_locations select from the DOM so it doesn't interfere\n        allLocations.remove()\n      }\n      if (addArea) {\n        addArea.style.display = 'none'\n      }\n    }\n\n    event.target.classList.remove('btn-outline-primary')\n    event.target.classList.add('btn-primary')\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    $.setAjaxPagination = function(callback) {\n      return $('.pagination a').click(function(event) {\n\tlet loading = $('<div id=\"loading\" style=\"display: none;\"><span><img src=\"/assets/logo.png\"/></span></div>')\n\tevent.preventDefault()\n\t$('.other_images').prepend(loading)\n\tloading.fadeIn()\n\t$.ajax({\n\t  type: 'GET',\n\t  url: $(this).attr('href'),\n\t  dataType: 'script',\n\t  success: function() {\n            return loading.fadeOut(function() {\n              loading.remove()\n              if (callback) {\n\t\treturn callback()\n              }\n            })\n\t  }\n\t})\n\treturn false\n      })\n    }\n\n    $.setAjaxPagination()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\"\n\nexport default class extends Controller {\n  static values = {\n    url: String\n  }\n\n  connect() {\n    this.sortable = Sortable.create(this.element, {\n      animation: 150,\n      handle: '.drag-handle',\n      onEnd: this.end.bind(this)\n    })\n  }\n\n  end(event) {\n    const id = event.item.dataset.sortableId\n    const newPosition = event.newIndex + 1 // 1-indexed position\n\n    // Get all items in new order\n    const items = Array.from(this.element.children).map((item, index) => ({\n      id: item.dataset.sortableId,\n      position: index + 1\n    }))\n\n    // Send AJAX request to update positions\n    fetch(this.urlValue, {\n      method: 'PATCH',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector('[name=\"csrf-token\"]').content\n      },\n      body: JSON.stringify({ items: items })\n    }).then(response => {\n      if (response.ok) {\n        // Optionally show success message\n        console.log('Order updated successfully')\n      } else {\n        // Optionally show error message\n        console.error('Failed to update order')\n      }\n    })\n  }\n\n  disconnect() {\n    if (this.sortable) {\n      this.sortable.destroy()\n    }\n  }\n}\n", "/**!\n * Sortable 1.15.7\n * @author\tRubaXa   <trash@rubaxa.org>\n * @author\towenm    <owen23355@gmail.com>\n * @license MIT\n */\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithoutHoles(r) {\n  if (Array.isArray(r)) return _arrayLikeToArray(r);\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nfunction _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _toConsumableArray(r) {\n  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nvar version = \"1.15.7\";\n\nfunction userAgent(pattern) {\n  if (typeof window !== 'undefined' && window.navigator) {\n    return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n  }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n  capture: false,\n  passive: false\n};\nfunction on(el, event, fn) {\n  el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n  el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n  if (!selector) return;\n  selector[0] === '>' && (selector = selector.substring(1));\n  if (el) {\n    try {\n      if (el.matches) {\n        return el.matches(selector);\n      } else if (el.msMatchesSelector) {\n        return el.msMatchesSelector(selector);\n      } else if (el.webkitMatchesSelector) {\n        return el.webkitMatchesSelector(selector);\n      }\n    } catch (_) {\n      return false;\n    }\n  }\n  return false;\n}\nfunction getParentOrHost(el) {\n  return el.host && el !== document && el.host.nodeType && el.host !== el ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n  if (el) {\n    ctx = ctx || document;\n    do {\n      if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n        return el;\n      }\n      if (el === ctx) break;\n      /* jshint boss:true */\n    } while (el = getParentOrHost(el));\n  }\n  return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n  if (el && name) {\n    if (el.classList) {\n      el.classList[state ? 'add' : 'remove'](name);\n    } else {\n      var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n      el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n    }\n  }\n}\nfunction css(el, prop, val) {\n  var style = el && el.style;\n  if (style) {\n    if (val === void 0) {\n      if (document.defaultView && document.defaultView.getComputedStyle) {\n        val = document.defaultView.getComputedStyle(el, '');\n      } else if (el.currentStyle) {\n        val = el.currentStyle;\n      }\n      return prop === void 0 ? val : val[prop];\n    } else {\n      if (!(prop in style) && prop.indexOf('webkit') === -1) {\n        prop = '-webkit-' + prop;\n      }\n      style[prop] = val + (typeof val === 'string' ? '' : 'px');\n    }\n  }\n}\nfunction matrix(el, selfOnly) {\n  var appliedTransforms = '';\n  if (typeof el === 'string') {\n    appliedTransforms = el;\n  } else {\n    do {\n      var transform = css(el, 'transform');\n      if (transform && transform !== 'none') {\n        appliedTransforms = transform + ' ' + appliedTransforms;\n      }\n      /* jshint boss:true */\n    } while (!selfOnly && (el = el.parentNode));\n  }\n  var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n  /*jshint -W056 */\n  return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n  if (ctx) {\n    var list = ctx.getElementsByTagName(tagName),\n      i = 0,\n      n = list.length;\n    if (iterator) {\n      for (; i < n; i++) {\n        iterator(list[i], i);\n      }\n    }\n    return list;\n  }\n  return [];\n}\nfunction getWindowScrollingElement() {\n  var scrollingElement = document.scrollingElement;\n  if (scrollingElement) {\n    return scrollingElement;\n  } else {\n    return document.documentElement;\n  }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param  {HTMLElement} el                       The element whose boundingClientRect is wanted\r\n * @param  {[Boolean]} relativeToContainingBlock  Whether the rect should be relative to the containing block of (including) the container\r\n * @param  {[Boolean]} relativeToNonStaticParent  Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param  {[Boolean]} undoScale                  Whether the container's scale() should be undone\r\n * @param  {[HTMLElement]} container              The parent the element will be placed in\r\n * @return {Object}                               The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n  if (!el.getBoundingClientRect && el !== window) return;\n  var elRect, top, left, bottom, right, height, width;\n  if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n    elRect = el.getBoundingClientRect();\n    top = elRect.top;\n    left = elRect.left;\n    bottom = elRect.bottom;\n    right = elRect.right;\n    height = elRect.height;\n    width = elRect.width;\n  } else {\n    top = 0;\n    left = 0;\n    bottom = window.innerHeight;\n    right = window.innerWidth;\n    height = window.innerHeight;\n    width = window.innerWidth;\n  }\n  if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n    // Adjust for translate()\n    container = container || el.parentNode;\n\n    // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n    // Not needed on <= IE11\n    if (!IE11OrLess) {\n      do {\n        if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n          var containerRect = container.getBoundingClientRect();\n\n          // Set relative to edges of padding box of container\n          top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n          left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n          bottom = top + elRect.height;\n          right = left + elRect.width;\n          break;\n        }\n        /* jshint boss:true */\n      } while (container = container.parentNode);\n    }\n  }\n  if (undoScale && el !== window) {\n    // Adjust for scale()\n    var elMatrix = matrix(container || el),\n      scaleX = elMatrix && elMatrix.a,\n      scaleY = elMatrix && elMatrix.d;\n    if (elMatrix) {\n      top /= scaleY;\n      left /= scaleX;\n      width /= scaleX;\n      height /= scaleY;\n      bottom = top + height;\n      right = left + width;\n    }\n  }\n  return {\n    top: top,\n    left: left,\n    bottom: bottom,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param  {HTMLElement}  el           The element who's side being scrolled out of view is in question\r\n * @param  {String}       elSide       Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param  {String}       parentSide   Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement}               The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n  var parent = getParentAutoScrollElement(el, true),\n    elSideVal = getRect(el)[elSide];\n\n  /* jshint boss:true */\n  while (parent) {\n    var parentSideVal = getRect(parent)[parentSide],\n      visible = void 0;\n    if (parentSide === 'top' || parentSide === 'left') {\n      visible = elSideVal >= parentSideVal;\n    } else {\n      visible = elSideVal <= parentSideVal;\n    }\n    if (!visible) return parent;\n    if (parent === getWindowScrollingElement()) break;\n    parent = getParentAutoScrollElement(parent, false);\n  }\n  return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param  {HTMLElement} el       The parent element\r\n * @param  {Number} childNum      The index of the child\r\n * @param  {Object} options       Parent Sortable's options\r\n * @return {HTMLElement}          The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n  var currentChild = 0,\n    i = 0,\n    children = el.children;\n  while (i < children.length) {\n    if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n      if (currentChild === childNum) {\n        return children[i];\n      }\n      currentChild++;\n    }\n    i++;\n  }\n  return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param  {HTMLElement} el       Parent element\r\n * @param  {selector} selector    Any other elements that should be ignored\r\n * @return {HTMLElement}          The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n  var last = el.lastElementChild;\n  while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n    last = last.previousElementSibling;\n  }\n  return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param  {HTMLElement} el\r\n * @param  {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n  var index = 0;\n  if (!el || !el.parentNode) {\n    return -1;\n  }\n\n  /* jshint boss:true */\n  while (el = el.previousElementSibling) {\n    if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n      index++;\n    }\n  }\n  return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param  {HTMLElement} el\r\n * @return {Array}             Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n  var offsetLeft = 0,\n    offsetTop = 0,\n    winScroller = getWindowScrollingElement();\n  if (el) {\n    do {\n      var elMatrix = matrix(el),\n        scaleX = elMatrix.a,\n        scaleY = elMatrix.d;\n      offsetLeft += el.scrollLeft * scaleX;\n      offsetTop += el.scrollTop * scaleY;\n    } while (el !== winScroller && (el = el.parentNode));\n  }\n  return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param  {Array} arr   Array that may or may not hold the object\r\n * @param  {Object} obj  An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number}      The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n  for (var i in arr) {\n    if (!arr.hasOwnProperty(i)) continue;\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n    }\n  }\n  return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n  // skip to window\n  if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n  var elem = el;\n  var gotSelf = false;\n  do {\n    // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n    if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n      var elemCSS = css(elem);\n      if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n        if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n        if (gotSelf || includeSelf) return elem;\n        gotSelf = true;\n      }\n    }\n    /* jshint boss:true */\n  } while (elem = elem.parentNode);\n  return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n  if (dst && src) {\n    for (var key in src) {\n      if (src.hasOwnProperty(key)) {\n        dst[key] = src[key];\n      }\n    }\n  }\n  return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n  return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n  return function () {\n    if (!_throttleTimeout) {\n      var args = arguments,\n        _this = this;\n      if (args.length === 1) {\n        callback.call(_this, args[0]);\n      } else {\n        callback.apply(_this, args);\n      }\n      _throttleTimeout = setTimeout(function () {\n        _throttleTimeout = void 0;\n      }, ms);\n    }\n  };\n}\nfunction cancelThrottle() {\n  clearTimeout(_throttleTimeout);\n  _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n  el.scrollLeft += x;\n  el.scrollTop += y;\n}\nfunction clone(el) {\n  var Polymer = window.Polymer;\n  var $ = window.jQuery || window.Zepto;\n  if (Polymer && Polymer.dom) {\n    return Polymer.dom(el).cloneNode(true);\n  } else if ($) {\n    return $(el).clone(true)[0];\n  } else {\n    return el.cloneNode(true);\n  }\n}\nfunction setRect(el, rect) {\n  css(el, 'position', 'absolute');\n  css(el, 'top', rect.top);\n  css(el, 'left', rect.left);\n  css(el, 'width', rect.width);\n  css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n  css(el, 'position', '');\n  css(el, 'top', '');\n  css(el, 'left', '');\n  css(el, 'width', '');\n  css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n  var rect = {};\n  Array.from(container.children).forEach(function (child) {\n    var _rect$left, _rect$top, _rect$right, _rect$bottom;\n    if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n    var childRect = getRect(child);\n    rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n    rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n    rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n    rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n  });\n  rect.width = rect.right - rect.left;\n  rect.height = rect.bottom - rect.top;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n  var animationStates = [],\n    animationCallbackId;\n  return {\n    captureAnimationState: function captureAnimationState() {\n      animationStates = [];\n      if (!this.options.animation) return;\n      var children = [].slice.call(this.el.children);\n      children.forEach(function (child) {\n        if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n        animationStates.push({\n          target: child,\n          rect: getRect(child)\n        });\n        var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n        // If animating: compensate for current animation\n        if (child.thisAnimationDuration) {\n          var childMatrix = matrix(child, true);\n          if (childMatrix) {\n            fromRect.top -= childMatrix.f;\n            fromRect.left -= childMatrix.e;\n          }\n        }\n        child.fromRect = fromRect;\n      });\n    },\n    addAnimationState: function addAnimationState(state) {\n      animationStates.push(state);\n    },\n    removeAnimationState: function removeAnimationState(target) {\n      animationStates.splice(indexOfObject(animationStates, {\n        target: target\n      }), 1);\n    },\n    animateAll: function animateAll(callback) {\n      var _this = this;\n      if (!this.options.animation) {\n        clearTimeout(animationCallbackId);\n        if (typeof callback === 'function') callback();\n        return;\n      }\n      var animating = false,\n        animationTime = 0;\n      animationStates.forEach(function (state) {\n        var time = 0,\n          target = state.target,\n          fromRect = target.fromRect,\n          toRect = getRect(target),\n          prevFromRect = target.prevFromRect,\n          prevToRect = target.prevToRect,\n          animatingRect = state.rect,\n          targetMatrix = matrix(target, true);\n        if (targetMatrix) {\n          // Compensate for current animation\n          toRect.top -= targetMatrix.f;\n          toRect.left -= targetMatrix.e;\n        }\n        target.toRect = toRect;\n        if (target.thisAnimationDuration) {\n          // Could also check if animatingRect is between fromRect and toRect\n          if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n          // Make sure animatingRect is on line between toRect & fromRect\n          (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n            // If returning to same place as started from animation and on same axis\n            time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n          }\n        }\n\n        // if fromRect != toRect: animate\n        if (!isRectEqual(toRect, fromRect)) {\n          target.prevFromRect = fromRect;\n          target.prevToRect = toRect;\n          if (!time) {\n            time = _this.options.animation;\n          }\n          _this.animate(target, animatingRect, toRect, time);\n        }\n        if (time) {\n          animating = true;\n          animationTime = Math.max(animationTime, time);\n          clearTimeout(target.animationResetTimer);\n          target.animationResetTimer = setTimeout(function () {\n            target.animationTime = 0;\n            target.prevFromRect = null;\n            target.fromRect = null;\n            target.prevToRect = null;\n            target.thisAnimationDuration = null;\n          }, time);\n          target.thisAnimationDuration = time;\n        }\n      });\n      clearTimeout(animationCallbackId);\n      if (!animating) {\n        if (typeof callback === 'function') callback();\n      } else {\n        animationCallbackId = setTimeout(function () {\n          if (typeof callback === 'function') callback();\n        }, animationTime);\n      }\n      animationStates = [];\n    },\n    animate: function animate(target, currentRect, toRect, duration) {\n      if (duration) {\n        css(target, 'transition', '');\n        css(target, 'transform', '');\n        var elMatrix = matrix(this.el),\n          scaleX = elMatrix && elMatrix.a,\n          scaleY = elMatrix && elMatrix.d,\n          translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n          translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n        target.animatingX = !!translateX;\n        target.animatingY = !!translateY;\n        css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n        this.forRepaintDummy = repaint(target); // repaint\n\n        css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n        css(target, 'transform', 'translate3d(0,0,0)');\n        typeof target.animated === 'number' && clearTimeout(target.animated);\n        target.animated = setTimeout(function () {\n          css(target, 'transition', '');\n          css(target, 'transform', '');\n          target.animated = false;\n          target.animatingX = false;\n          target.animatingY = false;\n        }, duration);\n      }\n    }\n  };\n}\nfunction repaint(target) {\n  return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n  return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n  initializeByDefault: true\n};\nvar PluginManager = {\n  mount: function mount(plugin) {\n    // Set default static properties\n    for (var option in defaults) {\n      if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n        plugin[option] = defaults[option];\n      }\n    }\n    plugins.forEach(function (p) {\n      if (p.pluginName === plugin.pluginName) {\n        throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n      }\n    });\n    plugins.push(plugin);\n  },\n  pluginEvent: function pluginEvent(eventName, sortable, evt) {\n    var _this = this;\n    this.eventCanceled = false;\n    evt.cancel = function () {\n      _this.eventCanceled = true;\n    };\n    var eventNameGlobal = eventName + 'Global';\n    plugins.forEach(function (plugin) {\n      if (!sortable[plugin.pluginName]) return;\n      // Fire global events if it exists in this sortable\n      if (sortable[plugin.pluginName][eventNameGlobal]) {\n        sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n\n      // Only fire plugin event if plugin is enabled in this sortable,\n      // and plugin has event defined\n      if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n        sortable[plugin.pluginName][eventName](_objectSpread2({\n          sortable: sortable\n        }, evt));\n      }\n    });\n  },\n  initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n    plugins.forEach(function (plugin) {\n      var pluginName = plugin.pluginName;\n      if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n      var initialized = new plugin(sortable, el, sortable.options);\n      initialized.sortable = sortable;\n      initialized.options = sortable.options;\n      sortable[pluginName] = initialized;\n\n      // Add default options from plugin\n      _extends(defaults, initialized.defaults);\n    });\n    for (var option in sortable.options) {\n      if (!sortable.options.hasOwnProperty(option)) continue;\n      var modified = this.modifyOption(sortable, option, sortable.options[option]);\n      if (typeof modified !== 'undefined') {\n        sortable.options[option] = modified;\n      }\n    }\n  },\n  getEventProperties: function getEventProperties(name, sortable) {\n    var eventProperties = {};\n    plugins.forEach(function (plugin) {\n      if (typeof plugin.eventProperties !== 'function') return;\n      _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n    });\n    return eventProperties;\n  },\n  modifyOption: function modifyOption(sortable, name, value) {\n    var modifiedValue;\n    plugins.forEach(function (plugin) {\n      // Plugin must exist on the Sortable\n      if (!sortable[plugin.pluginName]) return;\n\n      // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n      if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n        modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n      }\n    });\n    return modifiedValue;\n  }\n};\n\nfunction dispatchEvent(_ref) {\n  var sortable = _ref.sortable,\n    rootEl = _ref.rootEl,\n    name = _ref.name,\n    targetEl = _ref.targetEl,\n    cloneEl = _ref.cloneEl,\n    toEl = _ref.toEl,\n    fromEl = _ref.fromEl,\n    oldIndex = _ref.oldIndex,\n    newIndex = _ref.newIndex,\n    oldDraggableIndex = _ref.oldDraggableIndex,\n    newDraggableIndex = _ref.newDraggableIndex,\n    originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    extraEventProperties = _ref.extraEventProperties;\n  sortable = sortable || rootEl && rootEl[expando];\n  if (!sortable) return;\n  var evt,\n    options = sortable.options,\n    onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent(name, {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent(name, true, true);\n  }\n  evt.to = toEl || rootEl;\n  evt.from = fromEl || rootEl;\n  evt.item = targetEl || rootEl;\n  evt.clone = cloneEl;\n  evt.oldIndex = oldIndex;\n  evt.newIndex = newIndex;\n  evt.oldDraggableIndex = oldDraggableIndex;\n  evt.newDraggableIndex = newDraggableIndex;\n  evt.originalEvent = originalEvent;\n  evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n  var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n  for (var option in allEventProperties) {\n    evt[option] = allEventProperties[option];\n  }\n  if (rootEl) {\n    rootEl.dispatchEvent(evt);\n  }\n  if (options[onName]) {\n    options[onName].call(sortable, evt);\n  }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n    originalEvent = _ref.evt,\n    data = _objectWithoutProperties(_ref, _excluded);\n  PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n    dragEl: dragEl,\n    parentEl: parentEl,\n    ghostEl: ghostEl,\n    rootEl: rootEl,\n    nextEl: nextEl,\n    lastDownEl: lastDownEl,\n    cloneEl: cloneEl,\n    cloneHidden: cloneHidden,\n    dragStarted: moved,\n    putSortable: putSortable,\n    activeSortable: Sortable.active,\n    originalEvent: originalEvent,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex,\n    hideGhostForTarget: _hideGhostForTarget,\n    unhideGhostForTarget: _unhideGhostForTarget,\n    cloneNowHidden: function cloneNowHidden() {\n      cloneHidden = true;\n    },\n    cloneNowShown: function cloneNowShown() {\n      cloneHidden = false;\n    },\n    dispatchSortableEvent: function dispatchSortableEvent(name) {\n      _dispatchEvent({\n        sortable: sortable,\n        name: name,\n        originalEvent: originalEvent\n      });\n    }\n  }, data));\n};\nfunction _dispatchEvent(info) {\n  dispatchEvent(_objectSpread2({\n    putSortable: putSortable,\n    cloneEl: cloneEl,\n    targetEl: dragEl,\n    rootEl: rootEl,\n    oldIndex: oldIndex,\n    oldDraggableIndex: oldDraggableIndex,\n    newIndex: newIndex,\n    newDraggableIndex: newDraggableIndex\n  }, info));\n}\nvar dragEl,\n  parentEl,\n  ghostEl,\n  rootEl,\n  nextEl,\n  lastDownEl,\n  cloneEl,\n  cloneHidden,\n  oldIndex,\n  newIndex,\n  oldDraggableIndex,\n  newDraggableIndex,\n  activeGroup,\n  putSortable,\n  awaitingDragStarted = false,\n  ignoreNextClick = false,\n  sortables = [],\n  tapEvt,\n  touchEvt,\n  lastDx,\n  lastDy,\n  tapDistanceLeft,\n  tapDistanceTop,\n  moved,\n  lastTarget,\n  lastDirection,\n  pastFirstInvertThresh = false,\n  isCircumstantialInvert = false,\n  targetMoveDistance,\n  // For positioning ghost absolutely\n  ghostRelativeParent,\n  ghostRelativeParentInitialScroll = [],\n  // (left, top)\n\n  _silent = false,\n  savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n  PositionGhostAbsolutely = IOS,\n  CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n  // This will not pass for IE9, because IE9 DnD only works on anchors\n  supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n  supportCssPointerEvents = function () {\n    if (!documentExists) return;\n    // false when <= IE11\n    if (IE11OrLess) {\n      return false;\n    }\n    var el = document.createElement('x');\n    el.style.cssText = 'pointer-events:auto';\n    return el.style.pointerEvents === 'auto';\n  }(),\n  _detectDirection = function _detectDirection(el, options) {\n    var elCSS = css(el),\n      elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n      child1 = getChild(el, 0, options),\n      child2 = getChild(el, 1, options),\n      firstChildCSS = child1 && css(child1),\n      secondChildCSS = child2 && css(child2),\n      firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n      secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n    if (elCSS.display === 'flex') {\n      return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n    }\n    if (elCSS.display === 'grid') {\n      return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n    }\n    if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n      var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n      return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n    }\n    return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n  },\n  _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n    var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n      dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n      dragElOppLength = vertical ? dragRect.width : dragRect.height,\n      targetS1Opp = vertical ? targetRect.left : targetRect.top,\n      targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n      targetOppLength = vertical ? targetRect.width : targetRect.height;\n    return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n  },\n  /**\r\n   * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n   * @param  {Number} x      X position\r\n   * @param  {Number} y      Y position\r\n   * @return {HTMLElement}   Element of the first found nearest Sortable\r\n   */\n  _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n    var ret;\n    sortables.some(function (sortable) {\n      var threshold = sortable[expando].options.emptyInsertThreshold;\n      if (!threshold || lastChild(sortable)) return;\n      var rect = getRect(sortable),\n        insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n        insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n      if (insideHorizontally && insideVertically) {\n        return ret = sortable;\n      }\n    });\n    return ret;\n  },\n  _prepareGroup = function _prepareGroup(options) {\n    function toFn(value, pull) {\n      return function (to, from, dragEl, evt) {\n        var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n        if (value == null && (pull || sameGroup)) {\n          // Default pull value\n          // Default pull and put value if same group\n          return true;\n        } else if (value == null || value === false) {\n          return false;\n        } else if (pull && value === 'clone') {\n          return value;\n        } else if (typeof value === 'function') {\n          return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n        } else {\n          var otherGroup = (pull ? to : from).options.group.name;\n          return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n        }\n      };\n    }\n    var group = {};\n    var originalGroup = options.group;\n    if (!originalGroup || _typeof(originalGroup) != 'object') {\n      originalGroup = {\n        name: originalGroup\n      };\n    }\n    group.name = originalGroup.name;\n    group.checkPull = toFn(originalGroup.pull, true);\n    group.checkPut = toFn(originalGroup.put);\n    group.revertClone = originalGroup.revertClone;\n    options.group = group;\n  },\n  _hideGhostForTarget = function _hideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', 'none');\n    }\n  },\n  _unhideGhostForTarget = function _unhideGhostForTarget() {\n    if (!supportCssPointerEvents && ghostEl) {\n      css(ghostEl, 'display', '');\n    }\n  };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n  document.addEventListener('click', function (evt) {\n    if (ignoreNextClick) {\n      evt.preventDefault();\n      evt.stopPropagation && evt.stopPropagation();\n      evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n      ignoreNextClick = false;\n      return false;\n    }\n  }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n  if (dragEl) {\n    evt = evt.touches ? evt.touches[0] : evt;\n    var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n    if (nearest) {\n      // Create imitation event\n      var event = {};\n      for (var i in evt) {\n        if (evt.hasOwnProperty(i)) {\n          event[i] = evt[i];\n        }\n      }\n      event.target = event.rootEl = nearest;\n      event.preventDefault = void 0;\n      event.stopPropagation = void 0;\n      nearest[expando]._onDragOver(event);\n    }\n  }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n  if (dragEl) {\n    dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n  }\n};\n\n/**\r\n * @class  Sortable\r\n * @param  {HTMLElement}  el\r\n * @param  {Object}       [options]\r\n */\nfunction Sortable(el, options) {\n  if (!(el && el.nodeType && el.nodeType === 1)) {\n    throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n  }\n  this.el = el; // root element\n  this.options = options = _extends({}, options);\n\n  // Export instance\n  el[expando] = this;\n  var defaults = {\n    group: null,\n    sort: true,\n    disabled: false,\n    store: null,\n    handle: null,\n    draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n    swapThreshold: 1,\n    // percentage; 0 <= x <= 1\n    invertSwap: false,\n    // invert always\n    invertedSwapThreshold: null,\n    // will be set to same as swapThreshold if default\n    removeCloneOnHide: true,\n    direction: function direction() {\n      return _detectDirection(el, this.options);\n    },\n    ghostClass: 'sortable-ghost',\n    chosenClass: 'sortable-chosen',\n    dragClass: 'sortable-drag',\n    ignore: 'a, img',\n    filter: null,\n    preventOnFilter: true,\n    animation: 0,\n    easing: null,\n    setData: function setData(dataTransfer, dragEl) {\n      dataTransfer.setData('Text', dragEl.textContent);\n    },\n    dropBubble: false,\n    dragoverBubble: false,\n    dataIdAttr: 'data-id',\n    delay: 0,\n    delayOnTouchOnly: false,\n    touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n    forceFallback: false,\n    fallbackClass: 'sortable-fallback',\n    fallbackOnBody: false,\n    fallbackTolerance: 0,\n    fallbackOffset: {\n      x: 0,\n      y: 0\n    },\n    // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n    supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n    emptyInsertThreshold: 5\n  };\n  PluginManager.initializePlugins(this, el, defaults);\n\n  // Set default options\n  for (var name in defaults) {\n    !(name in options) && (options[name] = defaults[name]);\n  }\n  _prepareGroup(options);\n\n  // Bind all private methods\n  for (var fn in this) {\n    if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n      this[fn] = this[fn].bind(this);\n    }\n  }\n\n  // Setup drag mode\n  this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n  if (this.nativeDraggable) {\n    // Touch start threshold cannot be greater than the native dragstart threshold\n    this.options.touchStartThreshold = 1;\n  }\n\n  // Bind events\n  if (options.supportPointer) {\n    on(el, 'pointerdown', this._onTapStart);\n  } else {\n    on(el, 'mousedown', this._onTapStart);\n    on(el, 'touchstart', this._onTapStart);\n  }\n  if (this.nativeDraggable) {\n    on(el, 'dragover', this);\n    on(el, 'dragenter', this);\n  }\n  sortables.push(this.el);\n\n  // Restore sorting\n  options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n  // Add animation state manager\n  _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n  constructor: Sortable,\n  _isOutsideThisEl: function _isOutsideThisEl(target) {\n    if (!this.el.contains(target) && target !== this.el) {\n      lastTarget = null;\n    }\n  },\n  _getDirection: function _getDirection(evt, target) {\n    return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n  },\n  _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n    if (!evt.cancelable) return;\n    var _this = this,\n      el = this.el,\n      options = this.options,\n      preventOnFilter = options.preventOnFilter,\n      type = evt.type,\n      touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n      target = (touch || evt).target,\n      originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n      filter = options.filter;\n    _saveInputCheckedState(el);\n\n    // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n    if (dragEl) {\n      return;\n    }\n    if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n      return; // only left button and enabled\n    }\n\n    // cancel dnd if original target is content editable\n    if (originalTarget.isContentEditable) {\n      return;\n    }\n\n    // Safari ignores further event handling after mousedown\n    if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n      return;\n    }\n    target = closest(target, options.draggable, el, false);\n    if (target && target.animated) {\n      return;\n    }\n    if (lastDownEl === target) {\n      // Ignoring duplicate `down`\n      return;\n    }\n\n    // Get the index of the dragged element within its parent\n    oldIndex = index(target);\n    oldDraggableIndex = index(target, options.draggable);\n\n    // Check filter\n    if (typeof filter === 'function') {\n      if (filter.call(this, evt, target, this)) {\n        _dispatchEvent({\n          sortable: _this,\n          rootEl: originalTarget,\n          name: 'filter',\n          targetEl: target,\n          toEl: el,\n          fromEl: el\n        });\n        pluginEvent('filter', _this, {\n          evt: evt\n        });\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    } else if (filter) {\n      filter = filter.split(',').some(function (criteria) {\n        criteria = closest(originalTarget, criteria.trim(), el, false);\n        if (criteria) {\n          _dispatchEvent({\n            sortable: _this,\n            rootEl: criteria,\n            name: 'filter',\n            targetEl: target,\n            fromEl: el,\n            toEl: el\n          });\n          pluginEvent('filter', _this, {\n            evt: evt\n          });\n          return true;\n        }\n      });\n      if (filter) {\n        preventOnFilter && evt.preventDefault();\n        return; // cancel dnd\n      }\n    }\n    if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n      return;\n    }\n\n    // Prepare `dragstart`\n    this._prepareDragStart(evt, touch, target);\n  },\n  _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n    var _this = this,\n      el = _this.el,\n      options = _this.options,\n      ownerDocument = el.ownerDocument,\n      dragStartFn;\n    if (target && !dragEl && target.parentNode === el) {\n      var dragRect = getRect(target);\n      rootEl = el;\n      dragEl = target;\n      parentEl = dragEl.parentNode;\n      nextEl = dragEl.nextSibling;\n      lastDownEl = target;\n      activeGroup = options.group;\n      Sortable.dragged = dragEl;\n      tapEvt = {\n        target: dragEl,\n        clientX: (touch || evt).clientX,\n        clientY: (touch || evt).clientY\n      };\n      tapDistanceLeft = tapEvt.clientX - dragRect.left;\n      tapDistanceTop = tapEvt.clientY - dragRect.top;\n      this._lastX = (touch || evt).clientX;\n      this._lastY = (touch || evt).clientY;\n      dragEl.style['will-change'] = 'all';\n      dragStartFn = function dragStartFn() {\n        pluginEvent('delayEnded', _this, {\n          evt: evt\n        });\n        if (Sortable.eventCanceled) {\n          _this._onDrop();\n          return;\n        }\n        // Delayed drag has been triggered\n        // we can re-enable the events: touchmove/mousemove\n        _this._disableDelayedDragEvents();\n        if (!FireFox && _this.nativeDraggable) {\n          dragEl.draggable = true;\n        }\n\n        // Bind the events: dragstart/dragend\n        _this._triggerDragStart(evt, touch);\n\n        // Drag start event\n        _dispatchEvent({\n          sortable: _this,\n          name: 'choose',\n          originalEvent: evt\n        });\n\n        // Chosen item\n        toggleClass(dragEl, options.chosenClass, true);\n      };\n\n      // Disable \"draggable\"\n      options.ignore.split(',').forEach(function (criteria) {\n        find(dragEl, criteria.trim(), _disableDraggable);\n      });\n      on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n      on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n      if (options.supportPointer) {\n        on(ownerDocument, 'pointerup', _this._onDrop);\n        // Native D&D triggers pointercancel\n        !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n      } else {\n        on(ownerDocument, 'mouseup', _this._onDrop);\n        on(ownerDocument, 'touchend', _this._onDrop);\n        on(ownerDocument, 'touchcancel', _this._onDrop);\n      }\n\n      // Make dragEl draggable (must be before delay for FireFox)\n      if (FireFox && this.nativeDraggable) {\n        this.options.touchStartThreshold = 4;\n        dragEl.draggable = true;\n      }\n      pluginEvent('delayStart', this, {\n        evt: evt\n      });\n\n      // Delay is impossible for native DnD in Edge or IE\n      if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n        if (Sortable.eventCanceled) {\n          this._onDrop();\n          return;\n        }\n        // If the user moves the pointer or let go the click or touch\n        // before the delay has been reached:\n        // disable the delayed drag\n        if (options.supportPointer) {\n          on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n          on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n        } else {\n          on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n          on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n        }\n        on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n        on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n        options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n        _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n      } else {\n        dragStartFn();\n      }\n    }\n  },\n  _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n    var touch = e.touches ? e.touches[0] : e;\n    if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n      this._disableDelayedDrag();\n    }\n  },\n  _disableDelayedDrag: function _disableDelayedDrag() {\n    dragEl && _disableDraggable(dragEl);\n    clearTimeout(this._dragStartTimer);\n    this._disableDelayedDragEvents();\n  },\n  _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n    off(ownerDocument, 'touchend', this._disableDelayedDrag);\n    off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n    off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n    off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n    off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n    off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n  },\n  _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n    touch = touch || evt.pointerType == 'touch' && evt;\n    if (!this.nativeDraggable || touch) {\n      if (this.options.supportPointer) {\n        on(document, 'pointermove', this._onTouchMove);\n      } else if (touch) {\n        on(document, 'touchmove', this._onTouchMove);\n      } else {\n        on(document, 'mousemove', this._onTouchMove);\n      }\n    } else {\n      on(dragEl, 'dragend', this);\n      on(rootEl, 'dragstart', this._onDragStart);\n    }\n    try {\n      if (document.selection) {\n        _nextTick(function () {\n          document.selection.empty();\n        });\n      } else {\n        window.getSelection().removeAllRanges();\n      }\n    } catch (err) {}\n  },\n  _dragStarted: function _dragStarted(fallback, evt) {\n    awaitingDragStarted = false;\n    if (rootEl && dragEl) {\n      pluginEvent('dragStarted', this, {\n        evt: evt\n      });\n      if (this.nativeDraggable) {\n        on(document, 'dragover', _checkOutsideTargetEl);\n      }\n      var options = this.options;\n\n      // Apply effect\n      !fallback && toggleClass(dragEl, options.dragClass, false);\n      toggleClass(dragEl, options.ghostClass, true);\n      Sortable.active = this;\n      fallback && this._appendGhost();\n\n      // Drag start event\n      _dispatchEvent({\n        sortable: this,\n        name: 'start',\n        originalEvent: evt\n      });\n    } else {\n      this._nulling();\n    }\n  },\n  _emulateDragOver: function _emulateDragOver() {\n    if (touchEvt) {\n      this._lastX = touchEvt.clientX;\n      this._lastY = touchEvt.clientY;\n      _hideGhostForTarget();\n      var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n      var parent = target;\n      while (target && target.shadowRoot) {\n        target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n        if (target === parent) break;\n        parent = target;\n      }\n      dragEl.parentNode[expando]._isOutsideThisEl(target);\n      if (parent) {\n        do {\n          if (parent[expando]) {\n            var inserted = void 0;\n            inserted = parent[expando]._onDragOver({\n              clientX: touchEvt.clientX,\n              clientY: touchEvt.clientY,\n              target: target,\n              rootEl: parent\n            });\n            if (inserted && !this.options.dragoverBubble) {\n              break;\n            }\n          }\n          target = parent; // store last element\n        }\n        /* jshint boss:true */ while (parent = getParentOrHost(parent));\n      }\n      _unhideGhostForTarget();\n    }\n  },\n  _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n    if (tapEvt) {\n      var options = this.options,\n        fallbackTolerance = options.fallbackTolerance,\n        fallbackOffset = options.fallbackOffset,\n        touch = evt.touches ? evt.touches[0] : evt,\n        ghostMatrix = ghostEl && matrix(ghostEl, true),\n        scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n        scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n        relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n        dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n        dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n      // only set the status to dragging, when we are actually dragging\n      if (!Sortable.active && !awaitingDragStarted) {\n        if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n          return;\n        }\n        this._onDragStart(evt, true);\n      }\n      if (ghostEl) {\n        if (ghostMatrix) {\n          ghostMatrix.e += dx - (lastDx || 0);\n          ghostMatrix.f += dy - (lastDy || 0);\n        } else {\n          ghostMatrix = {\n            a: 1,\n            b: 0,\n            c: 0,\n            d: 1,\n            e: dx,\n            f: dy\n          };\n        }\n        var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n        css(ghostEl, 'webkitTransform', cssMatrix);\n        css(ghostEl, 'mozTransform', cssMatrix);\n        css(ghostEl, 'msTransform', cssMatrix);\n        css(ghostEl, 'transform', cssMatrix);\n        lastDx = dx;\n        lastDy = dy;\n        touchEvt = touch;\n      }\n      evt.cancelable && evt.preventDefault();\n    }\n  },\n  _appendGhost: function _appendGhost() {\n    // Bug if using scale(): https://stackoverflow.com/questions/2637058\n    // Not being adjusted for\n    if (!ghostEl) {\n      var container = this.options.fallbackOnBody ? document.body : rootEl,\n        rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n        options = this.options;\n\n      // Position absolutely\n      if (PositionGhostAbsolutely) {\n        // Get relatively positioned parent\n        ghostRelativeParent = container;\n        while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n          ghostRelativeParent = ghostRelativeParent.parentNode;\n        }\n        if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n          if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n          rect.top += ghostRelativeParent.scrollTop;\n          rect.left += ghostRelativeParent.scrollLeft;\n        } else {\n          ghostRelativeParent = getWindowScrollingElement();\n        }\n        ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n      }\n      ghostEl = dragEl.cloneNode(true);\n      toggleClass(ghostEl, options.ghostClass, false);\n      toggleClass(ghostEl, options.fallbackClass, true);\n      toggleClass(ghostEl, options.dragClass, true);\n      css(ghostEl, 'transition', '');\n      css(ghostEl, 'transform', '');\n      css(ghostEl, 'box-sizing', 'border-box');\n      css(ghostEl, 'margin', 0);\n      css(ghostEl, 'top', rect.top);\n      css(ghostEl, 'left', rect.left);\n      css(ghostEl, 'width', rect.width);\n      css(ghostEl, 'height', rect.height);\n      css(ghostEl, 'opacity', '0.8');\n      css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n      css(ghostEl, 'zIndex', '100000');\n      css(ghostEl, 'pointerEvents', 'none');\n      Sortable.ghost = ghostEl;\n      container.appendChild(ghostEl);\n\n      // Set transform-origin\n      css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n    }\n  },\n  _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n    var _this = this;\n    var dataTransfer = evt.dataTransfer;\n    var options = _this.options;\n    pluginEvent('dragStart', this, {\n      evt: evt\n    });\n    if (Sortable.eventCanceled) {\n      this._onDrop();\n      return;\n    }\n    pluginEvent('setupClone', this);\n    if (!Sortable.eventCanceled) {\n      cloneEl = clone(dragEl);\n      cloneEl.removeAttribute(\"id\");\n      cloneEl.draggable = false;\n      cloneEl.style['will-change'] = '';\n      this._hideClone();\n      toggleClass(cloneEl, this.options.chosenClass, false);\n      Sortable.clone = cloneEl;\n    }\n\n    // #1143: IFrame support workaround\n    _this.cloneId = _nextTick(function () {\n      pluginEvent('clone', _this);\n      if (Sortable.eventCanceled) return;\n      if (!_this.options.removeCloneOnHide) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      }\n      _this._hideClone();\n      _dispatchEvent({\n        sortable: _this,\n        name: 'clone'\n      });\n    });\n    !fallback && toggleClass(dragEl, options.dragClass, true);\n\n    // Set proper drop events\n    if (fallback) {\n      ignoreNextClick = true;\n      _this._loopId = setInterval(_this._emulateDragOver, 50);\n    } else {\n      // Undo what was set in _prepareDragStart before drag started\n      off(document, 'mouseup', _this._onDrop);\n      off(document, 'touchend', _this._onDrop);\n      off(document, 'touchcancel', _this._onDrop);\n      if (dataTransfer) {\n        dataTransfer.effectAllowed = 'move';\n        options.setData && options.setData.call(_this, dataTransfer, dragEl);\n      }\n      on(document, 'drop', _this);\n\n      // #1276 fix:\n      css(dragEl, 'transform', 'translateZ(0)');\n    }\n    awaitingDragStarted = true;\n    _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n    on(document, 'selectstart', _this);\n    moved = true;\n    window.getSelection().removeAllRanges();\n    if (Safari) {\n      css(document.body, 'user-select', 'none');\n    }\n  },\n  // Returns true - if no further action is needed (either inserted or another condition)\n  _onDragOver: function _onDragOver( /**Event*/evt) {\n    var el = this.el,\n      target = evt.target,\n      dragRect,\n      targetRect,\n      revert,\n      options = this.options,\n      group = options.group,\n      activeSortable = Sortable.active,\n      isOwner = activeGroup === group,\n      canSort = options.sort,\n      fromSortable = putSortable || activeSortable,\n      vertical,\n      _this = this,\n      completedFired = false;\n    if (_silent) return;\n    function dragOverEvent(name, extra) {\n      pluginEvent(name, _this, _objectSpread2({\n        evt: evt,\n        isOwner: isOwner,\n        axis: vertical ? 'vertical' : 'horizontal',\n        revert: revert,\n        dragRect: dragRect,\n        targetRect: targetRect,\n        canSort: canSort,\n        fromSortable: fromSortable,\n        target: target,\n        completed: completed,\n        onMove: function onMove(target, after) {\n          return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n        },\n        changed: changed\n      }, extra));\n    }\n\n    // Capture animation state\n    function capture() {\n      dragOverEvent('dragOverAnimationCapture');\n      _this.captureAnimationState();\n      if (_this !== fromSortable) {\n        fromSortable.captureAnimationState();\n      }\n    }\n\n    // Return invocation when dragEl is inserted (or completed)\n    function completed(insertion) {\n      dragOverEvent('dragOverCompleted', {\n        insertion: insertion\n      });\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        } else {\n          activeSortable._showClone(_this);\n        }\n        if (_this !== fromSortable) {\n          // Set ghost class to new sortable's ghost class\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n          toggleClass(dragEl, options.ghostClass, true);\n        }\n        if (putSortable !== _this && _this !== Sortable.active) {\n          putSortable = _this;\n        } else if (_this === Sortable.active && putSortable) {\n          putSortable = null;\n        }\n\n        // Animation\n        if (fromSortable === _this) {\n          _this._ignoreWhileAnimating = target;\n        }\n        _this.animateAll(function () {\n          dragOverEvent('dragOverAnimationComplete');\n          _this._ignoreWhileAnimating = null;\n        });\n        if (_this !== fromSortable) {\n          fromSortable.animateAll();\n          fromSortable._ignoreWhileAnimating = null;\n        }\n      }\n\n      // Null lastTarget if it is not inside a previously swapped element\n      if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n        lastTarget = null;\n      }\n\n      // no bubbling and not fallback\n      if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n        dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n        // Do not detect for empty insert if already inserted\n        !insertion && nearestEmptyInsertDetectEvent(evt);\n      }\n      !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n      return completedFired = true;\n    }\n\n    // Call when dragEl has been inserted\n    function changed() {\n      newIndex = index(dragEl);\n      newDraggableIndex = index(dragEl, options.draggable);\n      _dispatchEvent({\n        sortable: _this,\n        name: 'change',\n        toEl: el,\n        newIndex: newIndex,\n        newDraggableIndex: newDraggableIndex,\n        originalEvent: evt\n      });\n    }\n    if (evt.preventDefault !== void 0) {\n      evt.cancelable && evt.preventDefault();\n    }\n    target = closest(target, options.draggable, el, true);\n    dragOverEvent('dragOver');\n    if (Sortable.eventCanceled) return completedFired;\n    if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n      return completed(false);\n    }\n    ignoreNextClick = false;\n    if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n    : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n      vertical = this._getDirection(evt, target) === 'vertical';\n      dragRect = getRect(dragEl);\n      dragOverEvent('dragOverValid');\n      if (Sortable.eventCanceled) return completedFired;\n      if (revert) {\n        parentEl = rootEl; // actualization\n        capture();\n        this._hideClone();\n        dragOverEvent('revert');\n        if (!Sortable.eventCanceled) {\n          if (nextEl) {\n            rootEl.insertBefore(dragEl, nextEl);\n          } else {\n            rootEl.appendChild(dragEl);\n          }\n        }\n        return completed(true);\n      }\n      var elLastChild = lastChild(el, options.draggable);\n      if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n        // Insert to end of list\n\n        // If already at end of list: Do not insert\n        if (elLastChild === dragEl) {\n          return completed(false);\n        }\n\n        // if there is a last element, it is the target\n        if (elLastChild && el === evt.target) {\n          target = elLastChild;\n        }\n        if (target) {\n          targetRect = getRect(target);\n        }\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n          capture();\n          if (elLastChild && elLastChild.nextSibling) {\n            // the last draggable element is not the last node\n            el.insertBefore(dragEl, elLastChild.nextSibling);\n          } else {\n            el.appendChild(dragEl);\n          }\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n        // Insert to start of list\n        var firstChild = getChild(el, 0, options, true);\n        if (firstChild === dragEl) {\n          return completed(false);\n        }\n        target = firstChild;\n        targetRect = getRect(target);\n        if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n          capture();\n          el.insertBefore(dragEl, firstChild);\n          parentEl = el; // actualization\n\n          changed();\n          return completed(true);\n        }\n      } else if (target.parentNode === el) {\n        targetRect = getRect(target);\n        var direction = 0,\n          targetBeforeFirstSwap,\n          differentLevel = dragEl.parentNode !== el,\n          differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n          side1 = vertical ? 'top' : 'left',\n          scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n          scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n        if (lastTarget !== target) {\n          targetBeforeFirstSwap = targetRect[side1];\n          pastFirstInvertThresh = false;\n          isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n        }\n        direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n        var sibling;\n        if (direction !== 0) {\n          // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n          var dragIndex = index(dragEl);\n          do {\n            dragIndex -= direction;\n            sibling = parentEl.children[dragIndex];\n          } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n        }\n        // If dragEl is already beside target: Do not insert\n        if (direction === 0 || sibling === target) {\n          return completed(false);\n        }\n        lastTarget = target;\n        lastDirection = direction;\n        var nextSibling = target.nextElementSibling,\n          after = false;\n        after = direction === 1;\n        var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n        if (moveVector !== false) {\n          if (moveVector === 1 || moveVector === -1) {\n            after = moveVector === 1;\n          }\n          _silent = true;\n          setTimeout(_unsilent, 30);\n          capture();\n          if (after && !nextSibling) {\n            el.appendChild(dragEl);\n          } else {\n            target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n          }\n\n          // Undo chrome's scroll adjustment (has no effect on other browsers)\n          if (scrolledPastTop) {\n            scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n          }\n          parentEl = dragEl.parentNode; // actualization\n\n          // must be done before animation\n          if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n            targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n          }\n          changed();\n          return completed(true);\n        }\n      }\n      if (el.contains(dragEl)) {\n        return completed(false);\n      }\n    }\n    return false;\n  },\n  _ignoreWhileAnimating: null,\n  _offMoveEvents: function _offMoveEvents() {\n    off(document, 'mousemove', this._onTouchMove);\n    off(document, 'touchmove', this._onTouchMove);\n    off(document, 'pointermove', this._onTouchMove);\n    off(document, 'dragover', nearestEmptyInsertDetectEvent);\n    off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n    off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n  },\n  _offUpEvents: function _offUpEvents() {\n    var ownerDocument = this.el.ownerDocument;\n    off(ownerDocument, 'mouseup', this._onDrop);\n    off(ownerDocument, 'touchend', this._onDrop);\n    off(ownerDocument, 'pointerup', this._onDrop);\n    off(ownerDocument, 'pointercancel', this._onDrop);\n    off(ownerDocument, 'touchcancel', this._onDrop);\n    off(document, 'selectstart', this);\n  },\n  _onDrop: function _onDrop( /**Event*/evt) {\n    var el = this.el,\n      options = this.options;\n\n    // Get the index of the dragged element within its parent\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    pluginEvent('drop', this, {\n      evt: evt\n    });\n    parentEl = dragEl && dragEl.parentNode;\n\n    // Get again after plugin event\n    newIndex = index(dragEl);\n    newDraggableIndex = index(dragEl, options.draggable);\n    if (Sortable.eventCanceled) {\n      this._nulling();\n      return;\n    }\n    awaitingDragStarted = false;\n    isCircumstantialInvert = false;\n    pastFirstInvertThresh = false;\n    clearInterval(this._loopId);\n    clearTimeout(this._dragStartTimer);\n    _cancelNextTick(this.cloneId);\n    _cancelNextTick(this._dragStartId);\n\n    // Unbind events\n    if (this.nativeDraggable) {\n      off(document, 'drop', this);\n      off(el, 'dragstart', this._onDragStart);\n    }\n    this._offMoveEvents();\n    this._offUpEvents();\n    if (Safari) {\n      css(document.body, 'user-select', '');\n    }\n    css(dragEl, 'transform', '');\n    if (evt) {\n      if (moved) {\n        evt.cancelable && evt.preventDefault();\n        !options.dropBubble && evt.stopPropagation();\n      }\n      ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        // Remove clone(s)\n        cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n      }\n      if (dragEl) {\n        if (this.nativeDraggable) {\n          off(dragEl, 'dragend', this);\n        }\n        _disableDraggable(dragEl);\n        dragEl.style['will-change'] = '';\n\n        // Remove classes\n        // ghostClass is added in dragStarted\n        if (moved && !awaitingDragStarted) {\n          toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n        }\n        toggleClass(dragEl, this.options.chosenClass, false);\n\n        // Drag stop event\n        _dispatchEvent({\n          sortable: this,\n          name: 'unchoose',\n          toEl: parentEl,\n          newIndex: null,\n          newDraggableIndex: null,\n          originalEvent: evt\n        });\n        if (rootEl !== parentEl) {\n          if (newIndex >= 0) {\n            // Add event\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'add',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n\n            // Remove event\n            _dispatchEvent({\n              sortable: this,\n              name: 'remove',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n\n            // drag from one list and drop into another\n            _dispatchEvent({\n              rootEl: parentEl,\n              name: 'sort',\n              toEl: parentEl,\n              fromEl: rootEl,\n              originalEvent: evt\n            });\n            _dispatchEvent({\n              sortable: this,\n              name: 'sort',\n              toEl: parentEl,\n              originalEvent: evt\n            });\n          }\n          putSortable && putSortable.save();\n        } else {\n          if (newIndex !== oldIndex) {\n            if (newIndex >= 0) {\n              // drag & drop within the same list\n              _dispatchEvent({\n                sortable: this,\n                name: 'update',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n              _dispatchEvent({\n                sortable: this,\n                name: 'sort',\n                toEl: parentEl,\n                originalEvent: evt\n              });\n            }\n          }\n        }\n        if (Sortable.active) {\n          /* jshint eqnull:true */\n          if (newIndex == null || newIndex === -1) {\n            newIndex = oldIndex;\n            newDraggableIndex = oldDraggableIndex;\n          }\n          _dispatchEvent({\n            sortable: this,\n            name: 'end',\n            toEl: parentEl,\n            originalEvent: evt\n          });\n\n          // Save sorting\n          this.save();\n        }\n      }\n    }\n    this._nulling();\n  },\n  _nulling: function _nulling() {\n    pluginEvent('nulling', this);\n    rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n    var el = this.el;\n    savedInputChecked.forEach(function (checkEl) {\n      if (el.contains(checkEl)) {\n        checkEl.checked = true;\n      }\n    });\n    savedInputChecked.length = lastDx = lastDy = 0;\n  },\n  handleEvent: function handleEvent( /**Event*/evt) {\n    switch (evt.type) {\n      case 'drop':\n      case 'dragend':\n        this._onDrop(evt);\n        break;\n      case 'dragenter':\n      case 'dragover':\n        if (dragEl) {\n          this._onDragOver(evt);\n          _globalDragOver(evt);\n        }\n        break;\n      case 'selectstart':\n        evt.preventDefault();\n        break;\n    }\n  },\n  /**\r\n   * Serializes the item into an array of string.\r\n   * @returns {String[]}\r\n   */\n  toArray: function toArray() {\n    var order = [],\n      el,\n      children = this.el.children,\n      i = 0,\n      n = children.length,\n      options = this.options;\n    for (; i < n; i++) {\n      el = children[i];\n      if (closest(el, options.draggable, this.el, false)) {\n        order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n      }\n    }\n    return order;\n  },\n  /**\r\n   * Sorts the elements according to the array.\r\n   * @param  {String[]}  order  order of the items\r\n   */\n  sort: function sort(order, useAnimation) {\n    var items = {},\n      rootEl = this.el;\n    this.toArray().forEach(function (id, i) {\n      var el = rootEl.children[i];\n      if (closest(el, this.options.draggable, rootEl, false)) {\n        items[id] = el;\n      }\n    }, this);\n    useAnimation && this.captureAnimationState();\n    order.forEach(function (id) {\n      if (items[id]) {\n        rootEl.removeChild(items[id]);\n        rootEl.appendChild(items[id]);\n      }\n    });\n    useAnimation && this.animateAll();\n  },\n  /**\r\n   * Save the current sorting\r\n   */\n  save: function save() {\n    var store = this.options.store;\n    store && store.set && store.set(this);\n  },\n  /**\r\n   * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n   * @param   {HTMLElement}  el\r\n   * @param   {String}       [selector]  default: `options.draggable`\r\n   * @returns {HTMLElement|null}\r\n   */\n  closest: function closest$1(el, selector) {\n    return closest(el, selector || this.options.draggable, this.el, false);\n  },\n  /**\r\n   * Set/get option\r\n   * @param   {string} name\r\n   * @param   {*}      [value]\r\n   * @returns {*}\r\n   */\n  option: function option(name, value) {\n    var options = this.options;\n    if (value === void 0) {\n      return options[name];\n    } else {\n      var modifiedValue = PluginManager.modifyOption(this, name, value);\n      if (typeof modifiedValue !== 'undefined') {\n        options[name] = modifiedValue;\n      } else {\n        options[name] = value;\n      }\n      if (name === 'group') {\n        _prepareGroup(options);\n      }\n    }\n  },\n  /**\r\n   * Destroy\r\n   */\n  destroy: function destroy() {\n    pluginEvent('destroy', this);\n    var el = this.el;\n    el[expando] = null;\n    off(el, 'mousedown', this._onTapStart);\n    off(el, 'touchstart', this._onTapStart);\n    off(el, 'pointerdown', this._onTapStart);\n    if (this.nativeDraggable) {\n      off(el, 'dragover', this);\n      off(el, 'dragenter', this);\n    }\n    // Remove draggable attributes\n    Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n      el.removeAttribute('draggable');\n    });\n    this._onDrop();\n    this._disableDelayedDragEvents();\n    sortables.splice(sortables.indexOf(this.el), 1);\n    this.el = el = null;\n  },\n  _hideClone: function _hideClone() {\n    if (!cloneHidden) {\n      pluginEvent('hideClone', this);\n      if (Sortable.eventCanceled) return;\n      css(cloneEl, 'display', 'none');\n      if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n        cloneEl.parentNode.removeChild(cloneEl);\n      }\n      cloneHidden = true;\n    }\n  },\n  _showClone: function _showClone(putSortable) {\n    if (putSortable.lastPutMode !== 'clone') {\n      this._hideClone();\n      return;\n    }\n    if (cloneHidden) {\n      pluginEvent('showClone', this);\n      if (Sortable.eventCanceled) return;\n\n      // show clone at dragEl or original position\n      if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n        rootEl.insertBefore(cloneEl, dragEl);\n      } else if (nextEl) {\n        rootEl.insertBefore(cloneEl, nextEl);\n      } else {\n        rootEl.appendChild(cloneEl);\n      }\n      if (this.options.group.revertClone) {\n        this.animate(dragEl, cloneEl);\n      }\n      css(cloneEl, 'display', '');\n      cloneHidden = false;\n    }\n  }\n};\nfunction _globalDragOver( /**Event*/evt) {\n  if (evt.dataTransfer) {\n    evt.dataTransfer.dropEffect = 'move';\n  }\n  evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n  var evt,\n    sortable = fromEl[expando],\n    onMoveFn = sortable.options.onMove,\n    retVal;\n  // Support for new CustomEvent feature\n  if (window.CustomEvent && !IE11OrLess && !Edge) {\n    evt = new CustomEvent('move', {\n      bubbles: true,\n      cancelable: true\n    });\n  } else {\n    evt = document.createEvent('Event');\n    evt.initEvent('move', true, true);\n  }\n  evt.to = toEl;\n  evt.from = fromEl;\n  evt.dragged = dragEl;\n  evt.draggedRect = dragRect;\n  evt.related = targetEl || toEl;\n  evt.relatedRect = targetRect || getRect(toEl);\n  evt.willInsertAfter = willInsertAfter;\n  evt.originalEvent = originalEvent;\n  fromEl.dispatchEvent(evt);\n  if (onMoveFn) {\n    retVal = onMoveFn.call(sortable, evt, originalEvent);\n  }\n  return retVal;\n}\nfunction _disableDraggable(el) {\n  el.draggable = false;\n}\nfunction _unsilent() {\n  _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n  var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n  var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n  var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n  var spacer = 10;\n  return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n  var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n    targetLength = vertical ? targetRect.height : targetRect.width,\n    targetS1 = vertical ? targetRect.top : targetRect.left,\n    targetS2 = vertical ? targetRect.bottom : targetRect.right,\n    invert = false;\n  if (!invertSwap) {\n    // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n    if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n      // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n      // check if past first invert threshold on side opposite of lastDirection\n      if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n        // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n        pastFirstInvertThresh = true;\n      }\n      if (!pastFirstInvertThresh) {\n        // dragEl shadow (target move distance shadow)\n        if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n        : mouseOnAxis > targetS2 - targetMoveDistance) {\n          return -lastDirection;\n        }\n      } else {\n        invert = true;\n      }\n    } else {\n      // Regular\n      if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n        return _getInsertDirection(target);\n      }\n    }\n  }\n  invert = invert || invertSwap;\n  if (invert) {\n    // Invert of regular\n    if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n      return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n    }\n  }\n  return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param  {HTMLElement} target       The target whose position dragEl is being inserted at\r\n * @return {Number}                   Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n  if (index(dragEl) < index(target)) {\n    return 1;\n  } else {\n    return -1;\n  }\n}\n\n/**\r\n * Generate id\r\n * @param   {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n  var str = el.tagName + el.className + el.src + el.href + el.textContent,\n    i = str.length,\n    sum = 0;\n  while (i--) {\n    sum += str.charCodeAt(i);\n  }\n  return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n  savedInputChecked.length = 0;\n  var inputs = root.getElementsByTagName('input');\n  var idx = inputs.length;\n  while (idx--) {\n    var el = inputs[idx];\n    el.checked && savedInputChecked.push(el);\n  }\n}\nfunction _nextTick(fn) {\n  return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n  return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n  on(document, 'touchmove', function (evt) {\n    if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// Export utils\nSortable.utils = {\n  on: on,\n  off: off,\n  css: css,\n  find: find,\n  is: function is(el, selector) {\n    return !!closest(el, selector, el, false);\n  },\n  extend: extend,\n  throttle: throttle,\n  closest: closest,\n  toggleClass: toggleClass,\n  clone: clone,\n  index: index,\n  nextTick: _nextTick,\n  cancelNextTick: _cancelNextTick,\n  detectDirection: _detectDirection,\n  getChild: getChild,\n  expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param  {HTMLElement} element The element\r\n * @return {Sortable|undefined}         The instance of Sortable\r\n */\nSortable.get = function (element) {\n  return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param  {...SortablePlugin|SortablePlugin[]} plugins       Plugins being mounted\r\n */\nSortable.mount = function () {\n  for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n    plugins[_key] = arguments[_key];\n  }\n  if (plugins[0].constructor === Array) plugins = plugins[0];\n  plugins.forEach(function (plugin) {\n    if (!plugin.prototype || !plugin.prototype.constructor) {\n      throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n    }\n    if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n    PluginManager.mount(plugin);\n  });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement}  el\r\n * @param {Object}      [options]\r\n */\nSortable.create = function (el, options) {\n  return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n  scrollEl,\n  scrollRootEl,\n  scrolling = false,\n  lastAutoScrollX,\n  lastAutoScrollY,\n  touchEvt$1,\n  pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n  function AutoScroll() {\n    this.defaults = {\n      scroll: true,\n      forceAutoScrollFallback: false,\n      scrollSensitivity: 30,\n      scrollSpeed: 10,\n      bubbleScroll: true\n    };\n\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n  }\n  AutoScroll.prototype = {\n    dragStarted: function dragStarted(_ref) {\n      var originalEvent = _ref.originalEvent;\n      if (this.sortable.nativeDraggable) {\n        on(document, 'dragover', this._handleAutoScroll);\n      } else {\n        if (this.options.supportPointer) {\n          on(document, 'pointermove', this._handleFallbackAutoScroll);\n        } else if (originalEvent.touches) {\n          on(document, 'touchmove', this._handleFallbackAutoScroll);\n        } else {\n          on(document, 'mousemove', this._handleFallbackAutoScroll);\n        }\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref2) {\n      var originalEvent = _ref2.originalEvent;\n      // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n      if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n        this._handleAutoScroll(originalEvent);\n      }\n    },\n    drop: function drop() {\n      if (this.sortable.nativeDraggable) {\n        off(document, 'dragover', this._handleAutoScroll);\n      } else {\n        off(document, 'pointermove', this._handleFallbackAutoScroll);\n        off(document, 'touchmove', this._handleFallbackAutoScroll);\n        off(document, 'mousemove', this._handleFallbackAutoScroll);\n      }\n      clearPointerElemChangedInterval();\n      clearAutoScrolls();\n      cancelThrottle();\n    },\n    nulling: function nulling() {\n      touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n      autoScrolls.length = 0;\n    },\n    _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n      this._handleAutoScroll(evt, true);\n    },\n    _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n      var _this = this;\n      var x = (evt.touches ? evt.touches[0] : evt).clientX,\n        y = (evt.touches ? evt.touches[0] : evt).clientY,\n        elem = document.elementFromPoint(x, y);\n      touchEvt$1 = evt;\n\n      // IE does not seem to have native autoscroll,\n      // Edge's autoscroll seems too conditional,\n      // MACOS Safari does not have autoscroll,\n      // Firefox and Chrome are good\n      if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n        autoScroll(evt, this.options, elem, fallback);\n\n        // Listener for pointer element change\n        var ogElemScroller = getParentAutoScrollElement(elem, true);\n        if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n          pointerElemChangedInterval && clearPointerElemChangedInterval();\n          // Detect for pointer elem change, emulating native DnD behaviour\n          pointerElemChangedInterval = setInterval(function () {\n            var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n            if (newElem !== ogElemScroller) {\n              ogElemScroller = newElem;\n              clearAutoScrolls();\n            }\n            autoScroll(evt, _this.options, newElem, fallback);\n          }, 10);\n          lastAutoScrollX = x;\n          lastAutoScrollY = y;\n        }\n      } else {\n        // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n        if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n          clearAutoScrolls();\n          return;\n        }\n        autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n      }\n    }\n  };\n  return _extends(AutoScroll, {\n    pluginName: 'scroll',\n    initializeByDefault: true\n  });\n}\nfunction clearAutoScrolls() {\n  autoScrolls.forEach(function (autoScroll) {\n    clearInterval(autoScroll.pid);\n  });\n  autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n  clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n  // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n  if (!options.scroll) return;\n  var x = (evt.touches ? evt.touches[0] : evt).clientX,\n    y = (evt.touches ? evt.touches[0] : evt).clientY,\n    sens = options.scrollSensitivity,\n    speed = options.scrollSpeed,\n    winScroller = getWindowScrollingElement();\n  var scrollThisInstance = false,\n    scrollCustomFn;\n\n  // New scroll root, set scrollEl\n  if (scrollRootEl !== rootEl) {\n    scrollRootEl = rootEl;\n    clearAutoScrolls();\n    scrollEl = options.scroll;\n    scrollCustomFn = options.scrollFn;\n    if (scrollEl === true) {\n      scrollEl = getParentAutoScrollElement(rootEl, true);\n    }\n  }\n  var layersOut = 0;\n  var currentParent = scrollEl;\n  do {\n    var el = currentParent,\n      rect = getRect(el),\n      top = rect.top,\n      bottom = rect.bottom,\n      left = rect.left,\n      right = rect.right,\n      width = rect.width,\n      height = rect.height,\n      canScrollX = void 0,\n      canScrollY = void 0,\n      scrollWidth = el.scrollWidth,\n      scrollHeight = el.scrollHeight,\n      elCSS = css(el),\n      scrollPosX = el.scrollLeft,\n      scrollPosY = el.scrollTop;\n    if (el === winScroller) {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n    } else {\n      canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n      canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n    }\n    var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n    var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n    if (!autoScrolls[layersOut]) {\n      for (var i = 0; i <= layersOut; i++) {\n        if (!autoScrolls[i]) {\n          autoScrolls[i] = {};\n        }\n      }\n    }\n    if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n      autoScrolls[layersOut].el = el;\n      autoScrolls[layersOut].vx = vx;\n      autoScrolls[layersOut].vy = vy;\n      clearInterval(autoScrolls[layersOut].pid);\n      if (vx != 0 || vy != 0) {\n        scrollThisInstance = true;\n        /* jshint loopfunc:true */\n        autoScrolls[layersOut].pid = setInterval(function () {\n          // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n          if (isFallback && this.layer === 0) {\n            Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n          }\n          var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n          var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n          if (typeof scrollCustomFn === 'function') {\n            if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n              return;\n            }\n          }\n          scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n        }.bind({\n          layer: layersOut\n        }), 24);\n      }\n    }\n    layersOut++;\n  } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n  scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n  var originalEvent = _ref.originalEvent,\n    putSortable = _ref.putSortable,\n    dragEl = _ref.dragEl,\n    activeSortable = _ref.activeSortable,\n    dispatchSortableEvent = _ref.dispatchSortableEvent,\n    hideGhostForTarget = _ref.hideGhostForTarget,\n    unhideGhostForTarget = _ref.unhideGhostForTarget;\n  if (!originalEvent) return;\n  var toSortable = putSortable || activeSortable;\n  hideGhostForTarget();\n  var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n  var target = document.elementFromPoint(touch.clientX, touch.clientY);\n  unhideGhostForTarget();\n  if (toSortable && !toSortable.el.contains(target)) {\n    dispatchSortableEvent('spill');\n    this.onSpill({\n      dragEl: dragEl,\n      putSortable: putSortable\n    });\n  }\n};\nfunction Revert() {}\nRevert.prototype = {\n  startIndex: null,\n  dragStart: function dragStart(_ref2) {\n    var oldDraggableIndex = _ref2.oldDraggableIndex;\n    this.startIndex = oldDraggableIndex;\n  },\n  onSpill: function onSpill(_ref3) {\n    var dragEl = _ref3.dragEl,\n      putSortable = _ref3.putSortable;\n    this.sortable.captureAnimationState();\n    if (putSortable) {\n      putSortable.captureAnimationState();\n    }\n    var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n    if (nextSibling) {\n      this.sortable.el.insertBefore(dragEl, nextSibling);\n    } else {\n      this.sortable.el.appendChild(dragEl);\n    }\n    this.sortable.animateAll();\n    if (putSortable) {\n      putSortable.animateAll();\n    }\n  },\n  drop: drop\n};\n_extends(Revert, {\n  pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n  onSpill: function onSpill(_ref4) {\n    var dragEl = _ref4.dragEl,\n      putSortable = _ref4.putSortable;\n    var parentSortable = putSortable || this.sortable;\n    parentSortable.captureAnimationState();\n    dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n    parentSortable.animateAll();\n  },\n  drop: drop\n};\n_extends(Remove, {\n  pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n  function Swap() {\n    this.defaults = {\n      swapClass: 'sortable-swap-highlight'\n    };\n  }\n  Swap.prototype = {\n    dragStart: function dragStart(_ref) {\n      var dragEl = _ref.dragEl;\n      lastSwapEl = dragEl;\n    },\n    dragOverValid: function dragOverValid(_ref2) {\n      var completed = _ref2.completed,\n        target = _ref2.target,\n        onMove = _ref2.onMove,\n        activeSortable = _ref2.activeSortable,\n        changed = _ref2.changed,\n        cancel = _ref2.cancel;\n      if (!activeSortable.options.swap) return;\n      var el = this.sortable.el,\n        options = this.options;\n      if (target && target !== el) {\n        var prevSwapEl = lastSwapEl;\n        if (onMove(target) !== false) {\n          toggleClass(target, options.swapClass, true);\n          lastSwapEl = target;\n        } else {\n          lastSwapEl = null;\n        }\n        if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n          toggleClass(prevSwapEl, options.swapClass, false);\n        }\n      }\n      changed();\n      completed(true);\n      cancel();\n    },\n    drop: function drop(_ref3) {\n      var activeSortable = _ref3.activeSortable,\n        putSortable = _ref3.putSortable,\n        dragEl = _ref3.dragEl;\n      var toSortable = putSortable || this.sortable;\n      var options = this.options;\n      lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n      if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n        if (dragEl !== lastSwapEl) {\n          toSortable.captureAnimationState();\n          if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n          swapNodes(dragEl, lastSwapEl);\n          toSortable.animateAll();\n          if (toSortable !== activeSortable) activeSortable.animateAll();\n        }\n      }\n    },\n    nulling: function nulling() {\n      lastSwapEl = null;\n    }\n  };\n  return _extends(Swap, {\n    pluginName: 'swap',\n    eventProperties: function eventProperties() {\n      return {\n        swapItem: lastSwapEl\n      };\n    }\n  });\n}\nfunction swapNodes(n1, n2) {\n  var p1 = n1.parentNode,\n    p2 = n2.parentNode,\n    i1,\n    i2;\n  if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n  i1 = index(n1);\n  i2 = index(n2);\n  if (p1.isEqualNode(p2) && i1 < i2) {\n    i2++;\n  }\n  p1.insertBefore(n2, p1.children[i1]);\n  p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n  multiDragClones = [],\n  lastMultiDragSelect,\n  // for selection with modifier key down (SHIFT)\n  multiDragSortable,\n  initialFolding = false,\n  // Initial multi-drag fold when drag started\n  folding = false,\n  // Folding any other time\n  dragStarted = false,\n  dragEl$1,\n  clonesFromRect,\n  clonesHidden;\nfunction MultiDragPlugin() {\n  function MultiDrag(sortable) {\n    // Bind all private methods\n    for (var fn in this) {\n      if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n        this[fn] = this[fn].bind(this);\n      }\n    }\n    if (!sortable.options.avoidImplicitDeselect) {\n      if (sortable.options.supportPointer) {\n        on(document, 'pointerup', this._deselectMultiDrag);\n      } else {\n        on(document, 'mouseup', this._deselectMultiDrag);\n        on(document, 'touchend', this._deselectMultiDrag);\n      }\n    }\n    on(document, 'keydown', this._checkKeyDown);\n    on(document, 'keyup', this._checkKeyUp);\n    this.defaults = {\n      selectedClass: 'sortable-selected',\n      multiDragKey: null,\n      avoidImplicitDeselect: false,\n      setData: function setData(dataTransfer, dragEl) {\n        var data = '';\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          multiDragElements.forEach(function (multiDragElement, i) {\n            data += (!i ? '' : ', ') + multiDragElement.textContent;\n          });\n        } else {\n          data = dragEl.textContent;\n        }\n        dataTransfer.setData('Text', data);\n      }\n    };\n  }\n  MultiDrag.prototype = {\n    multiDragKeyDown: false,\n    isMultiDrag: false,\n    delayStartGlobal: function delayStartGlobal(_ref) {\n      var dragged = _ref.dragEl;\n      dragEl$1 = dragged;\n    },\n    delayEnded: function delayEnded() {\n      this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n    },\n    setupClone: function setupClone(_ref2) {\n      var sortable = _ref2.sortable,\n        cancel = _ref2.cancel;\n      if (!this.isMultiDrag) return;\n      for (var i = 0; i < multiDragElements.length; i++) {\n        multiDragClones.push(clone(multiDragElements[i]));\n        multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n        multiDragClones[i].draggable = false;\n        multiDragClones[i].style['will-change'] = '';\n        toggleClass(multiDragClones[i], this.options.selectedClass, false);\n        multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n      }\n      sortable._hideClone();\n      cancel();\n    },\n    clone: function clone(_ref3) {\n      var sortable = _ref3.sortable,\n        rootEl = _ref3.rootEl,\n        dispatchSortableEvent = _ref3.dispatchSortableEvent,\n        cancel = _ref3.cancel;\n      if (!this.isMultiDrag) return;\n      if (!this.options.removeCloneOnHide) {\n        if (multiDragElements.length && multiDragSortable === sortable) {\n          insertMultiDragClones(true, rootEl);\n          dispatchSortableEvent('clone');\n          cancel();\n        }\n      }\n    },\n    showClone: function showClone(_ref4) {\n      var cloneNowShown = _ref4.cloneNowShown,\n        rootEl = _ref4.rootEl,\n        cancel = _ref4.cancel;\n      if (!this.isMultiDrag) return;\n      insertMultiDragClones(false, rootEl);\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', '');\n      });\n      cloneNowShown();\n      clonesHidden = false;\n      cancel();\n    },\n    hideClone: function hideClone(_ref5) {\n      var _this = this;\n      var sortable = _ref5.sortable,\n        cloneNowHidden = _ref5.cloneNowHidden,\n        cancel = _ref5.cancel;\n      if (!this.isMultiDrag) return;\n      multiDragClones.forEach(function (clone) {\n        css(clone, 'display', 'none');\n        if (_this.options.removeCloneOnHide && clone.parentNode) {\n          clone.parentNode.removeChild(clone);\n        }\n      });\n      cloneNowHidden();\n      clonesHidden = true;\n      cancel();\n    },\n    dragStartGlobal: function dragStartGlobal(_ref6) {\n      var sortable = _ref6.sortable;\n      if (!this.isMultiDrag && multiDragSortable) {\n        multiDragSortable.multiDrag._deselectMultiDrag();\n      }\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.sortableIndex = index(multiDragElement);\n      });\n\n      // Sort multi-drag elements\n      multiDragElements = multiDragElements.sort(function (a, b) {\n        return a.sortableIndex - b.sortableIndex;\n      });\n      dragStarted = true;\n    },\n    dragStarted: function dragStarted(_ref7) {\n      var _this2 = this;\n      var sortable = _ref7.sortable;\n      if (!this.isMultiDrag) return;\n      if (this.options.sort) {\n        // Capture rects,\n        // hide multi drag elements (by positioning them absolute),\n        // set multi drag elements rects to dragRect,\n        // show multi drag elements,\n        // animate to rects,\n        // unset rects & remove from DOM\n\n        sortable.captureAnimationState();\n        if (this.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            css(multiDragElement, 'position', 'absolute');\n          });\n          var dragRect = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRect);\n          });\n          folding = true;\n          initialFolding = true;\n        }\n      }\n      sortable.animateAll(function () {\n        folding = false;\n        initialFolding = false;\n        if (_this2.options.animation) {\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n        }\n\n        // Remove all auxiliary multidrag items from el, if sorting enabled\n        if (_this2.options.sort) {\n          removeMultiDragElements();\n        }\n      });\n    },\n    dragOver: function dragOver(_ref8) {\n      var target = _ref8.target,\n        completed = _ref8.completed,\n        cancel = _ref8.cancel;\n      if (folding && ~multiDragElements.indexOf(target)) {\n        completed(false);\n        cancel();\n      }\n    },\n    revert: function revert(_ref9) {\n      var fromSortable = _ref9.fromSortable,\n        rootEl = _ref9.rootEl,\n        sortable = _ref9.sortable,\n        dragRect = _ref9.dragRect;\n      if (multiDragElements.length > 1) {\n        // Setup unfold animation\n        multiDragElements.forEach(function (multiDragElement) {\n          sortable.addAnimationState({\n            target: multiDragElement,\n            rect: folding ? getRect(multiDragElement) : dragRect\n          });\n          unsetRect(multiDragElement);\n          multiDragElement.fromRect = dragRect;\n          fromSortable.removeAnimationState(multiDragElement);\n        });\n        folding = false;\n        insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n      }\n    },\n    dragOverCompleted: function dragOverCompleted(_ref10) {\n      var sortable = _ref10.sortable,\n        isOwner = _ref10.isOwner,\n        insertion = _ref10.insertion,\n        activeSortable = _ref10.activeSortable,\n        parentEl = _ref10.parentEl,\n        putSortable = _ref10.putSortable;\n      var options = this.options;\n      if (insertion) {\n        // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n        if (isOwner) {\n          activeSortable._hideClone();\n        }\n        initialFolding = false;\n        // If leaving sort:false root, or already folding - Fold to new location\n        if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n          // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n          var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n          multiDragElements.forEach(function (multiDragElement) {\n            if (multiDragElement === dragEl$1) return;\n            setRect(multiDragElement, dragRectAbsolute);\n\n            // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n            // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n            parentEl.appendChild(multiDragElement);\n          });\n          folding = true;\n        }\n\n        // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n        if (!isOwner) {\n          // Only remove if not folding (folding will remove them anyways)\n          if (!folding) {\n            removeMultiDragElements();\n          }\n          if (multiDragElements.length > 1) {\n            var clonesHiddenBefore = clonesHidden;\n            activeSortable._showClone(sortable);\n\n            // Unfold animation for clones if showing from hidden\n            if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n              multiDragClones.forEach(function (clone) {\n                activeSortable.addAnimationState({\n                  target: clone,\n                  rect: clonesFromRect\n                });\n                clone.fromRect = clonesFromRect;\n                clone.thisAnimationDuration = null;\n              });\n            }\n          } else {\n            activeSortable._showClone(sortable);\n          }\n        }\n      }\n    },\n    dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n      var dragRect = _ref11.dragRect,\n        isOwner = _ref11.isOwner,\n        activeSortable = _ref11.activeSortable;\n      multiDragElements.forEach(function (multiDragElement) {\n        multiDragElement.thisAnimationDuration = null;\n      });\n      if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n        clonesFromRect = _extends({}, dragRect);\n        var dragMatrix = matrix(dragEl$1, true);\n        clonesFromRect.top -= dragMatrix.f;\n        clonesFromRect.left -= dragMatrix.e;\n      }\n    },\n    dragOverAnimationComplete: function dragOverAnimationComplete() {\n      if (folding) {\n        folding = false;\n        removeMultiDragElements();\n      }\n    },\n    drop: function drop(_ref12) {\n      var evt = _ref12.originalEvent,\n        rootEl = _ref12.rootEl,\n        parentEl = _ref12.parentEl,\n        sortable = _ref12.sortable,\n        dispatchSortableEvent = _ref12.dispatchSortableEvent,\n        oldIndex = _ref12.oldIndex,\n        putSortable = _ref12.putSortable;\n      var toSortable = putSortable || this.sortable;\n      if (!evt) return;\n      var options = this.options,\n        children = parentEl.children;\n\n      // Multi-drag selection\n      if (!dragStarted) {\n        if (options.multiDragKey && !this.multiDragKeyDown) {\n          this._deselectMultiDrag();\n        }\n        toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n        if (!~multiDragElements.indexOf(dragEl$1)) {\n          multiDragElements.push(dragEl$1);\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'select',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n\n          // Modifier activated, select from last to dragEl\n          if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n            var lastIndex = index(lastMultiDragSelect),\n              currentIndex = index(dragEl$1);\n            if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n              (function () {\n                // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n                // (but previous selection existed)\n                var n, i;\n                if (currentIndex > lastIndex) {\n                  i = lastIndex;\n                  n = currentIndex;\n                } else {\n                  i = currentIndex;\n                  n = lastIndex + 1;\n                }\n                var filter = options.filter;\n                for (; i < n; i++) {\n                  if (~multiDragElements.indexOf(children[i])) continue;\n                  // Check if element is draggable\n                  if (!closest(children[i], options.draggable, parentEl, false)) continue;\n                  // Check if element is filtered\n                  var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n                    return closest(children[i], criteria.trim(), parentEl, false);\n                  }));\n                  if (filtered) continue;\n                  toggleClass(children[i], options.selectedClass, true);\n                  multiDragElements.push(children[i]);\n                  dispatchEvent({\n                    sortable: sortable,\n                    rootEl: rootEl,\n                    name: 'select',\n                    targetEl: children[i],\n                    originalEvent: evt\n                  });\n                }\n              })();\n            }\n          } else {\n            lastMultiDragSelect = dragEl$1;\n          }\n          multiDragSortable = toSortable;\n        } else {\n          multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n          lastMultiDragSelect = null;\n          dispatchEvent({\n            sortable: sortable,\n            rootEl: rootEl,\n            name: 'deselect',\n            targetEl: dragEl$1,\n            originalEvent: evt\n          });\n        }\n      }\n\n      // Multi-drag drop\n      if (dragStarted && this.isMultiDrag) {\n        folding = false;\n        // Do not \"unfold\" after around dragEl if reverted\n        if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n          var dragRect = getRect(dragEl$1),\n            multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n          if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n          toSortable.captureAnimationState();\n          if (!initialFolding) {\n            if (options.animation) {\n              dragEl$1.fromRect = dragRect;\n              multiDragElements.forEach(function (multiDragElement) {\n                multiDragElement.thisAnimationDuration = null;\n                if (multiDragElement !== dragEl$1) {\n                  var rect = folding ? getRect(multiDragElement) : dragRect;\n                  multiDragElement.fromRect = rect;\n\n                  // Prepare unfold animation\n                  toSortable.addAnimationState({\n                    target: multiDragElement,\n                    rect: rect\n                  });\n                }\n              });\n            }\n\n            // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n            // properly they must all be removed\n            removeMultiDragElements();\n            multiDragElements.forEach(function (multiDragElement) {\n              if (children[multiDragIndex]) {\n                parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n              } else {\n                parentEl.appendChild(multiDragElement);\n              }\n              multiDragIndex++;\n            });\n\n            // If initial folding is done, the elements may have changed position because they are now\n            // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n            // must be fired here as Sortable will not.\n            if (oldIndex === index(dragEl$1)) {\n              var update = false;\n              multiDragElements.forEach(function (multiDragElement) {\n                if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n                  update = true;\n                  return;\n                }\n              });\n              if (update) {\n                dispatchSortableEvent('update');\n                dispatchSortableEvent('sort');\n              }\n            }\n          }\n\n          // Must be done after capturing individual rects (scroll bar)\n          multiDragElements.forEach(function (multiDragElement) {\n            unsetRect(multiDragElement);\n          });\n          toSortable.animateAll();\n        }\n        multiDragSortable = toSortable;\n      }\n\n      // Remove clones if necessary\n      if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n        multiDragClones.forEach(function (clone) {\n          clone.parentNode && clone.parentNode.removeChild(clone);\n        });\n      }\n    },\n    nullingGlobal: function nullingGlobal() {\n      this.isMultiDrag = dragStarted = false;\n      multiDragClones.length = 0;\n    },\n    destroyGlobal: function destroyGlobal() {\n      this._deselectMultiDrag();\n      off(document, 'pointerup', this._deselectMultiDrag);\n      off(document, 'mouseup', this._deselectMultiDrag);\n      off(document, 'touchend', this._deselectMultiDrag);\n      off(document, 'keydown', this._checkKeyDown);\n      off(document, 'keyup', this._checkKeyUp);\n    },\n    _deselectMultiDrag: function _deselectMultiDrag(evt) {\n      if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n      // Only deselect if selection is in this sortable\n      if (multiDragSortable !== this.sortable) return;\n\n      // Only deselect if target is not item in this sortable\n      if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n      // Only deselect if left click\n      if (evt && evt.button !== 0) return;\n      while (multiDragElements.length) {\n        var el = multiDragElements[0];\n        toggleClass(el, this.options.selectedClass, false);\n        multiDragElements.shift();\n        dispatchEvent({\n          sortable: this.sortable,\n          rootEl: this.sortable.el,\n          name: 'deselect',\n          targetEl: el,\n          originalEvent: evt\n        });\n      }\n    },\n    _checkKeyDown: function _checkKeyDown(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = true;\n      }\n    },\n    _checkKeyUp: function _checkKeyUp(evt) {\n      if (evt.key === this.options.multiDragKey) {\n        this.multiDragKeyDown = false;\n      }\n    }\n  };\n  return _extends(MultiDrag, {\n    // Static methods & properties\n    pluginName: 'multiDrag',\n    utils: {\n      /**\r\n       * Selects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be selected\r\n       */\n      select: function select(el) {\n        var sortable = el.parentNode[expando];\n        if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n        if (multiDragSortable && multiDragSortable !== sortable) {\n          multiDragSortable.multiDrag._deselectMultiDrag();\n          multiDragSortable = sortable;\n        }\n        toggleClass(el, sortable.options.selectedClass, true);\n        multiDragElements.push(el);\n      },\n      /**\r\n       * Deselects the provided multi-drag item\r\n       * @param  {HTMLElement} el    The element to be deselected\r\n       */\n      deselect: function deselect(el) {\n        var sortable = el.parentNode[expando],\n          index = multiDragElements.indexOf(el);\n        if (!sortable || !sortable.options.multiDrag || !~index) return;\n        toggleClass(el, sortable.options.selectedClass, false);\n        multiDragElements.splice(index, 1);\n      }\n    },\n    eventProperties: function eventProperties() {\n      var _this3 = this;\n      var oldIndicies = [],\n        newIndicies = [];\n      multiDragElements.forEach(function (multiDragElement) {\n        oldIndicies.push({\n          multiDragElement: multiDragElement,\n          index: multiDragElement.sortableIndex\n        });\n\n        // multiDragElements will already be sorted if folding\n        var newIndex;\n        if (folding && multiDragElement !== dragEl$1) {\n          newIndex = -1;\n        } else if (folding) {\n          newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n        } else {\n          newIndex = index(multiDragElement);\n        }\n        newIndicies.push({\n          multiDragElement: multiDragElement,\n          index: newIndex\n        });\n      });\n      return {\n        items: _toConsumableArray(multiDragElements),\n        clones: [].concat(multiDragClones),\n        oldIndicies: oldIndicies,\n        newIndicies: newIndicies\n      };\n    },\n    optionListeners: {\n      multiDragKey: function multiDragKey(key) {\n        key = key.toLowerCase();\n        if (key === 'ctrl') {\n          key = 'Control';\n        } else if (key.length > 1) {\n          key = key.charAt(0).toUpperCase() + key.substr(1);\n        }\n        return key;\n      }\n    }\n  });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n  multiDragElements.forEach(function (multiDragElement, i) {\n    var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(multiDragElement, target);\n    } else {\n      rootEl.appendChild(multiDragElement);\n    }\n  });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param  {[Boolean]} elementsInserted  Whether the multi-drag elements are inserted\r\n * @param  {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n  multiDragClones.forEach(function (clone, i) {\n    var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n    if (target) {\n      rootEl.insertBefore(clone, target);\n    } else {\n      rootEl.appendChild(clone);\n    }\n  });\n}\nfunction removeMultiDragElements() {\n  multiDragElements.forEach(function (multiDragElement) {\n    if (multiDragElement === dragEl$1) return;\n    multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n  });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ ]\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'apiKeyResponse' ]\n    \n  onApiKeyGeneration(event) {\n    let [data, status, xhr] = event.detail\n    let response_data = JSON.parse(xhr.response)\n\n    this.apiKeyResponseTarget.classList.remove(\"hidden\")\n\n    this.apiKeyResponseTarget.innerHTML = `Your new API key is: ${response_data.api_key}<br>Please make note of it. This will replace any previously set key.`\n  }\n}\n", "\n        import * as module0 from './application_controller.js';import * as module1 from './confirm_controller.js';import * as module2 from './countries_controller.js';import * as module3 from './country_profile_controller.js';import * as module4 from './documents_controller.js';import * as module5 from './file_uploads_controller.js';import * as module6 from './invitations_controller.js';import * as module7 from './location_documents_controller.js';import * as module8 from './location_migrations_controller.js';import * as module9 from './location_periods_controller.js';import * as module10 from './locations_controller.js';import * as module11 from './modal_controller.js';import * as module12 from './nested_form_controller.js';import * as module13 from './observation_collection_selector_controller.js';import * as module14 from './observation_collections_controller.js';import * as module15 from './observations_controller.js';import * as module16 from './pagination_controller.js';import * as module17 from './sortable_controller.js';import * as module18 from './source_documents_controller.js';import * as module19 from './users_controller.js'\n        const modules = [{name: 'application', module: module0, filename: 'application_controller.js'},{name: 'confirm', module: module1, filename: 'confirm_controller.js'},{name: 'countries', module: module2, filename: 'countries_controller.js'},{name: 'country-profile', module: module3, filename: 'country_profile_controller.js'},{name: 'documents', module: module4, filename: 'documents_controller.js'},{name: 'file-uploads', module: module5, filename: 'file_uploads_controller.js'},{name: 'invitations', module: module6, filename: 'invitations_controller.js'},{name: 'location-documents', module: module7, filename: 'location_documents_controller.js'},{name: 'location-migrations', module: module8, filename: 'location_migrations_controller.js'},{name: 'location-periods', module: module9, filename: 'location_periods_controller.js'},{name: 'locations', module: module10, filename: 'locations_controller.js'},{name: 'modal', module: module11, filename: 'modal_controller.js'},{name: 'nested-form', module: module12, filename: 'nested_form_controller.js'},{name: 'observation-collection-selector', module: module13, filename: 'observation_collection_selector_controller.js'},{name: 'observation-collections', module: module14, filename: 'observation_collections_controller.js'},{name: 'observations', module: module15, filename: 'observations_controller.js'},{name: 'pagination', module: module16, filename: 'pagination_controller.js'},{name: 'sortable', module: module17, filename: 'sortable_controller.js'},{name: 'source-documents', module: module18, filename: 'source_documents_controller.js'},{name: 'users', module: module19, filename: 'users_controller.js'}]\n        export default modules;\n      ", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\n//import { application } from \"./application\"\n\n//import  from \"./\"\n//application.register(\"\", )\n\n//import controllers from \"./**/*_controller.js\"\n//controllers.forEach((controller) => {\n//  application.register(controller.name, controller.module.default)\n//})\n\nimport { Application } from \"@hotwired/stimulus\"\nconst application = Application.start()\n\nimport controllers from \"./**/*_controller.js\"\ncontrollers.forEach((controller) => {\n  application.register(controller.name, controller.module.default)\n})\n", "import \"@hotwired/turbo-rails\"\n\nimport './add_jquery'\n\nimport \"bootstrap\"\n\nimport 'jquery-ui/dist/jquery-ui'\n\nimport Rails from '@rails/ujs'\nwindow.Rails = Rails\nRails.start()\n\nrequire(\"@rails/activestorage\").start()\n\nimport \"./global\"\n\n// First-party analytics beacon. Importing ahoy.js tracks the visit on load\n// (POST /ahoy/visits); since it runs in the browser, non-JS bots don't register.\n// Use `ahoy.track(\"name\", {...})` elsewhere for custom events.\nimport ahoy from \"ahoy.js\"\nwindow.ahoy = ahoy\n\nimport \"./controllers\"\n\nconst afterRenderEvent = new Event(\"turbo:after-stream-render\");\naddEventListener(\"turbo:before-stream-render\", (event) => {\n  const originalRender = event.detail.render\n\n  event.detail.render = function (streamElement) {\n    originalRender(streamElement)\n    document.dispatchEvent(afterRenderEvent);\n  }\n})\n"],
  "mappings": "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",
  "names": ["time", "jitter", "consumer", "error", "event", "type", "object", "consumer", "s", "consumer", "s", "subscription", "a", "exports", "module", "global", "window", "slice", "array", "indexOf", "isFunction", "isWindow", "document", "toType", "version", "jQuery", "copy", "clone", "length", "arr", "second", "matches", "type", "sort", "a", "push", "documentElement", "expando", "rquickExpr", "escape", "find", "m", "i", "groups", "tokenize", "cache", "fn", "id", "node", "start", "dir", "hash", "map", "filter", "elem", "self", "init", "root", "object", "queue", "fire", "add", "index", "v", "value", "maxDepth", "deferred", "error", "Data", "getData", "attrs", "data", "count", "scale", "unit", "nodeName", "selection", "on", "one", "event", "remove", "html", "swap", "name", "end", "empty", "timer", "time", "timeout", "option", "max", "location", "nonce", "s", "val", "completed", "off", "responseText", "offset", "top", "method", "start", "name", "style", "x", "y", "getComputedStyle", "getComputedStyle", "css", "window", "min", "max", "v", "popperOffsets", "axis", "min", "max", "center", "offset", "effect", "toPaddingObject", "x", "y", "popper", "getComputedStyle", "effect", "window", "hash", "html", "x", "y", "html", "x", "y", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "start", "popperOffsets", "offset", "axis", "placements", "placement", "a", "placements", "placement", "start", "_loop", "_i", "checks", "offset", "x", "y", "axis", "popperOffsets", "offset", "min", "max", "start", "map", "sort", "debounce", "fn", "merged", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "m", "index", "fn", "debounce", "destroy", "state", "effect", "noopFn", "createPopper", "defaultModifiers", "createPopper", "createPopper", "start", "exports", "module", "undefined", "VERSION", "root", "array", "index", "length", "offset", "collection", "object", "cache", "map", "transform", "set", "runInContext", "Array", "Date", "Error", "Function", "Math", "Object", "RegExp", "String", "TypeError", "Buffer", "Symbol", "Uint8Array", "DataView", "Map", "Promise", "Set", "WeakMap", "result", "start", "end", "iteratee", "type", "size", "values", "pairs", "get", "number", "lower", "key", "setTimeout", "includes", "path", "identity", "indexOf", "indexes", "nested", "constant", "clearTimeout", "id", "order", "fn", "getData", "ary", "setData", "pair", "noop", "othValue", "flatten", "reference", "count", "difference", "drop", "intersection", "remove", "reverse", "slice", "union", "group", "zip", "toArray", "parent", "clone", "every", "filter", "find", "reduce", "negate", "shuffle", "some", "now", "bindKey", "debounce", "time", "flip", "throttle", "isElement", "isEmpty", "isFinite", "isNaN", "sign", "create", "defaults", "merge", "capitalize", "escape", "pad", "parseInt", "template", "interpolate", "unescape", "matches", "chain", "range", "add", "ceil", "max", "mean", "min", "round", "sum", "value", "a", "a", "x", "left", "a", "right", "center", "x", "index", "length", "blur", "y", "x", "start", "sum", "s", "count", "index", "array", "length", "reduce", "index", "j", "i", "sum", "index", "v", "count", "mean", "sum", "index", "v", "min", "max", "index", "index", "v", "x", "y", "init_src", "key", "identity", "x", "identity", "groups", "reduce", "map", "values", "keyof", "index", "group", "init_src", "index", "f", "c", "a", "x", "reduce", "key", "x", "start", "count", "error", "inc", "reverse", "ticks", "start", "count", "identity", "threshold", "x", "x0", "x1", "max", "step", "m", "a", "bin", "max", "index", "max", "maxIndex", "index", "min", "index", "min", "minIndex", "index", "array", "k", "left", "right", "m", "s", "max", "min", "max", "numbers", "i", "index", "j", "min", "max", "c", "min", "max", "c", "count", "sum", "index", "flatten", "array", "index", "count", "init_src", "pairs", "a", "start", "range", "k", "c", "min", "min", "index", "max", "index", "index", "shuffle", "array", "m", "sum", "index", "matrix", "m", "min", "length", "transpose", "zip", "index", "index", "array", "index", "map", "index", "reducer", "index", "init_src", "set", "v", "init_src", "init_src", "set", "set", "init_src", "src_exports", "map", "max", "min", "zip", "init_src", "x", "init_identity", "x", "y", "number", "scale", "offset", "tickFormat", "k", "top", "left", "right", "transform", "bottom", "axis", "format", "range", "selection", "path", "init_identity", "src_exports", "init_src", "dispatch", "type", "c", "set", "noop", "copy", "src_exports", "init_src", "document", "groups", "m", "group", "array", "x", "init_array", "empty", "array", "groups", "m", "group", "init_array", "filter", "groups", "m", "group", "init_filter", "datum", "x", "init_constant", "group", "groups", "m", "init_constant", "selection", "m", "merge", "init_merge", "groups", "m", "group", "ascending", "a", "groups", "m", "group", "init_sort", "groups", "m", "group", "groups", "m", "group", "v", "v", "v", "v", "v", "create", "create", "clone", "event", "parseTypenames", "on", "m", "type", "window", "event", "dispatch_default", "init_dispatch", "groups", "m", "group", "groups", "init_filter", "init_merge", "init_sort", "init_dispatch", "dispatch_default", "select_default", "init_select", "select_default", "init_select", "id", "event", "event", "svg", "point", "event", "selectAll_default", "array", "init_selectAll", "init_array", "src_exports", "select_default", "selectAll_default", "init_src", "init_select", "init_selectAll", "event", "root", "selection", "select_default", "init_src", "constant_default", "init_constant", "x", "type", "x", "y", "dispatch", "event", "filter", "selection", "select_default", "c", "container", "dispatch", "s", "type", "touch", "p0", "constant_default", "init_src", "init_constant", "src_exports", "init_src", "extend", "format", "m", "a", "s", "min", "max", "m2", "extend", "k", "init_math", "y", "x", "a", "c", "init_math", "extend", "k", "k", "s", "init_math", "extend", "a", "cosh", "sinh", "init_src", "t1", "t2", "t3", "constant_default", "init_constant", "x", "a", "y", "constant_default", "init_color", "init_constant", "color", "init_src", "init_color", "y", "rgb", "start", "end", "a", "c", "x", "a", "x", "c", "init_array", "a", "a", "init_number", "a", "c", "k", "zero", "a", "s", "i", "init_number", "a", "c", "constant_default", "init_src", "init_array", "init_number", "init_constant", "range", "a", "x", "init_color", "a", "a", "c", "degrees", "identity", "m", "identity", "s", "a", "scale", "init_number", "x", "p0", "b0", "b1", "s", "u", "hsl", "hue", "start", "end", "s", "init_src", "init_color", "lab", "start", "end", "a", "init_lab", "init_src", "init_color", "hcl", "hue", "start", "end", "c", "init_src", "init_color", "cubehelix", "hue", "y", "start", "end", "s", "init_cubehelix", "init_src", "init_color", "interpolate", "v", "i", "init_src", "init_array", "init_number", "init_lab", "init_cubehelix", "now", "time", "t0", "t1", "t2", "time", "time", "callback", "delay", "now", "init_src", "id", "index", "group", "get", "set", "self", "start", "init_src", "empty", "interrupt_default", "init_interrupt", "id", "set", "get", "transition", "a", "c", "init_src", "attrRemove", "attrRemoveNS", "attrConstant", "interpolate", "attrConstantNS", "attrFunction", "attrFunctionNS", "attr_default", "init_attr", "init_src", "t0", "init_src", "id", "get", "id", "set", "get", "id", "set", "get", "id", "v", "set", "filter_default", "groups", "m", "group", "init_filter", "init_src", "init_transition", "merge_default", "transition", "m", "merge", "init_merge", "init_transition", "start", "id", "set", "on", "on_default", "get", "init_on", "id", "remove_default", "init_remove", "select_default", "id", "groups", "m", "group", "get", "init_select", "init_src", "init_transition", "selectAll_default", "id", "groups", "m", "group", "children", "inherit", "get", "k", "init_selectAll", "init_src", "init_transition", "selection_default", "Selection", "init_selection", "init_src", "interpolate", "styleRemove", "styleConstant", "styleFunction", "id", "event", "remove", "set", "on", "style_default", "init_style", "init_src", "textConstant", "textFunction", "text_default", "init_text", "t0", "groups", "m", "group", "inherit", "get", "init_transition", "id", "end", "set", "on", "groups", "id", "init_transition", "init_src", "init_attr", "init_filter", "init_merge", "init_on", "init_remove", "init_select", "init_selectAll", "init_selection", "init_style", "init_text", "select_default", "selectAll_default", "filter_default", "merge_default", "selection_default", "on_default", "attr_default", "style_default", "text_default", "remove_default", "linear", "polyIn", "custom", "polyOut", "polyInOut", "x", "init_math", "init_math", "custom", "s", "backIn", "backOut", "backInOut", "init_math", "custom", "a", "s", "elasticIn", "p", "elasticOut", "elasticInOut", "src_exports", "linear", "init_src", "id", "transition_default", "now", "groups", "m", "group", "init_transition", "init_src", "init_selection", "init_src", "init_interrupt", "init_transition", "interrupt_default", "transition_default", "root", "init_transition", "src_exports", "init_src", "init_selection", "init_transition", "constant_default", "init_constant", "x", "type", "selection", "mode", "dispatch", "init_event", "nopropagation", "event", "noevent_default", "init_noevent", "number2", "defaultFilter", "event", "svg", "defaultTouchable", "local", "empty", "extent", "filter", "brush", "group", "select_default", "selection", "mode", "type", "E", "min", "max", "moved", "point", "noevent_default", "nopropagation", "constant_default", "init_src", "init_constant", "init_event", "init_noevent", "x", "y", "init_src", "abs", "pi", "halfPi", "tau", "max", "epsilon", "init_math", "range", "k", "a", "transpose", "chord", "matrix", "groups", "x", "max", "tau", "x0", "init_math", "k", "pi", "tau", "epsilon", "x", "y", "x1", "y1", "x2", "y2", "x0", "y0", "da", "init_src", "slice", "init_array", "constant_default", "x", "init_constant", "ribbon", "s", "slice", "halfPi", "epsilon", "abs", "constant_default", "init_src", "init_array", "init_constant", "init_math", "init_src", "array", "slice", "init_array", "a", "init_ascending", "constant_default", "init_constant", "x", "c", "point", "x", "y", "contains", "pi", "a", "within", "init_contains", "threshold", "v", "x", "y", "t0", "t1", "t2", "t3", "start", "end", "index", "point", "constant_default", "slice", "a", "init_src", "init_array", "init_ascending", "init_constant", "init_contains", "x", "y", "k", "m", "threshold", "constant_default", "x0", "y0", "max", "c", "transform", "coordinates", "slice", "init_src", "init_array", "init_constant", "init_src", "sum", "epsilon", "c", "t1", "t0", "u3", "B", "sum", "D", "epsilon", "u", "epsilon", "bc", "ca", "ab", "u", "abt", "bct", "cat", "_8", "_16", "fin", "fin2", "epsilon", "ab", "bc", "_8", "_8b", "_16", "_48", "fin", "epsilon", "x", "y", "left", "right", "median", "swap", "maxY", "id", "center", "k", "start", "n", "a", "b0", "p0", "c", "epsilon", "Path", "init_path", "x", "y", "x0", "y0", "x", "y", "init_path", "x", "y", "t1", "t2", "t3", "x1", "y1", "x2", "y2", "x3", "y3", "ab", "i", "a", "p0", "x0", "y0", "Path", "v", "flip", "c", "k", "collinear", "a", "c", "cross", "x", "y", "array", "tau", "init_path", "p0", "Path", "h", "t0", "t1", "t2", "init_src", "object", "s", "length", "date", "seconds", "milliseconds", "c", "format", "object", "number", "m", "init_src", "init", "init", "text_default", "init", "init_text", "init", "text_default", "format", "csv", "tsv", "init_dsv", "init_src", "init_text", "init", "init", "type", "init", "text_default", "init_text", "init_src", "init_dsv", "init_text", "x", "y", "x", "y", "add", "x0", "y0", "x1", "y1", "right", "bottom", "x", "y", "x0", "y0", "x1", "y1", "data_default", "init_data", "init_extent", "x0", "y0", "x1", "y1", "init_quad", "x", "y", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "init_quad", "remove_default", "x", "y", "x0", "y0", "x1", "y1", "right", "bottom", "init_remove", "size_default", "init_size", "x0", "y0", "x1", "y1", "init_quad", "x0", "y0", "x1", "y1", "init_quad", "defaultX", "defaultY", "x", "y", "defaultX", "defaultY", "x0", "y0", "x1", "y1", "copy", "init_data", "init_extent", "init_remove", "init_size", "data_default", "remove_default", "size_default", "init_src", "constant_default", "x", "init_constant", "iterations", "constant_default", "k", "x0", "y0", "x1", "y1", "x", "y", "init_src", "init_constant", "index", "find", "id", "constant_default", "count", "iterations", "link", "k", "x", "y", "m", "i", "init_constant", "s", "m", "x", "y", "event", "iterations", "k", "angle", "closest", "init_src", "constant_default", "x", "y", "node", "strength", "c", "x1", "x2", "init_src", "init_constant", "x", "y", "constant_default", "k", "init_constant", "x_default", "x", "constant_default", "init_x", "init_constant", "y_default", "y", "constant_default", "init_y", "init_constant", "init_src", "init_x", "init_y", "x", "x", "length", "s", "x", "exponent", "x", "exponent", "x", "identity_default", "x", "init_identity", "locale", "group", "identity_default", "map", "sign", "zero", "type", "format", "c", "length", "formatPrefix", "k", "value", "init_identity", "max", "init_src", "x", "pi", "halfPi", "sin", "epsilon", "epsilon2", "tau", "degrees", "radians", "abs", "cos", "log", "pow", "init_math", "noop", "init_noop", "coordinates", "object", "phi", "radians", "cos", "sin", "k", "u", "v", "area_default", "object", "init_area", "init_src", "init_math", "init_noop", "noop", "tau", "cartesian", "spherical", "phi", "cos", "sin", "a", "k", "init_math", "phi", "range", "lambda0", "radians", "sign", "degrees", "abs", "lambda00", "phi00", "epsilon", "lambda1", "a", "x", "init_src", "init_area", "init_math", "phi", "radians", "cos", "sin", "x", "y", "lambda00", "phi00", "m", "v", "object", "epsilon2", "epsilon", "degrees", "init_src", "init_math", "init_noop", "noop", "constant_default", "x", "init_constant", "a", "x", "y", "phi", "abs", "pi", "tau", "cos", "sin", "x", "y", "k", "radians", "coordinates", "degrees", "init_math", "t0", "t1", "cos", "sin", "tau", "point", "epsilon", "center", "constant_default", "x", "y", "degrees", "c", "radians", "init_circle", "init_constant", "init_math", "buffer_default", "x", "y", "m", "noop", "init_buffer", "init_noop", "a", "abs", "epsilon", "init_math", "point", "compareIntersection", "interpolate", "n", "p0", "x", "epsilon", "start", "array", "a", "init_math", "point", "abs", "pi", "tau", "phi", "sin", "cos", "angle", "sum", "halfPi", "epsilon", "m", "lambda0", "phi0", "sinPhi0", "cosPhi0", "lambda1", "phi1", "sign", "k", "intersection", "epsilon2", "init_src", "init_math", "interpolate", "start", "buffer_default", "point", "phi", "m", "a", "halfPi", "epsilon", "init_buffer", "init_math", "init_src", "lambda0", "phi0", "lambda1", "phi1", "pi", "abs", "epsilon", "halfPi", "cosPhi0", "sin", "cos", "phi", "init_math", "circle_default", "cos", "radians", "abs", "epsilon", "interpolate", "phi", "point2", "v", "c", "pi", "intersect", "a", "c2", "A", "B", "u", "t2", "lambda0", "lambda1", "phi0", "phi1", "delta", "code", "init_circle", "init_math", "a", "x0", "y0", "x1", "y1", "t0", "t1", "x0", "y0", "x1", "y1", "x", "y", "interpolate", "a", "abs", "epsilon", "compareIntersection", "ca", "buffer_default", "point", "ring", "m", "b0", "b1", "visible", "linePoint", "v", "init_math", "init_buffer", "init_src", "extent_default", "x0", "y0", "x1", "y1", "cache", "init_extent", "noop", "phi", "radians", "lambda0", "sinPhi0", "sin", "cosPhi0", "cos", "abs", "x", "y", "object", "init_src", "init_math", "init_noop", "a", "point", "coordinates", "ab", "epsilon2", "radians", "contains_default", "object", "init_contains", "init_math", "y0", "y1", "y", "epsilon", "x", "x0", "x1", "X1", "X0", "Y1", "Y0", "X", "Y", "graticule", "abs", "coordinates", "init_src", "init_math", "interpolate_default", "a", "x0", "radians", "y0", "x1", "y1", "cos", "sin", "k", "interpolate", "B", "A", "x", "y", "degrees", "init_interpolate", "init_math", "identity_default", "init_identity", "x", "areaRingStart", "areaStream", "areaPointFirst", "x", "y", "areaPoint", "x0", "y0", "areaRingSum", "areaRingEnd", "areaSum", "area_default", "init_area", "init_src", "init_math", "init_noop", "noop", "abs", "boundsPoint", "x", "y", "x0", "y0", "boundsStream", "bounds_default", "init_bounds", "init_noop", "noop", "centroidPoint", "x", "y", "X0", "Y0", "Z0", "centroidLineStart", "centroidStream", "x0", "y0", "X1", "Y1", "Z1", "centroidLineEnd", "centroidRingStart", "centroidRingEnd", "x00", "y00", "X2", "Y2", "Z2", "centroid_default", "init_centroid", "init_math", "init_math", "init_noop", "x", "y", "tau", "noop", "lengthPointFirst", "x", "y", "lengthStream", "lengthPoint", "x00", "x0", "y00", "y0", "lengthSum", "init_src", "init_math", "init_noop", "noop", "length", "append", "appendRound", "k", "init_string", "x", "y", "s", "projection", "path", "object", "area_default", "bounds_default", "centroid_default", "identity_default", "init_path", "init_identity", "init_area", "init_bounds", "init_centroid", "init_string", "s", "init_transform", "x", "y", "projection", "object", "bounds_default", "extent", "k", "x", "y", "init_bounds", "x", "y", "x0", "y0", "lambda0", "b0", "x1", "y1", "lambda1", "b1", "a", "c", "m", "lambda2", "abs", "epsilon", "x2", "y2", "lambda00", "x00", "y00", "point", "linePoint", "phi", "init_math", "init_transform", "cos", "radians", "x", "y", "k", "transform", "cos", "sin", "a", "phi", "x0", "y0", "x1", "y1", "identity_default", "cache", "projection", "point", "radians", "degrees", "circle_default", "extent", "object", "center", "init_circle", "init_identity", "init_math", "init_transform", "phi0", "phi1", "pi", "m", "radians", "degrees", "init_math", "phi0", "cosPhi0", "cos", "phi", "sin", "x", "y", "init_math", "y0", "y1", "sin", "abs", "epsilon", "c", "x", "y", "cos", "pi", "init_math", "x", "y", "cache", "point", "coordinates", "k", "epsilon", "extent", "object", "init_math", "scale", "x", "y", "cos", "k", "sin", "angle", "c", "cc", "init_math", "init_math", "init_math", "c", "sin", "phi", "log", "halfPi", "tau", "m", "center", "scale", "x0", "y0", "x1", "y1", "k", "pi", "init_math", "x", "y", "y", "halfPi", "y0", "y1", "cos", "sin", "log", "pow", "x", "epsilon", "abs", "pi", "init_math", "phi", "y0", "y1", "cos", "sin", "abs", "epsilon", "x", "y", "pi", "init_math", "phi", "sin", "cos", "init_math", "x", "y", "abs", "epsilon2", "x", "y", "cos", "k", "sin", "init_math", "identity_default", "k", "ca", "x0", "y0", "x1", "y1", "kx", "ky", "transform", "x", "y", "projection", "cache", "radians", "sin", "cos", "degrees", "extent", "object", "init_identity", "init_transform", "init_math", "phi", "phi2", "init_math", "x", "y", "abs", "epsilon", "x", "y", "cos", "sin", "epsilon", "init_math", "x", "y", "cos", "k", "sin", "init_math", "phi", "log", "halfPi", "m", "center", "init_math", "x", "y", "init_src", "init_area", "init_circle", "init_extent", "init_contains", "init_interpolate", "init_path", "init_identity", "init_transform", "a", "children", "x", "c", "y", "root", "left", "right", "x0", "x1", "count", "sum", "children", "init_count", "each_default", "index", "init_each", "children", "index", "children", "index", "find_default", "index", "init_find", "sum", "children", "init_sum", "sort_default", "init_sort", "path_default", "end", "start", "k", "a", "c", "init_path", "root", "iterator_default", "children", "init_iterator", "children", "root", "Node", "init_count", "init_each", "init_find", "init_sum", "init_sort", "init_path", "init_iterator", "each_default", "find_default", "sort_default", "path_default", "iterator_default", "constant_default", "x", "init_constant", "lcg_default", "s", "a", "c", "m", "init_lcg", "array_default", "x", "array", "m", "init_array", "lcg_default", "B", "a", "x1", "y1", "x2", "y2", "c", "x3", "y3", "a2", "a3", "b2", "b3", "c2", "c3", "d3", "ab", "A", "C", "init_array", "init_lcg", "a", "c", "x", "a2", "y", "b2", "ab", "Node", "array_default", "aa", "ca", "k", "lcg_default", "init_array", "init_lcg", "defaultRadius", "root", "lcg_default", "x", "constant_default", "k", "children", "init_constant", "init_lcg", "round_default", "init_round", "x0", "y0", "x1", "y1", "k", "round", "root", "round_default", "dy", "x0", "y0", "x1", "y1", "x", "init_round", "id", "path", "root", "d", "i", "normalize", "Node", "node", "x", "k", "defaultSeparation", "a", "v", "children", "root", "left", "right", "bottom", "s", "kx", "ky", "x", "Node", "x0", "y0", "x1", "y1", "k", "x0", "y0", "x1", "y1", "custom", "x", "round", "root", "round_default", "x0", "y0", "x1", "y1", "x", "constant_default", "init_round", "init_constant", "x0", "y0", "x1", "y1", "sum", "i", "k", "x0", "y0", "x1", "y1", "custom", "x0", "y0", "x1", "y1", "m", "x", "init_src", "area_default", "a", "init_area", "centroid_default", "x", "y", "a", "c", "k", "init_centroid", "a", "c", "init_cross", "a", "indexes", "init_cross", "contains_default", "point", "x", "y", "x0", "y0", "x1", "y1", "init_contains", "length_default", "init_length", "init_src", "init_area", "init_centroid", "init_contains", "init_length", "min", "max", "min", "max", "x", "y", "sum", "k", "c", "x", "v", "u", "X", "Y", "x", "B", "y", "sign", "s", "k", "k", "a", "x", "a", "a", "u", "B", "s", "k", "init_lcg", "init_src", "init_lcg", "range", "index", "range", "scale", "init_src", "scale", "round", "reverse", "start", "copy", "init_src", "x", "init_constant", "number", "x", "init_number", "identity", "x", "normalize", "a", "range", "interpolate", "i", "transformer", "transform", "piecewise", "scale", "y", "number", "u", "init_src", "init_constant", "init_number", "start", "count", "init_src", "scale", "count", "start", "linear", "init_linear", "init_src", "identity", "scale", "x", "number", "init_identity", "init_linear", "init_number", "nice", "interval", "x0", "x1", "init_nice", "x", "k", "transform", "scale", "count", "u", "v", "nice", "log", "transformer", "init_src", "init_nice", "c", "x", "transform", "scale", "transformer", "init_linear", "exponent", "x", "transform", "scale", "identity", "pow", "transformer", "sqrt", "init_linear", "x", "range", "round", "scale", "y", "number", "init_radial", "init_linear", "init_number", "quantile", "range", "scale", "x", "y", "init_quantile", "init_src", "x0", "x1", "range", "scale", "x", "y", "init_quantize", "init_src", "init_linear", "range", "scale", "x", "y", "init_src", "count", "interval", "date", "start", "range", "end", "t0", "t1", "init_interval", "init_interval", "date", "start", "end", "k", "init_duration", "init_interval", "init_duration", "date", "start", "end", "init_interval", "init_duration", "date", "start", "end", "init_interval", "init_duration", "date", "start", "end", "init_interval", "init_duration", "date", "start", "end", "date", "start", "end", "init_interval", "init_duration", "init_interval", "date", "start", "end", "init_interval", "date", "start", "end", "k", "ticks", "start", "count", "reverse", "interval", "step", "init_ticks", "init_src", "init_duration", "init_src", "init_interval", "init_ticks", "date", "y", "m", "locale", "formatYear", "formats", "c", "pad", "format", "sign", "length", "s", "init_locale", "init_src", "defaultLocale", "locale", "init_defaultLocale", "init_locale", "date", "init_defaultLocale", "date", "init_defaultLocale", "init_src", "init_defaultLocale", "init_locale", "number", "ticks", "second", "format", "scale", "formatYear", "tickFormat", "date", "y", "interval", "count", "nice", "init_src", "init_nice", "init_src", "transformer", "x0", "x1", "t0", "t1", "transform", "identity", "scale", "x", "range", "interpolate", "copy", "init_src", "init_linear", "identity", "scale", "x", "init_src", "transformer", "x0", "x1", "x2", "s", "t0", "t1", "t2", "identity", "transform", "scale", "x", "range", "interpolate", "copy", "init_src", "init_linear", "src_exports", "identity", "linear", "log", "pow", "quantile", "sqrt", "init_src", "init_identity", "init_linear", "init_radial", "init_quantile", "init_quantize", "init_src", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "scheme", "cubehelix_default", "init_cubehelix", "init_src", "c", "init_src", "x", "c", "init_src", "range", "init_src", "init_cubehelix", "constant_default", "x", "constant", "init_constant", "acos", "x", "pi", "asin", "halfPi", "abs", "atan2", "cos", "max", "min", "sin", "sqrt", "epsilon", "tau", "init_math", "init_path", "init_src", "x0", "y0", "x1", "y1", "x2", "y2", "x3", "y3", "x32", "y32", "epsilon", "sqrt", "x00", "y00", "D", "max", "constant_default", "path", "halfPi", "da", "abs", "tau", "cos", "sin", "min", "t0", "t1", "p0", "asin", "pi", "acos", "atan2", "a", "init_constant", "init_math", "init_path", "array_default", "x", "slice", "init_array", "init_linear", "x", "y", "x", "y", "line_default", "x", "y", "constant_default", "path", "array_default", "init_line", "init_array", "init_constant", "init_linear", "init_path", "area_default", "x0", "y0", "y1", "x1", "constant_default", "path", "x", "y", "k", "array_default", "line_default", "init_area", "init_array", "init_constant", "init_linear", "init_line", "init_path", "a", "init_descending", "identity_default", "init_identity", "identity_default", "sort", "constant_default", "tau", "array_default", "k", "sum", "index", "da", "v", "i", "j", "init_array", "init_constant", "init_descending", "init_identity", "init_math", "radial", "init_radial", "init_linear", "a", "c", "line_default", "init_radial", "init_line", "a", "area_default", "c", "x0", "x1", "y0", "y1", "init_radial", "init_area", "x", "y", "x", "y", "p0", "link", "x", "y", "path", "slice", "s", "constant_default", "init_link", "init_array", "init_constant", "init_path", "sqrt3", "init_math", "sqrt", "min", "u", "circle_default", "init_circle", "init_math", "sqrt", "pi", "tau", "cross_default", "init_cross", "init_math", "sqrt", "init_math", "sqrt", "y", "x", "init_math", "sqrt", "init_math", "sqrt", "min", "init_math", "sqrt", "x", "init_math", "sqrt", "init_math", "sin", "pi", "tau", "cos", "sqrt", "x", "y", "a", "c", "s", "sqrt3", "init_math", "sqrt", "y", "sqrt3", "init_math", "sqrt", "s", "u", "c", "a", "init_math", "sqrt", "x0", "y0", "x1", "y1", "x2", "y2", "init_math", "sqrt", "min", "Symbol", "type", "path", "constant_default", "circle_default", "init_constant", "init_path", "init_circle", "init_cross", "cross_default", "noop_default", "init_noop", "point", "x", "y", "basis_default", "init_basis", "basisClosed_default", "init_basisClosed", "init_noop", "init_basis", "noop_default", "x", "y", "point", "init_basis", "x", "y", "x0", "y0", "point", "init_basis", "x", "y", "x0", "y0", "custom", "beta", "point", "x", "y", "custom", "tension", "init_noop", "noop_default", "x", "y", "point", "custom", "tension", "x", "y", "point", "custom", "tension", "point", "x", "y", "x1", "y1", "x2", "y2", "epsilon", "a", "m", "init_math", "custom", "alpha", "init_noop", "noop_default", "x", "y", "point", "custom", "alpha", "x", "y", "point", "custom", "alpha", "init_noop", "noop_default", "x", "y", "sign", "x", "x2", "y2", "point", "t0", "t1", "x0", "y0", "x1", "y1", "y", "x", "m", "a", "y", "x", "y", "x1", "order", "m", "none_default", "init_none", "constant_default", "order", "none_default", "offset", "array_default", "init_array", "init_constant", "init_none", "order", "m", "y", "order", "m", "init_diverging", "order", "m", "y", "order", "m", "y", "k", "none_default", "a", "init_none", "ascending_default", "sum", "none_default", "a", "s", "v", "init_ascending", "init_none", "descending_default", "ascending_default", "init_descending", "init_ascending", "sum", "order", "top", "bottom", "init_ascending", "none_default", "init_reverse", "init_none", "init_src", "init_area", "init_line", "init_link", "init_circle", "init_cross", "init_basisClosed", "init_basis", "init_linear", "init_diverging", "init_ascending", "init_descending", "init_none", "init_reverse", "constant_default", "init_constant", "x", "type", "transform", "dispatch", "init_event", "k", "x", "y", "identity", "init_transform", "point", "location", "nopropagation", "event", "noevent_default", "init_noevent", "defaultFilter", "event", "defaultExtent", "identity", "defaultTouchable", "transform", "extent", "zoom_default", "filter", "interpolate", "selection", "point", "k", "t0", "p0", "scale", "x", "y", "transition", "a", "type", "select_default", "noevent_default", "v", "x0", "y0", "nopropagation", "t1", "constant_default", "init_zoom", "init_src", "init_constant", "init_event", "init_transform", "init_noevent", "init_src", "init_zoom", "init_transform", "src_exports", "Node", "area_default", "csv", "basis_default", "basisClosed_default", "linear", "x_default", "y_default", "circle_default", "extent_default", "contains_default", "identity_default", "interpolate_default", "cubehelix_default", "lab", "line_default", "link", "map", "max", "min", "now", "centroid_default", "length_default", "identity", "log", "pow", "quantile", "sqrt", "scheme", "select_default", "selectAll_default", "ascending_default", "descending_default", "none_default", "Symbol", "cross_default", "text_default", "defaultLocale", "tsv", "zip", "zoom_default", "init_src", "global", "exports", "selection", "k", "a", "top", "right", "bottom", "left", "translateX", "x", "translateY", "y", "orientation", "scale", "tickFormat", "ticks", "slider", "axis", "event", "datum", "index", "j", "toArray", "value", "sliderHorizontal", "sliderBottom", "exports", "module", "scale", "a", "path", "svg", "ascending", "type", "exports", "module", "scale", "ascending", "path", "legend", "svg", "type", "exports", "module", "scale", "ascending", "path", "legend", "svg", "type", "d", "exports", "module", "scale", "ascending", "legend", "svg", "type", "exports", "module", "exports", "module", "d3", "exports", "module", "__webpack_exports__", "__webpack_require__", "deserialize", "_typeof", "obj", "_excluded", "ownKeys", "object", "_defineProperty", "_toPropertyKey", "_toPrimitive", "_objectWithoutProperties", "_objectWithoutPropertiesLoose", "_excluded2", "findResource", "deserializeIncluded", "filter", "mapRelationships", "_loop", "dRel", "asAttributes", "flattenAttributes", "transformKeys", "needsCamelCase", "toCamel", "transform", "root", "array", "index", "length", "Symbol", "start", "end", "capitalize", "extend", "dest", "i", "src", "j", "len", "arguments", "length", "create", "Object", "proto", "F", "prototype", "bind", "fn", "obj", "args", "slice", "Array", "apply", "call", "concat", "lastId", "stamp", "_leaflet_id", "throttle", "time", "context", "lock", "later", "wrapperFn", "setTimeout", "wrapNum", "x", "range", "includeMax", "max", "min", "d", "falseFn", "formatNum", "num", "precision", "pow", "Math", "undefined", "round", "trim", "str", "replace", "splitWords", "split", "setOptions", "options", "hasOwnProperty", "getParamString", "existingUrl", "uppercase", "params", "push", "encodeURIComponent", "toUpperCase", "indexOf", "join", "templateRe", "template", "data", "key", "value", "Error", "isArray", "toString", "array", "el", "emptyImageUrl", "getPrefixed", "name", "window", "lastTime", "timeoutDefer", "Date", "timeToCall", "requestFn", "requestAnimationFrame", "cancelFn", "cancelAnimationFrame", "id", "clearTimeout", "requestAnimFrame", "immediate", "cancelAnimFrame", "a", "D", "u", "c", "K", "$", "Class", "props", "NewClass", "Util.setOptions", "this", "initialize", "callInitHooks", "parentProto", "__super__", "Util.create", "constructor", "statics", "Util.extend", "includes", "checkDeprecatedMixinEvents", "L", "Mixin", "Util.isArray", "Events", "console", "warn", "stack", "_initHooks", "_initHooksCalled", "include", "parentOptions", "mergeOptions", "addInitHook", "init", "on", "types", "type", "_on", "Util.splitWords", "off", "_off", "removeAll", "_events", "_once", "_listens", "newListener", "ctx", "once", "listeners", "_firingCount", "Util.falseFn", "index", "listener", "splice", "fire", "propagate", "listens", "event", "target", "sourceTarget", "l", "_propagateEvent", "_fn", "_eventParents", "addEventParent", "Util.stamp", "removeEventParent", "e", "layer", "propagatedFrom", "Evented", "addEventListener", "removeEventListener", "clearAllEventListeners", "addOneTimeEventListener", "fireEvent", "hasEventListeners", "Point", "y", "trunc", "v", "floor", "ceil", "toPoint", "Bounds", "b", "points", "toBounds", "LatLngBounds", "corner1", "corner2", "latlngs", "toLatLngBounds", "LatLng", "lat", "lng", "alt", "isNaN", "toLatLng", "lon", "clone", "add", "point", "_add", "subtract", "_subtract", "divideBy", "_divideBy", "multiplyBy", "_multiplyBy", "scaleBy", "unscaleBy", "_round", "_floor", "_ceil", "_trunc", "distanceTo", "sqrt", "equals", "contains", "abs", "min2", "max2", "getCenter", "getBottomLeft", "getTopRight", "getTopLeft", "getBottomRight", "getSize", "intersects", "bounds", "xIntersects", "yIntersects", "overlaps", "xOverlaps", "yOverlaps", "isValid", "pad", "bufferRatio", "heightBuffer", "widthBuffer", "sw2", "ne2", "sw", "_southWest", "ne", "_northEast", "getSouthWest", "getNorthEast", "getNorthWest", "getNorth", "getWest", "getSouthEast", "getSouth", "getEast", "latIntersects", "lngIntersects", "latOverlaps", "lngOverlaps", "toBBoxString", "maxMargin", "CRS", "latLngToPoint", "latlng", "zoom", "projectedPoint", "projection", "project", "scale", "transformation", "_transform", "pointToLatLng", "untransformedPoint", "untransform", "unproject", "log", "LN2", "getProjectedBounds", "infinite", "s", "transform", "Util.formatNum", "other", "Earth", "distance", "wrap", "wrapLatLng", "sizeInMeters", "latAccuracy", "lngAccuracy", "cos", "PI", "wrapLng", "Util.wrapNum", "wrapLat", "wrapLatLngBounds", "center", "newCenter", "latShift", "lngShift", "R", "latlng1", "latlng2", "rad", "lat1", "lat2", "sinDLat", "sin", "sinDLon", "atan2", "earthRadius", "SphericalMercator", "MAX_LATITUDE", "atan", "exp", "Transformation", "_a", "_b", "_c", "_d", "toTransformation", "EPSG3857", "code", "EPSG900913", "svgCreate", "document", "createElementNS", "pointsToPath", "rings", "closed", "len2", "p", "Browser", "svg", "style", "documentElement", "ie", "ielt9", "edge", "navigator", "webkit", "userAgentContains", "android", "android23", "webkitVer", "parseInt", "exec", "userAgent", "androidStock", "opera", "chrome", "gecko", "safari", "phantom", "opera12", "win", "platform", "ie3d", "webkit3d", "WebKitCSSMatrix", "gecko3d", "any3d", "L_DISABLE_3D", "mobile", "orientation", "mobileWebkit", "mobileWebkit3d", "msPointer", "PointerEvent", "MSPointerEvent", "pointer", "touchNative", "TouchEvent", "touch", "L_NO_TOUCH", "mobileOpera", "mobileGecko", "retina", "devicePixelRatio", "screen", "deviceXDPI", "logicalXDPI", "passiveEvents", "supportsPassiveOption", "opts", "defineProperty", "get", "canvas", "createElement", "getContext", "createSVGRect", "inlineSvg", "div", "innerHTML", "firstChild", "namespaceURI", "toLowerCase", "vml", "shape", "behavior", "adj", "mac", "linux", "POINTER_DOWN", "POINTER_MOVE", "POINTER_UP", "POINTER_CANCEL", "pEvent", "touchstart", "touchmove", "touchend", "touchcancel", "handle", "handler", "MSPOINTER_TYPE_TOUCH", "pointerType", "DomEvent.preventDefault", "_handlePointer", "_pointers", "_pointerDocListener", "addPointerListener", "_globalPointerDown", "_globalPointerMove", "_globalPointerUp", "pointerId", "MSPOINTER_TYPE_MOUSE", "touches", "changedTouches", "delay", "addDoubleTapListener", "detail", "last", "simDblclick", "now", "sourceCapabilities", "firesTouchEvents", "path", "DomEvent.getPropagationPath", "some", "HTMLLabelElement", "attributes", "for", "HTMLInputElement", "HTMLSelectElement", "prop", "newEvent", "isTrusted", "_simulated", "dblclick", "_userSelect", "userSelectProperty", "disableTextSelection", "enableTextSelection", "_outlineElement", "_outlineStyle", "TRANSFORM", "testProp", "TRANSITION", "TRANSITION_END", "getElementById", "getStyle", "currentStyle", "defaultView", "css", "getComputedStyle", "tagName", "className", "container", "appendChild", "remove", "parent", "parentNode", "removeChild", "empty", "toFront", "lastChild", "toBack", "insertBefore", "hasClass", "classList", "getClass", "RegExp", "test", "addClass", "classes", "setClass", "removeClass", "Util.trim", "baseVal", "correspondingElement", "setOpacity", "opacity", "_setOpacityIE", "filter", "filterName", "filters", "item", "Enabled", "Opacity", "setTransform", "offset", "pos", "setPosition", "_leaflet_pos", "left", "top", "getPosition", "disableImageDrag", "DomEvent.on", "enableImageDrag", "DomEvent.off", "preventOutline", "element", "tabIndex", "restoreOutline", "outlineStyle", "getSizedParentNode", "offsetWidth", "offsetHeight", "body", "getScale", "rect", "getBoundingClientRect", "width", "height", "boundingClientRect", "ce", "de", "M", "C", "re", "addOne", "eventsKey", "batchRemove", "removeOne", "Util.indexOf", "filterFn", "mouseSubst", "mouseenter", "mouseleave", "wheel", "originalHandler", "passive", "isExternalTarget", "attachEvent", "handlers", "detachEvent", "stopPropagation", "originalEvent", "_stopped", "cancelBubble", "disableScrollPropagation", "disableClickPropagation", "preventDefault", "returnValue", "stop", "getPropagationPath", "ev", "composedPath", "getMousePosition", "clientX", "clientLeft", "clientY", "clientTop", "wheelPxFactor", "getWheelDelta", "wheelDeltaY", "deltaY", "deltaMode", "deltaX", "deltaZ", "wheelDelta", "related", "relatedTarget", "err", "k", "PosAnimation", "run", "newPos", "duration", "easeLinearity", "_el", "_inProgress", "_duration", "_easeOutPower", "_startPos", "DomUtil.getPosition", "_offset", "_startTime", "_animate", "_step", "_complete", "_animId", "Util.requestAnimFrame", "elapsed", "_runFrame", "_easeOut", "progress", "DomUtil.setPosition", "Util.cancelAnimFrame", "t", "Map", "crs", "minZoom", "maxZoom", "layers", "maxBounds", "renderer", "zoomAnimation", "zoomAnimationThreshold", "fadeAnimation", "markerZoomAnimation", "transform3DLimit", "zoomSnap", "zoomDelta", "trackResize", "_handlers", "_layers", "_zoomBoundLayers", "_sizeChanged", "_initContainer", "_initLayout", "_onResize", "Util.bind", "_initEvents", "setMaxBounds", "_zoom", "_limitZoom", "setView", "reset", "_zoomAnimated", "DomUtil.TRANSITION", "_createAnimProxy", "_proxy", "DomUtil.TRANSITION_END", "_catchTransitionEnd", "_addLayers", "_limitCenter", "_stop", "_loaded", "animate", "pan", "_tryAnimatedZoom", "_tryAnimatedPan", "_sizeTimer", "_resetView", "noMoveStart", "setZoom", "zoomIn", "delta", "zoomOut", "setZoomAround", "getZoomScale", "viewHalf", "centerOffset", "latLngToContainerPoint", "containerPointToLatLng", "_getBoundsCenterZoom", "getBounds", "paddingTL", "paddingTopLeft", "padding", "paddingBR", "paddingBottomRight", "getBoundsZoom", "Infinity", "paddingOffset", "swPoint", "nePoint", "fitBounds", "fitWorld", "panTo", "panBy", "_panAnim", "step", "_onPanTransitionStep", "end", "_onPanTransitionEnd", "DomUtil.addClass", "_mapPane", "_getMapPanePos", "_rawPanBy", "getZoom", "flyTo", "targetCenter", "targetZoom", "from", "to", "size", "startZoom", "w0", "w1", "u1", "rho", "rho2", "r", "sq", "sinh", "n", "cosh", "r0", "start", "S", "_moveStart", "frame", "_flyToFrame", "_move", "getScaleZoom", "_moveEnd", "flyToBounds", "_panInsideMaxBounds", "setMinZoom", "oldZoom", "setMaxZoom", "panInsideBounds", "_enforcingBounds", "panInside", "pixelCenter", "pixelPoint", "pixelBounds", "getPixelBounds", "paddedBounds", "paddedSize", "invalidateSize", "oldSize", "newSize", "_lastCenter", "oldCenter", "debounceMoveend", "locate", "onResponse", "onError", "_locateOptions", "timeout", "watch", "_handleGeolocationResponse", "_handleGeolocationError", "_locationWatchId", "geolocation", "watchPosition", "getCurrentPosition", "message", "stopLocate", "clearWatch", "error", "_container", "coords", "latitude", "longitude", "accuracy", "timestamp", "addHandler", "HandlerClass", "enable", "_containerId", "DomUtil.remove", "_clearControlPos", "_resizeRequest", "_clearHandlers", "_panes", "_renderer", "createPane", "pane", "DomUtil.create", "_checkIfLoaded", "_moved", "layerPointToLatLng", "_getCenterLayerPoint", "getMinZoom", "_layersMinZoom", "getMaxZoom", "_layersMaxZoom", "inside", "nw", "se", "boundsSize", "snap", "scalex", "scaley", "_size", "clientWidth", "clientHeight", "topLeftPoint", "_getTopLeftPoint", "getPixelOrigin", "_pixelOrigin", "getPixelWorldBounds", "getPane", "getPanes", "getContainer", "toZoom", "fromZoom", "latLngToLayerPoint", "containerPointToLayerPoint", "layerPointToContainerPoint", "layerPoint", "mouseEventToContainerPoint", "DomEvent.getMousePosition", "mouseEventToLayerPoint", "mouseEventToLatLng", "DomUtil.get", "_onScroll", "position", "_fadeAnimated", "DomUtil.getStyle", "_initPanes", "_initControlPos", "panes", "_paneRenderers", "markerPane", "shadowPane", "loading", "zoomChanged", "supressEvent", "_getNewPixelOrigin", "pinch", "_getZoomSpan", "_targets", "onOff", "_handleDOMEvent", "_onMoveEnd", "scrollTop", "scrollLeft", "_findEventTargets", "targets", "isHover", "srcElement", "dragging", "_draggableMoved", "DomEvent.isExternalTarget", "_isClickDisabled", "DomUtil.preventOutline", "_fireDOMEvent", "_mouseEvents", "canvasTargets", "synth", "filtered", "isMarker", "getLatLng", "_radius", "containerPoint", "bubblingMouseEvents", "enabled", "moved", "boxZoom", "disable", "whenReady", "callback", "_latLngToNewLayerPoint", "topLeft", "_latLngBoundsToNewLayerBounds", "latLngBounds", "_getCenterOffset", "centerPoint", "viewBounds", "_getBoundsOffset", "_limitOffset", "newBounds", "pxBounds", "projectedMaxBounds", "minOffset", "maxOffset", "_rebound", "right", "DomUtil.removeClass", "proxy", "mapPane", "DomUtil.TRANSFORM", "DomUtil.setTransform", "_animatingZoom", "_onZoomTransitionEnd", "_animMoveEnd", "_destroyAnimProxy", "z", "propertyName", "_nothingToAnimate", "getElementsByClassName", "_animateZoom", "startAnim", "noUpdate", "_animateToCenter", "_animateToZoom", "_tempFireZoomEvent", "control", "Control", "map", "_map", "removeControl", "addControl", "addTo", "onAdd", "corner", "_controlCorners", "onRemove", "_refocusOnMap", "screenX", "screenY", "focus", "Layers", "corners", "_controlContainer", "createCorner", "vSide", "hSide", "collapsed", "autoZIndex", "hideSingleBase", "sortLayers", "sortFunction", "layerA", "layerB", "nameA", "nameB", "baseLayers", "overlays", "_layerControlInputs", "_lastZIndex", "_handlingClick", "_preventClick", "_addLayer", "_update", "_checkDisabledLayers", "_onLayerChange", "_expandIfNotCollapsed", "addBaseLayer", "addOverlay", "removeLayer", "_getLayer", "expand", "_section", "acceptableHeight", "offsetTop", "collapse", "section", "setAttribute", "DomEvent.disableClickPropagation", "DomEvent.disableScrollPropagation", "link", "_expandSafely", "_layersLink", "href", "title", "keydown", "keyCode", "click", "_baseLayersList", "_separator", "_overlaysList", "overlay", "sort", "setZIndex", "DomUtil.empty", "baseLayersPresent", "overlaysPresent", "baseLayersCount", "_addItem", "display", "_createRadioElement", "checked", "radioHtml", "radioFragment", "input", "label", "hasLayer", "defaultChecked", "layerId", "_onInputClick", "holder", "inputs", "addedLayers", "removedLayers", "addLayer", "disabled", "that", "Zoom", "zoomInText", "zoomInTitle", "zoomOutText", "zoomOutTitle", "zoomName", "_zoomInButton", "_createButton", "_zoomIn", "_zoomOutButton", "_zoomOut", "_updateDisabled", "_disabled", "shiftKey", "html", "DomEvent.stop", "Scale", "zoomControl", "maxWidth", "metric", "imperial", "_addScales", "updateWhenIdle", "_mScale", "_iScale", "maxMeters", "_updateScales", "_updateMetric", "_updateImperial", "meters", "_getRoundNum", "_updateScale", "maxMiles", "feet", "maxFeet", "miles", "text", "ratio", "pow10", "Attribution", "prefix", "ukrainianFlag", "_attributions", "attributionControl", "getAttribution", "addAttribution", "_addAttribution", "removeAttribution", "setPrefix", "attribs", "prefixAndAttribs", "Handler", "attribution", "_enabled", "addHooks", "removeHooks", "START", "Draggable", "clickTolerance", "dragStartTarget", "_element", "_dragStartTarget", "_preventOutline", "_onDown", "_dragging", "finishDrag", "sizedParent", "mouseevent", "DomUtil.hasClass", "which", "button", "DomUtil.disableImageDrag", "DomUtil.disableTextSelection", "_moving", "first", "DomUtil.getSizedParentNode", "_startPoint", "_parentScale", "DomUtil.getScale", "_onMove", "_onUp", "_lastTarget", "SVGElementInstance", "correspondingUseElement", "_newPos", "_lastEvent", "_updatePosition", "noInertia", "DomUtil.enableImageDrag", "DomUtil.enableTextSelection", "fireDragend", "clipPolygon", "clippedPoints", "edges", "_code", "LineUtil._getBitCode", "LineUtil._getEdgeIntersection", "polygonCenter", "p1", "p2", "f", "area", "LineUtil.isFlat", "centroidLatLng", "centroid", "latlngCenter", "latSum", "lngSum", "_lastCode", "simplify", "tolerance", "_simplifyDP", "sqTolerance", "reducedPoints", "prev", "dx", "dy", "markers", "Uint8Array", "_simplifyDPStep", "sqDist", "maxSqDist", "_sqClosestPointOnSegment", "newPoints", "pointToSegmentDistance", "clipSegment", "useLastCode", "codeOut", "newCode", "codeA", "_getBitCode", "codeB", "_getEdgeIntersection", "dot", "isFlat", "_flat", "polylineCenter", "halfDist", "dist", "segDist", "LonLat", "Mercator", "R_MINOR", "tmp", "con", "ts", "tan", "phi", "dphi", "EPSG3395", "EPSG4326", "Simple", "Layer", "removeFrom", "_mapToAdd", "addInteractiveTarget", "targetEl", "removeInteractiveTarget", "_layerAdd", "events", "getEvents", "LayerGroup", "beforeAdd", "eachLayer", "method", "_addZoomLimit", "_updateZoomLevels", "_removeZoomLimit", "oldZoomSpan", "getLayerId", "clearLayers", "invoke", "methodName", "getLayer", "getLayers", "zIndex", "FeatureGroup", "setStyle", "bringToFront", "bringToBack", "Icon", "popupAnchor", "tooltipAnchor", "crossOrigin", "createIcon", "oldIcon", "_createIcon", "createShadow", "_getIconUrl", "img", "_createImg", "_setIconStyles", "sizeOption", "anchor", "shadowAnchor", "iconAnchor", "marginLeft", "marginTop", "IconDefault", "iconUrl", "iconRetinaUrl", "shadowUrl", "iconSize", "shadowSize", "imagePath", "_detectIconPath", "_stripUrl", "strip", "idx", "match", "querySelector", "substring", "MarkerDrag", "marker", "_marker", "icon", "_icon", "_draggable", "dragstart", "_onDragStart", "predrag", "_onPreDrag", "drag", "_onDrag", "dragend", "_onDragEnd", "_adjustPan", "speed", "autoPanSpeed", "autoPanPadding", "iconPos", "origin", "panBounds", "movement", "_panRequest", "_oldLatLng", "closePopup", "autoPan", "shadow", "_shadow", "_latlng", "oldLatLng", "Marker", "interactive", "keyboard", "zIndexOffset", "riseOnHover", "riseOffset", "autoPanOnFocus", "draggable", "latLng", "_initIcon", "update", "_removeIcon", "_removeShadow", "viewreset", "setLatLng", "setZIndexOffset", "getIcon", "setIcon", "_popup", "bindPopup", "getElement", "_setPos", "classToAdd", "addIcon", "newShadow", "mouseover", "_bringToFront", "mouseout", "_resetZIndex", "_panOnFocus", "addShadow", "_updateOpacity", "_initInteraction", "_zIndex", "_updateZIndex", "opt", "DomUtil.setOpacity", "iconOpts", "_getPopupAnchor", "_getTooltipAnchor", "Path", "stroke", "color", "weight", "lineCap", "lineJoin", "dashArray", "dashOffset", "fill", "fillColor", "fillOpacity", "fillRule", "getRenderer", "_initPath", "_reset", "_addPath", "_removePath", "redraw", "_updatePath", "_updateStyle", "_updateBounds", "_bringToBack", "_path", "_project", "_clickTolerance", "CircleMarker", "radius", "setRadius", "getRadius", "_point", "r2", "_radiusY", "w", "_pxBounds", "_updateCircle", "_empty", "_bounds", "_containsPoint", "Circle", "legacyOptions", "_mRadius", "half", "lngR", "latR", "bottom", "acos", "Polyline", "smoothFactor", "noClip", "_setLatLngs", "getLatLngs", "_latlngs", "setLatLngs", "isEmpty", "closestLayerPoint", "minDistance", "minPoint", "closest", "LineUtil._sqClosestPointOnSegment", "jLen", "_parts", "LineUtil.polylineCenter", "_defaultShape", "addLatLng", "_convertLatLngs", "result", "flat", "_rings", "_projectLatlngs", "_rawPxBounds", "projectedBounds", "ring", "_clipPoints", "segment", "parts", "LineUtil.clipSegment", "_simplifyPoints", "LineUtil.simplify", "_updatePoly", "part", "LineUtil.pointToSegmentDistance", "LineUtil._flat", "Polygon", "PolyUtil.polygonCenter", "pop", "clipped", "PolyUtil.clipPolygon", "GeoJSON", "geojson", "addData", "feature", "features", "geometries", "geometry", "coordinates", "geometryToLayer", "asFeature", "defaultOptions", "resetStyle", "onEachFeature", "_setLayerStyle", "pointToLayer", "_coordsToLatLng", "coordsToLatLng", "_pointToLayer", "coordsToLatLngs", "geoLayer", "properties", "featureLayer", "pointToLayerFn", "markersInheritOptions", "levelsDeep", "latLngToCoords", "latLngsToCoords", "getFeature", "newGeometry", "PointToGeoJSON", "toGeoJSON", "geoJSON", "multi", "holes", "toMultiPoint", "isGeometryCollection", "jsons", "json", "geoJson", "ImageOverlay", "errorOverlayUrl", "url", "_url", "_image", "_initImage", "styleOpts", "DomUtil.toFront", "DomUtil.toBack", "setUrl", "setBounds", "zoomanim", "wasElementSupplied", "onselectstart", "onmousemove", "onload", "onerror", "_overlayOnError", "image", "errorUrl", "VideoOverlay", "autoplay", "loop", "keepAspectRatio", "muted", "playsInline", "vid", "onloadeddata", "sourceElements", "getElementsByTagName", "sources", "source", "SVGOverlay", "DivOverlay", "content", "_source", "_content", "openOn", "close", "toggle", "_prepareOpen", "_removeTimeout", "getContent", "setContent", "visibility", "_updateContent", "_updateLayout", "isOpen", "node", "_contentNode", "hasChildNodes", "_getAnchor", "_containerBottom", "_containerLeft", "_containerWidth", "Popup", "_initOverlay", "OverlayClass", "old", "minWidth", "maxHeight", "autoPanPaddingTopLeft", "autoPanPaddingBottomRight", "keepInView", "closeButton", "autoClose", "closeOnEscapeKey", "popup", "DomEvent.stopPropagation", "closeOnClick", "closePopupOnClick", "preclick", "moveend", "wrapper", "_wrapper", "_tipContainer", "_tip", "_closeButton", "whiteSpace", "scrolledClass", "containerHeight", "containerPos", "_autopanning", "marginBottom", "containerWidth", "layerPos", "Tooltip", "openPopup", "_popupHandlersAdded", "_openPopup", "keypress", "_onKeyPress", "move", "_movePopup", "unbindPopup", "togglePopup", "isPopupOpen", "setPopupContent", "getPopup", "direction", "permanent", "sticky", "tooltip", "_setPosition", "subX", "tooltipPoint", "tooltipWidth", "tooltipHeight", "subY", "DivIcon", "openTooltip", "closeTooltip", "bindTooltip", "_tooltip", "isTooltipOpen", "unbindTooltip", "_initTooltipInteractions", "_tooltipHandlersAdded", "_moveTooltip", "_openTooltip", "_addFocusListeners", "mousemove", "_setAriaDescribedByOnLayer", "toggleTooltip", "setTooltipContent", "getTooltip", "_addFocusListenersOnLayer", "moving", "_openOnceFlag", "bgPos", "Element", "backgroundPosition", "Default", "GridLayer", "tileSize", "updateWhenZooming", "updateInterval", "maxNativeZoom", "minNativeZoom", "noWrap", "keepBuffer", "_levels", "_tiles", "_removeAllTiles", "_tileZoom", "_setAutoZIndex", "isLoading", "_loading", "tileZoom", "_clampZoom", "_updateLevels", "viewprereset", "_invalidateAll", "Util.throttle", "createTile", "getTileSize", "compare", "children", "edgeZIndex", "isFinite", "nextFrame", "willPrune", "fade", "tile", "current", "loaded", "active", "_onOpaqueTile", "_noPrune", "_pruneTiles", "_fadeFrame", "Number", "_onUpdateLevel", "_removeTilesAtZoom", "_onRemoveLevel", "level", "_setZoomTransform", "_onCreateLevel", "_level", "retain", "_retainParent", "_retainChildren", "_removeTile", "x2", "y2", "z2", "coords2", "_tileCoordsToKey", "animating", "_setView", "noPrune", "tileZoomChanged", "_abortLoading", "_resetGrid", "_setZoomTransforms", "translate", "_tileSize", "_globalTileRange", "_pxBoundsToTileRange", "_wrapX", "_wrapY", "_getTiledPixelBounds", "mapZoom", "halfSize", "tileRange", "tileCenter", "queue", "margin", "noPruneRange", "_isValidTile", "fragment", "createDocumentFragment", "_addTile", "tileBounds", "_tileCoordsToBounds", "_keyToBounds", "_keyToTileCoords", "_tileCoordsToNwSe", "nwPoint", "sePoint", "bp", "_initTile", "tilePos", "_getTilePos", "_wrapCoords", "_tileReady", "_noTilesToLoad", "newCoords", "TileLayer", "subdomains", "errorTileUrl", "zoomOffset", "tms", "zoomReverse", "detectRetina", "referrerPolicy", "_onTileRemove", "noRedraw", "done", "_tileOnLoad", "_tileOnError", "getTileUrl", "_getSubdomain", "_getZoomForUrl", "invertedY", "Util.template", "getAttribute", "tilePoint", "complete", "Util.emptyImageUrl", "tileLayer", "TileLayerWMS", "defaultWmsParams", "service", "request", "styles", "format", "transparent", "version", "wmsParams", "realRetina", "_crs", "_wmsVersion", "parseFloat", "projectionKey", "bbox", "setParams", "WMS", "wms", "Renderer", "_updatePaths", "_destroyContainer", "_onZoom", "zoomend", "_onZoomEnd", "_onAnimZoom", "_updateTransform", "currentCenterPoint", "_center", "topLeftOffset", "Canvas", "_onViewPreReset", "_postponeUpdatePaths", "_draw", "_onMouseMove", "_onClick", "_handleMouseOut", "_ctx", "_redrawRequest", "_redrawBounds", "_redraw", "m", "_updateDashArray", "order", "_order", "_drawLast", "next", "_drawFirst", "_requestRedraw", "_extendRedrawBounds", "dashValue", "_dashArray", "_clear", "clearRect", "save", "restore", "beginPath", "clip", "_drawing", "closePath", "_fillStroke", "arc", "globalAlpha", "fillStyle", "setLineDash", "lineWidth", "strokeStyle", "clickedLayer", "_fireEvent", "_handleMouseHover", "_hoveredLayer", "_mouseHoverThrottled", "candidateHoveredLayer", "vmlCreate", "namespaces", "vmlMixin", "coordsize", "_stroke", "_fill", "stroked", "filled", "dashStyle", "endcap", "joinstyle", "_setPath", "SVG", "_rootGroup", "_svgSize", "removeAttribute", "_getPaneRenderer", "_createRenderer", "preferCanvas", "Rectangle", "_boundsToLatLngs", "BoxZoom", "_pane", "overlayPane", "_resetStateTimeout", "_destroy", "_onMouseDown", "_resetState", "_clearDeferredResetState", "contextmenu", "mouseup", "_onMouseUp", "_onKeyDown", "_box", "_finish", "boxZoomBounds", "DoubleClickZoom", "doubleClickZoom", "_onDoubleClick", "Drag", "inertia", "inertiaDeceleration", "inertiaMaxSpeed", "worldCopyJump", "maxBoundsViscosity", "_onPreDragLimit", "_onPreDragWrap", "_positions", "_times", "_offsetLimit", "_viscosity", "_lastTime", "_lastPos", "_absPos", "_prunePositions", "shift", "pxCenter", "pxWorldCenter", "_initialWorldOffset", "_worldWidth", "_viscousLimit", "threshold", "limit", "worldWidth", "halfWidth", "newX1", "newX2", "newX", "ease", "limitedSpeed", "decelerationDuration", "speedVector", "limitedSpeedVector", "Keyboard", "keyboardPanDelta", "keyCodes", "down", "up", "_setPanDelta", "_setZoomDelta", "_onFocus", "blur", "_onBlur", "mousedown", "_addHooks", "_removeHooks", "docEl", "_focused", "scrollTo", "panDelta", "keys", "_panKeys", "codes", "_zoomKeys", "altKey", "ctrlKey", "metaKey", "newLatLng", "ScrollWheelZoom", "scrollWheelZoom", "wheelDebounceTime", "wheelPxPerZoomLevel", "_onWheelScroll", "_delta", "DomEvent.getWheelDelta", "debounce", "_lastMousePos", "_timer", "_performZoom", "d2", "d3", "d4", "TapHold", "tapHold", "tapTolerance", "_holdTimeout", "_cancel", "_isTapValid", "_cancelClickPrevent", "_simulateEvent", "cancelClickPrevent", "simulatedEvent", "MouseEvent", "bubbles", "cancelable", "view", "dispatchEvent", "TouchZoom", "touchZoom", "bounceAtZoomLimits", "_onTouchStart", "_zooming", "_centerPoint", "_startLatLng", "_pinchStartLatLng", "_startDist", "_startZoom", "_onTouchMove", "_onTouchEnd", "_animRequest", "moveFn", "video", "extend", "create", "fn", "slice", "throttle", "time", "x", "range", "max", "min", "pow", "template", "str", "indexOf", "array", "id", "Util.setOptions", "Util.create", "Util.extend", "i", "init", "Util.isArray", "Events", "type", "Util.splitWords", "removeAll", "Util.falseFn", "index", "event", "Util.stamp", "y", "round", "v", "point", "a", "min2", "max2", "Util.formatNum", "c", "zoom", "scale", "s", "Util.wrapNum", "center", "sin", "canvas", "svg", "DomEvent.preventDefault", "path", "DomEvent.getPropagationPath", "now", "TRANSITION_END", "get", "style", "css", "remove", "empty", "Util.trim", "filter", "offset", "DomEvent.on", "DomEvent.off", "on", "off", "Util.indexOf", "preventDefault", "DomUtil.getPosition", "Util.requestAnimFrame", "DomUtil.setPosition", "Util.cancelAnimFrame", "Map", "Util.bind", "DomUtil.TRANSITION", "DomUtil.TRANSITION_END", "moved", "DomUtil.addClass", "t1", "b1", "log", "sinh", "cosh", "tanh", "u", "start", "frame", "error", "DomUtil.remove", "DomUtil.create", "DomEvent.getMousePosition", "DomUtil.get", "DomUtil.getStyle", "DomEvent.isExternalTarget", "DomUtil.preventOutline", "left", "right", "DomUtil.removeClass", "DomUtil.TRANSFORM", "transform", "DomUtil.setTransform", "map", "control", "overlays", "DomEvent.disableClickPropagation", "DomEvent.disableScrollPropagation", "link", "DomUtil.empty", "html", "DomEvent.stop", "pow10", "preventOutline", "DomUtil.hasClass", "DomUtil.disableImageDrag", "DomUtil.disableTextSelection", "DomUtil.getSizedParentNode", "DomUtil.getScale", "DomUtil.enableImageDrag", "DomUtil.enableTextSelection", "k", "edge", "LineUtil._getBitCode", "LineUtil._getEdgeIntersection", "LineUtil.isFlat", "dist", "phi", "layers", "re", "marker", "icon", "shadow", "latLng", "DomUtil.setOpacity", "Path", "top", "bottom", "closest", "LineUtil._sqClosestPointOnSegment", "LineUtil.polylineCenter", "LineUtil.clipSegment", "LineUtil.simplify", "LineUtil.pointToSegmentDistance", "LineUtil._flat", "Polygon", "PolyUtil.polygonCenter", "PolyUtil.clipPolygon", "DomUtil.toFront", "DomUtil.toBack", "DomEvent.stopPropagation", "popup", "Tooltip", "tooltip", "Util.throttle", "x2", "y2", "queue", "latLngBounds", "Util.template", "Util.emptyImageUrl", "Renderer", "m", "order", "threshold", "DomEvent.getWheelDelta", "debounce", "d3", "exports", "module", "root", "L", "center", "map", "self", "id", "fn", "ret", "offset", "event", "map", "jQuery", "jquery_module_default", "jQueryFactory", "window", "slice", "array", "indexOf", "toType", "length", "type", "i", "version", "copy", "clone", "arr", "a", "second", "matches", "cache", "escape", "tokenize", "groups", "fn", "value", "sort", "document", "find", "m", "id", "start", "dir", "hash", "map", "filter", "preFilter", "elem", "self", "init", "object", "queue", "fire", "add", "index", "v", "maxDepth", "deferred", "error", "Data", "getData", "attrs", "data", "count", "scale", "unit", "nodeName", "selection", "on", "one", "event", "remove", "html", "swap", "name", "end", "empty", "timer", "time", "timeout", "option", "max", "location", "nonce", "s", "val", "completed", "done", "off", "responseText", "offset", "top", "method", "exports", "module", "jQuery", "exports", "module", "$", "root", "window", "document", "DataTable", "_Api", "_fnExtend", "i", "defaults", "_fnLog", "_fnListener", "_fnCompatOpts", "_fnCompatCols", "_fnCamelToHungarian", "_fnEscapeObject", "s", "type", "_fnGetCellData", "_fnMap", "_fnCallbackReg", "_fnGetObjectDataFn", "_fnBrowserDetect", "_fnDetectHeader", "_fnAddColumn", "_fnApplyColumnDefs", "_fnColumnOptions", "a", "sort", "filter", "_fnSaveState", "_fnSortingClasses", "_fnDataSource", "_fnCallbackFire", "_fnInitialise", "_ext", "_api_register", "_api_registerPlural", "_re_dic", "_re_new_lines", "_re_html", "_max_str_len", "_re_date", "_re_escape_regex", "_re_formatted_numeric", "_empty", "_intVal", "_numToDecimal", "num", "_fnEscapeRegex", "_isNumber", "_isHtml", "_htmlNumeric", "html", "_stripHtml", "_pluck", "_pluck_order", "order", "_range", "start", "end", "_removeEmpty", "_escapeHtml", "_normalize", "_areAllUnique", "_unique", "k", "_flatten", "_addClass", "fn", "timeout", "timer", "now", "setData", "_fnSplitObjNotation", "__reArray", "__reFn", "_fnHungarianMap", "map", "_fnCompatMap", "init", "copy", "_fnSetObjectDataFn", "_fnAdjustColumnSizing", "_fnCalculateColumnWidths", "_fnColumnSizes", "_fnScrollDraw", "_fnColumnsSumWidth", "_fnVisibleToColumnIndex", "_fnGetColumns", "_fnColumnIndexToVisible", "_fnVisibleColumns", "_typeResult", "_fnColumnTypes", "cache", "one", "_columnAutoClass", "_columnAutoRender", "_fnWriteCell", "_fnColumnsFromHeader", "sum", "unit", "_fnAddData", "id", "_fnCreateTr", "_fnAddTr", "_fnGetRowElements", "_fnSetCellData", "_fnGetDataMaster", "_fnClearTable", "_fnInvalidate", "_fnGetRowDisplay", "_fnRowAttributes", "td", "attr", "create", "_fnBuildHead", "_fnRenderer", "_fnHeaderLayout", "local", "cell", "_fnDrawHead", "point", "_fnDraw", "_fnStart", "_fnProcessingDisplay", "_emptyRow", "_fnAjaxUpdate", "_fnReDraw", "_fnSort", "_fnFilterComplete", "_fnLengthOverflow", "zero", "_layoutItems", "_layoutGetRow", "_layoutArray", "row", "_layoutResolve", "_fnAddOptionsHtml", "_fnLayoutDom", "top", "bottom", "_fnFeatureHtmlTable", "_processingHtml", "option", "write", "unique", "_fnBuildAjax", "ajax", "_fnAjaxDataSrc", "error", "empty", "_fnAjaxParameters", "_fnAjaxUpdateDraw", "_fnSortFlatten", "_fnAjaxDataSrcParam", "_fnInitComplete", "_fnFilterData", "_fnFilter", "_fnFilterCustom", "_fnArrayApply", "_fnFilterCreateSearch", "m", "__filter_div", "__filter_div_textContent", "_fnLoadState", "_fnSortInit", "_colGroup", "_fnLengthChange", "_fnPageChange", "scrolling", "_fnProcessingRun", "_fnStringToCss", "children", "_fnWrapperWidth", "_fnGetWideStrings", "_fnSortAttachListener", "_fnSortResolve", "_fnBindAction", "_fnSortAdd", "_fnSortDisplay", "_fnSortData", "x", "y", "state", "_fnImplementState", "col", "set", "idx", "_fnMacros", "max", "__apiStruct", "__arrayProto", "_toSettings", "v", "find", "flatten", "_selector_row_indexes", "_api_scope", "_api_find", "__table_selector", "indexes", "caption", "__reload", "_selector_run", "_selector_opts", "_selector_first", "page", "__row_selector", "hash", "e", "__details_state_load", "__details_add", "__details_state", "__details_remove", "__details_display", "__details_events", "_emp", "_child_obj", "_child_mth", "__re_column_selector", "__columnData", "__column_header", "__column_header_cells", "__column_selector", "__setColumnVis", "settings", "__cell_selector", "__bootstrap", "__foundation", "__luxon", "__moment", "is", "version", "version2", "remove", "cleanHeader", "counter", "extPagination", "_pagingNumbers", "_filterString", "normalize", "__mld", "__mlWarning", "__reIsoTimezone", "resolveWindowLibs", "__mldObj", "format", "locale", "__mlHelper", "__thousands", "__decimal", "abs", "exp", "_extTypes", "prop", "__diacriticSort", "__diacriticHtmlSort", "__numericReplace", "_divProp", "_fnUpdateInfo", "__searchCounter", "event", "_pagingDraw", "_pagingDynamic", "_pagingButtonInfo", "numbers", "__lengthCounter", "exports", "module", "$", "root", "window", "document", "DataTable", "m", "c", "max", "start", "end", "matches", "unit", "init", "defaults", "exports", "module", "global", "x", "k", "a", "c", "s", "length", "hex", "end", "second", "SparkMD5", "hash", "event", "start", "root", "toArray", "dispatchEvent", "type", "csrfToken", "id", "delegate", "error", "object", "cspNonce", "html", "template", "event", "nonce", "link", "linkTarget", "fn", "submitter", "config", "location", "left", "right", "delegate", "error", "toCacheKey", "index", "cookie", "id", "x", "y", "type", "clone", "defaults", "ctx", "morphChildren", "findBestMatch", "morphNode", "createMorphContext", "root", "normalizeElement", "normalizeParent", "parser", "option", "session", "visit", "frame", "href", "recentRequests", "mode", "document", "c", "createConsumer", "m", "x", "event", "event", "submitter", "jquery", "elementMap", "Map", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "undefined", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "durationPadding", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "wrapFunction", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "_unused", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "Data", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "map", "sel", "join", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "closeEvent", "_destroyElement", "each", "data", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "endCallBack", "clearTimeout", "swipeConfig", "_directionToOrder", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "slideEvent", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "startEvent", "activeInstance", "dimension", "_getDimension", "style", "complete", "capitalizedDimension", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "dd", "div", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "domParser", "DOMParser", "createdDocument", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "shadowRoot", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "$", "version", "object", "event", "add", "type", "data", "max", "abs", "parseCss", "within", "position", "left", "right", "top", "bottom", "offset", "jQuery", "color", "rgba", "parser", "cache", "is", "_", "end", "start", "index", "rgb", "a", "v", "hsla", "min", "s", "local", "fn", "hook", "remove", "set", "length", "mode", "effect", "x", "y", "count", "queue", "dataKey", "unit", "option", "pow2", "map", "hide", "scale", "id", "labels", "scrollParent", "uuid", "children", "isVisible", "eventData", "now", "preventDefault", "nested", "filter", "array", "widget", "group", "isDisabled", "isRTL", "date", "period", "time", "format", "matches", "k", "pair", "newDate", "html", "year", "module", "document", "c", "ce", "x1", "x2", "y1", "y2", "exp", "axis", "i", "css", "sum", "moved", "overlays", "drop", "custom", "reference", "m", "intersects", "selection", "oldIndex", "orientation", "intersection", "dist", "counter", "$", "type", "error", "parser", "CustomEvent", "event", "option", "confirm", "link", "href", "Rails", "start", "debounce", "timeout", "timer", "c", "html", "attrs", "k", "v", "config", "type", "event", "item", "selection", "a", "root", "count", "groups", "newItem", "isRTL", "left", "top", "date", "c", "ca", "config", "$", "object", "matches", "v", "csrfToken", "csrfParam", "CSRFProtection", "event", "event", "left", "right", "application", "map", "error", "matches", "object", "index", "filter", "delegate", "fetch", "set", "delegate", "matches", "match", "oldValue", "index", "left", "right", "length", "error", "constructor", "pairs", "module", "extend", "object", "a", "application", "element", "c", "array", "k", "v", "filter", "read", "write", "constant", "type", "event", "error", "lower", "date", "NAME", "s", "v", "Unit", "unit", "locale", "template", "start", "end", "DefaultFormatLocalization", "left", "right", "x", "ordinal", "format", "m", "a", "B", "second", "time", "length", "parser", "seconds", "milliseconds", "y", "M", "matches", "index", "valid", "path", "defaultOptions", "object", "k", "config", "ActionTypes", "div", "e", "top", "bottom", "Collapse", "reflow", "SecondDisplay", "createPopper", "max", "arrow", "svg", "icon", "event", "clock", "newDate", "$", "index", "array", "event", "window", "slice", "array", "indexOf", "toType", "length", "type", "i", "version", "jQuery", "copy", "clone", "arr", "a", "second", "matches", "cache", "escape", "tokenize", "groups", "fn", "value", "sort", "document", "find", "m", "id", "start", "dir", "hash", "map", "filter", "preFilter", "elem", "self", "init", "object", "queue", "fire", "add", "index", "v", "maxDepth", "deferred", "error", "Data", "getData", "attrs", "data", "count", "scale", "unit", "nodeName", "selection", "on", "one", "event", "remove", "html", "swap", "name", "end", "empty", "timer", "time", "timeout", "option", "max", "location", "nonce", "s", "val", "completed", "done", "off", "responseText", "offset", "top", "method", "jQuery", "$", "defaults", "s", "type", "a", "i", "sort", "filter", "html", "order", "start", "end", "k", "fn", "timeout", "timer", "now", "setData", "map", "init", "copy", "cache", "one", "sum", "unit", "id", "td", "attr", "create", "local", "cell", "point", "zero", "row", "top", "bottom", "option", "write", "unique", "ajax", "error", "empty", "m", "scrolling", "children", "x", "y", "state", "col", "set", "idx", "max", "v", "find", "flatten", "indexes", "caption", "page", "hash", "e", "settings", "module", "root", "is", "version", "version2", "remove", "counter", "normalize", "format", "locale", "abs", "exp", "prop", "event", "numbers", "$", "a", "init_src", "d3", "color", "ticks", "tickFormat", "svg", "x", "ramp", "init_src", "d3", "src_exports", "svg", "d3", "src_exports", "map", "index", "id", "event", "x", "y", "svg", "html", "max", "min", "event", "event", "id", "event", "index", "id", "map", "event", "import_deserialize_json_api", "index", "id", "link", "event", "event", "event", "page", "error", "event", "id", "init_src", "d3", "src_exports", "event", "id", "map", "x", "y", "datum", "d", "svg", "event", "option", "event", "r", "o", "event", "fn", "matches", "transform", "find", "top", "left", "bottom", "right", "children", "index", "extend", "x", "y", "$", "ghostEl", "children", "time", "translateX", "translateY", "option", "defaults", "eventProperties", "dispatchEvent", "rootEl", "cloneEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "putSortable", "pluginEvent", "_detectDirection", "_dragElInRowColumn", "_detectNearestEmptySortable", "x", "y", "threshold", "_prepareGroup", "dragEl", "group", "_hideGhostForTarget", "_unhideGhostForTarget", "nearestEmptyInsertDetectEvent", "event", "_checkOutsideTargetEl", "setData", "fn", "type", "filter", "index", "dragStartFn", "find", "target", "after", "toArray", "order", "sort", "id", "el", "sum", "root", "extend", "plugins", "drop", "autoScroll", "top", "bottom", "left", "right", "onSpill", "event", "id", "index", "event", "modules", "Rails", "event"]
}
