@carto/api-client 0.5.6-alpha.bundle.3 → 0.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/build/api-client.cjs +26 -17
- package/build/api-client.cjs.map +1 -1
- package/build/api-client.d.cts +13 -2
- package/build/api-client.d.ts +13 -2
- package/build/api-client.js +25 -17
- package/build/api-client.js.map +1 -1
- package/build/worker-compat.d.ts +2 -0
- package/build/{worker.global.js → worker-compat.js} +15 -7
- package/build/worker-compat.js.map +1 -0
- package/build/worker.js +14 -6
- package/build/worker.js.map +1 -1
- package/package.json +3 -3
- package/src/constants.ts +12 -0
- package/src/fetch-map/layer-map.ts +2 -1
- package/src/types.ts +1 -1
- package/src/widget-sources/widget-remote-source.ts +5 -5
- package/src/widget-sources/widget-tileset-source-impl.ts +7 -6
- package/src/widget-sources/widget-tileset-source.ts +2 -3
- package/build/worker.global.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/thenby/thenBy.module.js","../src/constants.ts","../src/utils.ts","../src/utils/makeIntervalComplete.ts","../src/filters/FilterTypes.ts","../src/filters/Filter.ts","../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/point-in-polygon-hao/dist/esm/index.js","../node_modules/@turf/helpers/index.ts","../node_modules/@turf/invariant/index.ts","../node_modules/@turf/boolean-point-in-polygon/index.ts","../node_modules/sweepline-intersections/dist/sweeplineIntersections.esm.js","../node_modules/@turf/line-intersect/index.ts","../node_modules/@turf/line-intersect/lib/sweepline-intersections-export.ts","../node_modules/@turf/meta/index.js","../node_modules/@turf/polygon-to-line/index.ts","../node_modules/@turf/boolean-disjoint/index.ts","../node_modules/@turf/boolean-intersects/index.ts","../src/filters/geosjonFeatures.ts","../node_modules/@turf/bbox-polygon/index.ts","../node_modules/@turf/bbox/index.ts","../node_modules/@turf/boolean-point-on-line/index.ts","../node_modules/@turf/boolean-within/index.ts","../node_modules/bignumber.js/bignumber.mjs","../node_modules/splaytree-ts/src/index.ts","../node_modules/polyclip-ts/src/geom-in.ts","../node_modules/polyclip-ts/src/constant.ts","../node_modules/polyclip-ts/src/compare.ts","../node_modules/polyclip-ts/src/orient.ts","../node_modules/polyclip-ts/src/snap.ts","../node_modules/polyclip-ts/src/identity.ts","../node_modules/polyclip-ts/src/precision.ts","../node_modules/polyclip-ts/src/bbox.ts","../node_modules/polyclip-ts/src/operation.ts","../node_modules/polyclip-ts/src/vector.ts","../node_modules/polyclip-ts/src/sweep-event.ts","../node_modules/polyclip-ts/src/geom-out.ts","../node_modules/polyclip-ts/src/sweep-line.ts","../node_modules/polyclip-ts/src/segment.ts","../node_modules/polyclip-ts/src/index.ts","../node_modules/@turf/intersect/index.ts","../node_modules/@math.gl/core/src/lib/common.ts","../node_modules/@math.gl/web-mercator/src/assert.ts","../node_modules/@math.gl/web-mercator/src/web-mercator-utils.ts","../node_modules/@math.gl/web-mercator/src/get-bounds.ts","../src/utils/transformToTileCoords.ts","../src/utils/transformTileCoordsToWGS84.ts","../src/filters/tileFeaturesGeometries.ts","../node_modules/quadbin/node_modules/tilebelt/index.js","../node_modules/quadbin/node_modules/@mapbox/tile-cover/index.js","../node_modules/quadbin/src/index.ts","../node_modules/@turf/bbox-clip/index.ts","../node_modules/@turf/bbox-clip/lib/lineclip.ts","../node_modules/h3-js/out/libh3.js","../node_modules/h3-js/lib/bindings.js","../node_modules/h3-js/lib/errors.js","../node_modules/h3-js/lib/h3core.js","../src/filters/tileFeaturesSpatialIndex.ts","../src/constants-internal.ts","../src/filters/tileFeaturesRaster.ts","../src/filters/tileFeatures.ts","../src/operations/aggregation.ts","../src/operations/applySorting.ts","../src/operations/groupBy.ts","../src/utils/dateUtils.ts","../src/operations/groupByDate.ts","../src/operations/histogram.ts","../src/operations/scatterPlot.ts","../src/client.ts","../src/widget-sources/widget-source.ts","../node_modules/geojson-equality-ts/index.ts","../node_modules/@turf/clean-coords/index.ts","../node_modules/@turf/boolean-equal/index.ts","../src/filters.ts","../src/widget-sources/widget-tileset-source-impl.ts","../src/workers/widget-tileset-worker.ts"],"sourcesContent":["/***\n Copyright 2013 Teun Duynstee\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nmodule.exports = (function() {\n\n function identity(v){return v;}\n\n function ignoreCase(v){return typeof(v)===\"string\" ? v.toLowerCase() : v;}\n\n function makeCompareFunction(f, opt){\n opt = typeof(opt)===\"object\" ? opt : {direction:opt};\n \n if(typeof(f)!=\"function\"){\n var prop = f;\n // make unary function\n f = function(v1){return !!v1[prop] ? v1[prop] : \"\";}\n }\n if(f.length === 1) {\n // f is a unary function mapping a single item to its sort score\n var uf = f;\n var preprocess = opt.ignoreCase?ignoreCase:identity;\n var cmp = opt.cmp || function(v1,v2) {return v1 < v2 ? -1 : v1 > v2 ? 1 : 0;}\n f = function(v1,v2) {return cmp(preprocess(uf(v1)), preprocess(uf(v2)));}\n }\n const descTokens = {\"-1\":'', desc:''};\n if(opt.direction in descTokens) return function(v1,v2){return -f(v1,v2)};\n return f;\n }\n\n /* adds a secondary compare function to the target function (`this` context)\n which is applied in case the first one returns 0 (equal)\n returns a new compare function, which has a `thenBy` method as well */\n function tb(func, opt) {\n /* should get value false for the first call. This can be done by calling the \n exported function, or the firstBy property on it (for es6 module compatibility)\n */\n var x = (typeof(this) == \"function\" && !this.firstBy) ? this : false;\n var y = makeCompareFunction(func, opt);\n var f = x ? function(a, b) {\n return x(a,b) || y(a,b);\n }\n : y;\n f.thenBy = tb;\n return f;\n }\n tb.firstBy = tb;\n return tb;\n})();\n","/**\n * Defines a comparator used when matching a column's values against given filter values.\n *\n * Example:\n *\n * ```javascript\n * import { FilterType } from '@carto/api-client';\n * const filters = {\n * column_name: { [FilterType.IN]: { values: ['a', 'b', 'c'] } }\n * };\n * ```\n *\n * @privateRemarks Source: @carto/react-api, @deck.gl/carto\n */\nexport enum FilterType {\n IN = 'in',\n /** [a, b] both are included. */\n BETWEEN = 'between',\n /** [a, b) a is included, b is not. */\n CLOSED_OPEN = 'closed_open',\n TIME = 'time',\n STRING_SEARCH = 'stringSearch',\n}\n\n/** @privateRemarks Source: @carto/constants */\nexport enum ApiVersion {\n V1 = 'v1',\n V2 = 'v2',\n V3 = 'v3',\n}\n\n/** @privateRemarks Source: @carto/constants, @deck.gl/carto */\nexport const DEFAULT_API_BASE_URL = 'https://gcp-us-east1.api.carto.com';\n\n/** @privateRemarks Source: @carto/react-core */\nexport enum TileFormat {\n MVT = 'mvt',\n JSON = 'json',\n GEOJSON = 'geojson',\n BINARY = 'binary',\n}\n\n/** @privateRemarks Source: @carto/react-core */\nexport enum SpatialIndex {\n H3 = 'h3',\n QUADBIN = 'quadbin',\n}\n\n/** @privateRemarks Source: @carto/react-core */\nexport enum Provider {\n BIGQUERY = 'bigquery',\n REDSHIFT = 'redshift',\n POSTGRES = 'postgres',\n SNOWFLAKE = 'snowflake',\n DATABRICKS = 'databricks',\n DATABRICKS_REST = 'databricksRest',\n}\n\nexport const SpatialIndexColumn = Object.freeze({\n [SpatialIndex.H3]: ['h3', 'hex', 'h3id', 'hex_id', 'h3hex'],\n [SpatialIndex.QUADBIN]: ['quadbin'],\n});\n","import {SchemaFieldType, type Filter, type SchemaField} from './types.js';\nimport {FilterType} from './constants.js';\nimport type {SpatialDataType} from './sources/types.js';\n\nconst FILTER_TYPES = new Set(Object.values(FilterType));\nconst isFilterType = (type: string): type is FilterType =>\n FILTER_TYPES.has(type as FilterType);\n\n/**\n * @privateRemarks Source: @carto/react-widgets\n * @internal\n */\nexport function getApplicableFilters(\n owner?: string,\n filters?: Record<string, Filter>\n): Record<string, Filter> {\n if (!filters) return {};\n\n const applicableFilters: Record<string, Filter> = {};\n\n for (const column in filters) {\n for (const type in filters[column]) {\n if (!isFilterType(type)) continue;\n\n const filter = filters[column][type];\n const isApplicable = !owner || !filter?.owner || filter?.owner !== owner;\n if (filter && isApplicable) {\n applicableFilters[column] ||= {};\n (applicableFilters[column][type] as typeof filter) = filter;\n }\n }\n }\n\n return applicableFilters;\n}\n\ntype Row<T> = Record<string, T> | Record<string, T>[] | T[] | T;\n\n/**\n * Due to each data warehouse having its own behavior with columns,\n * we need to normalize them and transform every key to lowercase.\n *\n * @privateRemarks Source: @carto/react-widgets\n * @internal\n */\nexport function normalizeObjectKeys<T, R extends Row<T>>(el: R): R {\n if (Array.isArray(el)) {\n return el.map((value) => normalizeObjectKeys(value)) as R;\n } else if (typeof el !== 'object') {\n return el;\n }\n\n return Object.entries(el as Record<string, T>).reduce(\n (acc, [key, value]) => {\n acc[key.toLowerCase()] =\n typeof value === 'object' && value ? normalizeObjectKeys(value) : value;\n return acc;\n },\n {} as Record<string, T>\n ) as R;\n}\n\n/** @privateRemarks Source: @carto/react-core */\nexport function assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(message);\n }\n}\n\n/**\n * @privateRemarks Source: @carto/react-core\n * @internal\n */\nexport class InvalidColumnError extends Error {\n protected static readonly NAME = 'InvalidColumnError';\n\n constructor(message: string) {\n super(`${InvalidColumnError.NAME}: ${message}`);\n this.name = InvalidColumnError.NAME;\n }\n\n static is(error: unknown) {\n return (\n error instanceof InvalidColumnError ||\n (error as Error).message?.includes(InvalidColumnError.NAME)\n );\n }\n}\n\nexport function isEmptyObject(object: object): boolean {\n for (const _ in object) {\n return false;\n }\n return true;\n}\n\n/** @internal */\nexport const isObject: (x: unknown) => boolean = (x) =>\n x !== null && typeof x === 'object';\n\n/** @internal */\nexport const isPureObject: (x: any) => boolean = (x) =>\n isObject(x) && x.constructor === {}.constructor;\n\n/**\n * Merges one or more source objects into a target object. Unlike `Object.assign`, does not\n * assign properties with undefined values. Null values will overwrite existing properties.\n */\nexport function assignOptional<T extends object, U, V>(\n target: T,\n source1: U,\n source2: V\n): T & U & V;\nexport function assignOptional<T extends object, U>(\n target: T,\n source: U\n): T & U;\nexport function assignOptional<T extends object, U>(\n target: T,\n ...sources: any[]\n): any {\n for (const source of sources) {\n for (const key in source) {\n if (source[key] !== undefined) {\n (target as Record<string, unknown>)[key] = source[key];\n }\n }\n }\n return target as T & U;\n}\n\n/**\n * Returns the spatialDataType expected for widget operations, given layer source props. The\n * spatialDataType used in widget operations may be different from that of the layer. For\n * dynamically aggregated point datasets, widgets use type 'geo', not the aggregation type.\n */\nexport function getWidgetSpatialDataType(\n spatialDataType: SpatialDataType,\n spatialDataColumn: string,\n schema: SchemaField[]\n): SpatialDataType {\n const field = schema.find((field) => field.name === spatialDataColumn);\n if (field && field.type === SchemaFieldType.Geometry) {\n return 'geo';\n }\n\n return spatialDataType;\n}\n","import type {FilterInterval, FilterIntervalComplete} from '../types.js';\n\nexport function makeIntervalComplete(\n intervals: FilterInterval[]\n): FilterIntervalComplete[] {\n return intervals.map((val) => {\n if (val[0] === undefined || val[0] === null) {\n return [Number.MIN_SAFE_INTEGER, val[1]];\n }\n\n if (val[1] === undefined || val[1] === null) {\n return [val[0], Number.MAX_SAFE_INTEGER];\n }\n\n return val;\n }) as FilterIntervalComplete[];\n}\n","import {FilterType} from '../constants.js';\nimport type {FilterInterval, StringSearchOptions} from '../types.js';\nimport {makeIntervalComplete} from '../utils/makeIntervalComplete.js';\n\nexport type FilterFunction = (\n filterValues: unknown[],\n featureValue: unknown,\n params?: Record<string, unknown>\n) => boolean;\n\nexport const filterFunctions: Record<FilterType, FilterFunction> = {\n [FilterType.IN]: filterIn,\n [FilterType.BETWEEN]: filterBetween,\n [FilterType.TIME]: filterTime,\n [FilterType.CLOSED_OPEN]: filterClosedOpen,\n [FilterType.STRING_SEARCH]: filterStringSearch,\n};\n\nfunction filterIn(filterValues: unknown[], featureValue: unknown): boolean {\n return filterValues.includes(featureValue);\n}\n\n// FilterTypes.BETWEEN\nfunction filterBetween(\n filterValues: unknown[],\n featureValue: unknown\n): boolean {\n const checkRange = (range: [number, number]) => {\n const [lowerBound, upperBound] = range;\n return (\n (featureValue as number) >= lowerBound &&\n (featureValue as number) <= upperBound\n );\n };\n\n return makeIntervalComplete(filterValues as FilterInterval[]).some(\n checkRange\n );\n}\n\nfunction filterTime(filterValues: unknown[], featureValue: unknown) {\n const featureValueAsTimestamp = new Date(featureValue as number).getTime();\n if (isFinite(featureValueAsTimestamp)) {\n return filterBetween(filterValues, featureValueAsTimestamp);\n } else {\n throw new Error(`Column used to filter by time isn't well formatted.`);\n }\n}\n\n// FilterTypes.CLOSED_OPEN\nfunction filterClosedOpen(\n filterValues: unknown[],\n featureValue: unknown\n): boolean {\n const checkRange = (range: [number, number]) => {\n const [lowerBound, upperBound] = range;\n return (\n (featureValue as number) >= lowerBound &&\n (featureValue as number) < upperBound\n );\n };\n\n return makeIntervalComplete(filterValues as [number, number][]).some(\n checkRange\n );\n}\n\n// FilterTypes.STRING_SEARCH\nfunction filterStringSearch(\n filterValues: unknown[],\n featureValue: unknown,\n params: StringSearchOptions = {}\n): boolean {\n const normalizedFeatureValue = normalize(featureValue, params);\n const stringRegExp = params.useRegExp\n ? filterValues\n : filterValues.map((filterValue) => {\n let stringRegExp = escapeRegExp(normalize(filterValue, params));\n\n if (params.mustStart) stringRegExp = `^${stringRegExp}`;\n if (params.mustEnd) stringRegExp = `${stringRegExp}$`;\n\n return stringRegExp;\n });\n\n const regex = new RegExp(\n stringRegExp.join('|'),\n params.caseSensitive ? 'g' : 'gi'\n );\n return !!normalizedFeatureValue.match(regex);\n}\n\n// Aux\nconst specialCharRegExp = /[.*+?^${}()|[\\]\\\\]/g;\nconst normalizeRegExp = /\\p{Diacritic}/gu;\n\nfunction escapeRegExp(value: string) {\n return value.replace(specialCharRegExp, '\\\\$&');\n}\n\nfunction normalize(data: unknown, params: StringSearchOptions) {\n let normalizedData = String(data);\n if (!params.keepSpecialCharacters)\n normalizedData = normalizedData\n .normalize('NFD')\n .replace(normalizeRegExp, '');\n\n return normalizedData;\n}\n","import {filterFunctions} from './FilterTypes.js';\nimport type {Filter, FilterLogicalOperator, Filters} from '../types.js';\nimport type {Feature} from 'geojson';\nimport {FilterType} from '../constants.js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {BinaryFeature} from '@loaders.gl/schema';\n\nconst LOGICAL_OPERATOR_METHODS: Record<\n FilterLogicalOperator,\n 'every' | 'some'\n> = {\n and: 'every',\n or: 'some',\n};\n\nfunction passesFilter(\n columns: string[],\n filters: Filters,\n feature: FeatureData,\n filtersLogicalOperator: FilterLogicalOperator\n): boolean {\n const method = LOGICAL_OPERATOR_METHODS[filtersLogicalOperator];\n return columns[method]((column) => {\n const columnFilters = filters[column];\n const columnFilterTypes = Object.keys(columnFilters) as FilterType[];\n\n if (!feature || feature[column] === null || feature[column] === undefined) {\n return false;\n }\n\n return columnFilterTypes.every((filter) => {\n const filterFunction = filterFunctions[filter];\n\n if (!filterFunction) {\n throw new Error(`\"${filter}\" filter is not implemented.`);\n }\n\n return filterFunction(\n columnFilters[filter]!.values,\n feature[column],\n (columnFilters[filter] as Filter[FilterType.STRING_SEARCH])!.params\n );\n });\n });\n}\n\n/**\n * @internal\n * @privateRemarks Exported for use in @deck.gl/carto's getDataFilterExtensionProps.\n */\nexport function _buildFeatureFilter({\n filters = {},\n type = 'boolean',\n filtersLogicalOperator = 'and',\n}: {\n filters?: Filters;\n type?: 'number' | 'boolean';\n filtersLogicalOperator?: FilterLogicalOperator;\n}) {\n const columns = Object.keys(filters);\n\n if (!columns.length) {\n return () => (type === 'number' ? 1 : true);\n }\n\n return (feature: Feature | FeatureData) => {\n const f = feature.properties || feature;\n const featurePassesFilter = passesFilter(\n columns,\n filters,\n f as FeatureData,\n filtersLogicalOperator\n );\n\n return type === 'number'\n ? Number(featurePassesFilter)\n : featurePassesFilter;\n };\n}\n\n/**\n * Apply certain filters to a collection of features.\n * @internal\n */\nexport function applyFilters(\n features: FeatureData[],\n filters: Filters,\n filtersLogicalOperator: FilterLogicalOperator\n) {\n return Object.keys(filters).length\n ? features.filter(_buildFeatureFilter({filters, filtersLogicalOperator}))\n : features;\n}\n\n/**\n * Binary.\n * @internal\n */\nexport function buildBinaryFeatureFilter({filters = {}}: {filters: Filters}) {\n const columns = Object.keys(filters);\n\n if (!columns.length) {\n return () => 1;\n }\n\n return (featureIdIdx: number, binaryData: BinaryFeature) =>\n passesFilterUsingBinary(columns, filters, featureIdIdx, binaryData);\n}\n\nfunction getValueFromNumericProps(\n featureIdIdx: number,\n binaryData: BinaryFeature,\n {column}: {column: string}\n) {\n return binaryData.numericProps?.[column]?.value[featureIdIdx];\n}\n\nfunction getValueFromProperties(\n featureIdIdx: number,\n binaryData: BinaryFeature,\n {column}: {column: string}\n) {\n const propertyIdx = binaryData.featureIds.value[featureIdIdx];\n return (binaryData.properties[propertyIdx] as Record<string, unknown>)?.[\n column\n ];\n}\n\nconst GET_VALUE_BY_BINARY_PROP = {\n properties: getValueFromProperties,\n numericProps: getValueFromNumericProps,\n};\n\nfunction getBinaryPropertyByFilterValues(filterValues: unknown[]) {\n return typeof filterValues.flat()[0] === 'string'\n ? 'properties'\n : 'numericProps';\n}\n\nfunction getFeatureValue(\n featureIdIdx: number,\n binaryData: any,\n filter: {type: FilterType; column: string; values: unknown[]}\n) {\n const {column, values} = filter;\n const binaryProp = getBinaryPropertyByFilterValues(values);\n const getFeatureValueFn = GET_VALUE_BY_BINARY_PROP[binaryProp];\n return getFeatureValueFn(featureIdIdx, binaryData, {column});\n}\n\nfunction passesFilterUsingBinary(\n columns: string[],\n filters: Filters,\n featureIdIdx: number,\n binaryData: BinaryFeature\n) {\n return columns.every((column) => {\n const columnFilters = filters[column];\n\n return Object.entries(columnFilters).every(([type, {values}]) => {\n const filterFn = filterFunctions[type as FilterType];\n if (!filterFn) {\n throw new Error(`\"${type}\" filter is not implemented.`);\n }\n\n if (!values) return 0;\n\n const featureValue = getFeatureValue(featureIdIdx, binaryData, {\n type: type as FilterType,\n column,\n values,\n });\n\n if (featureValue === undefined || featureValue === null) return 0;\n\n return filterFn(values, featureValue);\n });\n });\n}\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 oritinal 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(8);\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 } else {\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 } else {\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 } else {\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 }\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(pax, pay, paz, pbx, pby, pbz, pcx, pcy, pcz, pdx, pdy, pdz, pex, pey, pez) {\n const aex = pax - pex;\n const bex = pbx - pex;\n const cex = pcx - pex;\n const dex = pdx - pex;\n const aey = pay - pey;\n const bey = pby - pey;\n const cey = pcy - pey;\n const dey = pdy - pey;\n const aez = paz - pez;\n const bez = pbz - pez;\n const cez = pcz - pez;\n const dez = pdz - pez;\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","import { orient2d } from 'robust-predicates';\n\nfunction pointInPolygon(p, polygon) {\n var i;\n var ii;\n var k = 0;\n var f;\n var u1;\n var v1;\n var u2;\n var v2;\n var currentP;\n var nextP;\n\n var x = p[0];\n var y = p[1];\n\n var numContours = polygon.length;\n for (i = 0; i < numContours; i++) {\n ii = 0;\n var contour = polygon[i];\n var contourLen = contour.length - 1;\n\n currentP = contour[0];\n if (currentP[0] !== contour[contourLen][0] &&\n currentP[1] !== contour[contourLen][1]) {\n throw new Error('First and last coordinates in a ring must be the same')\n }\n\n u1 = currentP[0] - x;\n v1 = currentP[1] - y;\n\n for (ii; ii < contourLen; ii++) {\n nextP = contour[ii + 1];\n\n u2 = nextP[0] - x;\n v2 = nextP[1] - y;\n\n if (v1 === 0 && v2 === 0) {\n if ((u2 <= 0 && u1 >= 0) || (u1 <= 0 && u2 >= 0)) { return 0 }\n } else if ((v2 >= 0 && v1 <= 0) || (v2 <= 0 && v1 >= 0)) {\n f = orient2d(u1, u2, v1, v2, 0, 0);\n if (f === 0) { return 0 }\n if ((f > 0 && v2 > 0 && v1 <= 0) || (f < 0 && v2 <= 0 && v1 > 0)) { k++; }\n }\n currentP = nextP;\n v1 = v2;\n u1 = u2;\n }\n }\n\n if (k % 2 === 0) { return false }\n return true\n}\n\nexport { pointInPolygon as default };\n","import {\n BBox,\n Feature,\n FeatureCollection,\n Geometry,\n GeometryCollection,\n GeometryObject,\n LineString,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n Position,\n GeoJsonProperties,\n} from \"geojson\";\n\nimport { Id } from \"./lib/geojson.js\";\nexport * from \"./lib/geojson.js\";\n\n/**\n * @module helpers\n */\n\n// TurfJS Combined Types\nexport type Coord = Feature<Point> | Point | Position;\n\n/**\n * Linear measurement units.\n *\n * ⚠️ Warning. Be aware of the implications of using radian or degree units to\n * measure distance. The distance represented by a degree of longitude *varies*\n * depending on latitude.\n *\n * See https://www.thoughtco.com/degree-of-latitude-and-longitude-distance-4070616\n * for an illustration of this behaviour.\n *\n * @typedef\n */\nexport type Units =\n | \"meters\"\n | \"metres\"\n | \"millimeters\"\n | \"millimetres\"\n | \"centimeters\"\n | \"centimetres\"\n | \"kilometers\"\n | \"kilometres\"\n | \"miles\"\n | \"nauticalmiles\"\n | \"inches\"\n | \"yards\"\n | \"feet\"\n | \"radians\"\n | \"degrees\";\n\n/**\n * Area measurement units.\n *\n * @typedef\n */\nexport type AreaUnits =\n | Exclude<Units, \"radians\" | \"degrees\">\n | \"acres\"\n | \"hectares\";\n\n/**\n * Grid types.\n *\n * @typedef\n */\nexport type Grid = \"point\" | \"square\" | \"hex\" | \"triangle\";\n\n/**\n * Shorthand corner identifiers.\n *\n * @typedef\n */\nexport type Corners = \"sw\" | \"se\" | \"nw\" | \"ne\" | \"center\" | \"centroid\";\n\n/**\n * Geometries made up of lines i.e. lines and polygons.\n *\n * @typedef\n */\nexport type Lines = LineString | MultiLineString | Polygon | MultiPolygon;\n\n/**\n * Convenience type for all possible GeoJSON.\n *\n * @typedef\n */\nexport type AllGeoJSON =\n | Feature\n | FeatureCollection\n | Geometry\n | GeometryCollection;\n\n/**\n * The Earth radius in kilometers. Used by Turf modules that model the Earth as a sphere. The {@link https://en.wikipedia.org/wiki/Earth_radius#Arithmetic_mean_radius mean radius} was selected because it is {@link https://rosettacode.org/wiki/Haversine_formula#:~:text=This%20value%20is%20recommended recommended } by the Haversine formula (used by turf/distance) to reduce error.\n *\n * @constant\n */\nexport const earthRadius = 6371008.8;\n\n/**\n * Unit of measurement factors based on earthRadius.\n *\n * Keys are the name of the unit, values are the number of that unit in a single radian\n *\n * @constant\n */\nexport const factors: Record<Units, number> = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: 360 / (2 * Math.PI),\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1000,\n kilometres: earthRadius / 1000,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1000,\n millimetres: earthRadius * 1000,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936,\n};\n\n/**\n\n * Area of measurement factors based on 1 square meter.\n *\n * @constant\n */\nexport const areaFactors: Record<AreaUnits, number> = {\n acres: 0.000247105,\n centimeters: 10000,\n centimetres: 10000,\n feet: 10.763910417,\n hectares: 0.0001,\n inches: 1550.003100006,\n kilometers: 0.000001,\n kilometres: 0.000001,\n meters: 1,\n metres: 1,\n miles: 3.86e-7,\n nauticalmiles: 2.9155334959812285e-7,\n millimeters: 1000000,\n millimetres: 1000000,\n yards: 1.195990046,\n};\n\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @function\n * @param {GeometryObject} geometry input geometry\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryObject, GeoJsonProperties>} a GeoJSON Feature\n * @example\n * var geometry = {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nexport function feature<\n G extends GeometryObject = Geometry,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n geom: G | null,\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<G, P> {\n const feat: any = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\n\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @function\n * @param {(\"Point\" | \"LineString\" | \"Polygon\" | \"MultiPoint\" | \"MultiLineString\" | \"MultiPolygon\")} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nexport function geometry(\n type:\n | \"Point\"\n | \"LineString\"\n | \"Polygon\"\n | \"MultiPoint\"\n | \"MultiLineString\"\n | \"MultiPolygon\",\n coordinates: any[],\n _options: Record<string, never> = {}\n) {\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\n\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @function\n * @param {Position} coordinates longitude, latitude position (each in decimal degrees)\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point, GeoJsonProperties>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nexport function point<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position,\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<Point, P> {\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n\n const geom: Point = {\n type: \"Point\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @function\n * @param {Position[]} coordinates an array of Points\n * @param {GeoJsonProperties} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {Id} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n * [-75, 39],\n * [-80, 45],\n * [-78, 50]\n * ]);\n *\n * //=points\n */\nexport function points<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<Point, P> {\n return featureCollection(\n coordinates.map((coords) => {\n return point(coords, properties);\n }),\n options\n );\n}\n\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @function\n * @param {Position[][]} coordinates an array of LinearRings\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon, GeoJsonProperties>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nexport function polygon<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[][],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<Polygon, P> {\n for (const ring of coordinates) {\n if (ring.length < 4) {\n throw new Error(\n \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n );\n }\n\n if (ring[ring.length - 1].length !== ring[0].length) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n\n for (let j = 0; j < ring[ring.length - 1].length; j++) {\n // Check if first point of Polygon contains two numbers\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n const geom: Polygon = {\n type: \"Polygon\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @function\n * @param {Position[][][]} coordinates an array of Polygon coordinates\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon, GeoJsonProperties>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nexport function polygons<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[][][],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<Polygon, P> {\n return featureCollection(\n coordinates.map((coords) => {\n return polygon(coords, properties);\n }),\n options\n );\n}\n\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @function\n * @param {Position[]} coordinates an array of Positions\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString, GeoJsonProperties>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nexport function lineString<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<LineString, P> {\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n const geom: LineString = {\n type: \"LineString\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @function\n * @param {Position[][]} coordinates an array of LinearRings\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {Id} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString, GeoJsonProperties>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nexport function lineStrings<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[][],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<LineString, P> {\n return featureCollection(\n coordinates.map((coords) => {\n return lineString(coords, properties);\n }),\n options\n );\n}\n\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @function\n * @param {Array<Feature<GeometryObject, GeoJsonProperties>>} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection<GeometryObject, GeoJsonProperties>} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n * locationA,\n * locationB,\n * locationC\n * ]);\n *\n * //=collection\n */\nexport function featureCollection<\n G extends GeometryObject = Geometry,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n features: Array<Feature<G, P>>,\n options: { bbox?: BBox; id?: Id } = {}\n): FeatureCollection<G, P> {\n const fc: any = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\n\n/**\n * Creates a {@link Feature}<{@link MultiLineString}> based on a\n * coordinate array. Properties can be added optionally.\n *\n * @function\n * @param {Position[][]} coordinates an array of LineStrings\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString, GeoJsonProperties>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nexport function multiLineString<\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n coordinates: Position[][],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiLineString, P> {\n const geom: MultiLineString = {\n type: \"MultiLineString\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Feature}<{@link MultiPoint}> based on a\n * coordinate array. Properties can be added optionally.\n *\n * @function\n * @param {Position[]} coordinates an array of Positions\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint, GeoJsonProperties>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nexport function multiPoint<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiPoint, P> {\n const geom: MultiPoint = {\n type: \"MultiPoint\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a {@link Feature}<{@link MultiPolygon}> based on a\n * coordinate array. Properties can be added optionally.\n *\n * @function\n * @param {Position[][][]} coordinates an array of Polygons\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon, GeoJsonProperties>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nexport function multiPolygon<P extends GeoJsonProperties = GeoJsonProperties>(\n coordinates: Position[][][],\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<MultiPolygon, P> {\n const geom: MultiPolygon = {\n type: \"MultiPolygon\",\n coordinates,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Creates a Feature<GeometryCollection> based on a\n * coordinate array. Properties can be added optionally.\n *\n * @function\n * @param {Array<Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon>} geometries an array of GeoJSON Geometries\n * @param {GeoJsonProperties} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {BBox} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {Id} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection, GeoJsonProperties>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nexport function geometryCollection<\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n geometries: Array<\n Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon\n >,\n properties?: P,\n options: { bbox?: BBox; id?: Id } = {}\n): Feature<GeometryCollection, P> {\n const geom: GeometryCollection = {\n type: \"GeometryCollection\",\n geometries,\n };\n return feature(geom, properties, options);\n}\n\n/**\n * Round number to precision\n *\n * @function\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nexport function round(num: number, precision = 0): number {\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n const multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @function\n * @param {number} radians in radians across the sphere\n * @param {Units} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nexport function radiansToLength(\n radians: number,\n units: Units = \"kilometers\"\n): number {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @function\n * @param {number} distance in real units\n * @param {Units} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nexport function lengthToRadians(\n distance: number,\n units: Units = \"kilometers\"\n): number {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\n\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @function\n * @param {number} distance in real units\n * @param {Units} [units=\"kilometers\"] can be degrees, radians, miles, inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nexport function lengthToDegrees(distance: number, units?: Units): number {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\n\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @function\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nexport function bearingToAzimuth(bearing: number): number {\n let angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\n\n/**\n * Converts any azimuth angle from the north line direction (positive clockwise)\n * and returns an angle between -180 and +180 degrees (positive clockwise), 0 being the north line\n *\n * @function\n * @param {number} angle between 0 and 360 degrees\n * @returns {number} bearing between -180 and +180 degrees\n */\nexport function azimuthToBearing(angle: number): number {\n // Ignore full revolutions (multiples of 360)\n angle = angle % 360;\n\n if (angle > 180) {\n return angle - 360;\n } else if (angle < -180) {\n return angle + 360;\n }\n\n return angle;\n}\n\n/**\n * Converts an angle in radians to degrees\n *\n * @function\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nexport function radiansToDegrees(radians: number): number {\n // % (2 * Math.PI) radians in case someone passes value > 2π\n const normalisedRadians = radians % (2 * Math.PI);\n return (normalisedRadians * 180) / Math.PI;\n}\n\n/**\n * Converts an angle in degrees to radians\n *\n * @function\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nexport function degreesToRadians(degrees: number): number {\n // % 360 degrees in case someone passes value > 360\n const normalisedDegrees = degrees % 360;\n return (normalisedDegrees * Math.PI) / 180;\n}\n\n/**\n * Converts a length from one unit to another.\n *\n * @function\n * @param {number} length Length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] Input length unit\n * @param {Units} [finalUnit=\"kilometers\"] Returned length unit\n * @returns {number} The converted length\n */\nexport function convertLength(\n length: number,\n originalUnit: Units = \"kilometers\",\n finalUnit: Units = \"kilometers\"\n): number {\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\n\n/**\n * Converts an area from one unit to another.\n *\n * @function\n * @param {number} area Area to be converted\n * @param {AreaUnits} [originalUnit=\"meters\"] Input area unit\n * @param {AreaUnits} [finalUnit=\"kilometers\"] Returned area unit\n * @returns {number} The converted length\n */\nexport function convertArea(\n area: number,\n originalUnit: AreaUnits = \"meters\",\n finalUnit: AreaUnits = \"kilometers\"\n): number {\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n\n const startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n\n const finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n\n return (area / startFactor) * finalFactor;\n}\n\n/**\n * isNumber\n *\n * @function\n * @param {any} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nexport function isNumber(num: any): boolean {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\n\n/**\n * isObject\n *\n * @function\n * @param {any} input variable to validate\n * @returns {boolean} true/false, including false for Arrays and Functions\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nexport function isObject(input: any): boolean {\n return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\n\n/**\n * Validate BBox\n *\n * @private\n * @param {any} bbox BBox to validate\n * @returns {void}\n * @throws {Error} if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nexport function validateBBox(bbox: any): void {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach((num) => {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\n\n/**\n * Validate Id\n *\n * @private\n * @param {any} id Id to validate\n * @returns {void}\n * @throws {Error} if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nexport function validateId(id: any): void {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\n","import {\n Feature,\n FeatureCollection,\n Geometry,\n LineString,\n MultiPoint,\n MultiLineString,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { isNumber } from \"@turf/helpers\";\n\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @function\n * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers\n * @returns {Array<number>} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nfunction getCoord(coord: Feature<Point> | Point | number[]): number[] {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n\n if (!Array.isArray(coord)) {\n if (\n coord.type === \"Feature\" &&\n coord.geometry !== null &&\n coord.geometry.type === \"Point\"\n ) {\n return [...coord.geometry.coordinates];\n }\n if (coord.type === \"Point\") {\n return [...coord.coordinates];\n }\n }\n if (\n Array.isArray(coord) &&\n coord.length >= 2 &&\n !Array.isArray(coord[0]) &&\n !Array.isArray(coord[1])\n ) {\n return [...coord];\n }\n\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\n\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @function\n * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array<any>} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nfunction getCoords<\n G extends\n | Point\n | LineString\n | Polygon\n | MultiPoint\n | MultiLineString\n | MultiPolygon,\n>(coords: any[] | Feature<G> | G): any[] {\n if (Array.isArray(coords)) {\n return coords;\n }\n\n // Feature\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n } else {\n // Geometry\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n\n throw new Error(\n \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n );\n}\n\n/**\n * Checks if coordinates contains a number\n *\n * @function\n * @param {Array<any>} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nfunction containsNumber(coordinates: any[]): boolean {\n if (\n coordinates.length > 1 &&\n isNumber(coordinates[0]) &&\n isNumber(coordinates[1])\n ) {\n return true;\n }\n\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\n\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @function\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction geojsonType(value: any, type: string, name: string): void {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n\n if (!value || value.type !== type) {\n throw new Error(\n \"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n value.type\n );\n }\n}\n\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @function\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nfunction featureOf(feature: Feature<any>, type: string, name: string): void {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type\n );\n }\n}\n\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @function\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction collectionOf(\n featureCollection: FeatureCollection<any>,\n type: string,\n name: string\n) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\n \"Invalid input to \" + name + \", FeatureCollection required\"\n );\n }\n for (const feature of featureCollection.features) {\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" +\n name +\n \": must be a \" +\n type +\n \", given \" +\n feature.geometry.type\n );\n }\n }\n}\n\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nfunction getGeom<G extends Geometry>(geojson: Feature<G> | G): G {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\n\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message (unused)\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n * \"type\": \"Feature\",\n * \"properties\": {},\n * \"geometry\": {\n * \"type\": \"Point\",\n * \"coordinates\": [110, 40]\n * }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nfunction getType(\n geojson: Feature<any> | FeatureCollection<any> | Geometry,\n _name?: string\n): string {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\n\nexport {\n getCoord,\n getCoords,\n containsNumber,\n geojsonType,\n featureOf,\n collectionOf,\n getGeom,\n getType,\n};\n// No default export!\n","import pip from \"point-in-polygon-hao\";\nimport {\n BBox,\n Feature,\n MultiPolygon,\n Polygon,\n GeoJsonProperties,\n} from \"geojson\";\nimport { Coord } from \"@turf/helpers\";\nimport { getCoord, getGeom } from \"@turf/invariant\";\n\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @function\n * @param {Coord} point input point\n * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n * [-81, 41],\n * [-81, 47],\n * [-72, 47],\n * [-72, 41],\n * [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nfunction booleanPointInPolygon<\n G extends Polygon | MultiPolygon,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n point: Coord,\n polygon: Feature<G, P> | G,\n options: {\n ignoreBoundary?: boolean;\n } = {}\n) {\n // validation\n if (!point) {\n throw new Error(\"point is required\");\n }\n if (!polygon) {\n throw new Error(\"polygon is required\");\n }\n\n const pt = getCoord(point);\n const geom = getGeom(polygon);\n const type = geom.type;\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n // Quick elimination if point is not inside bbox\n if (bbox && inBBox(pt, bbox) === false) {\n return false;\n }\n\n if (type === \"Polygon\") {\n polys = [polys];\n }\n let result = false;\n for (var i = 0; i < polys.length; ++i) {\n const polyResult = pip(pt, polys[i]);\n if (polyResult === 0) return options.ignoreBoundary ? false : true;\n else if (polyResult) result = true;\n }\n\n return result;\n}\n\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt: number[], bbox: BBox) {\n return (\n bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]\n );\n}\n\nexport { booleanPointInPolygon };\nexport default booleanPointInPolygon;\n","class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction checkWhichEventIsLeft (e1, e2) {\n if (e1.p.x > e2.p.x) return 1\n if (e1.p.x < e2.p.x) return -1\n\n if (e1.p.y !== e2.p.y) return e1.p.y > e2.p.y ? 1 : -1\n return 1\n}\n\nfunction checkWhichSegmentHasRightEndpointFirst (seg1, seg2) {\n if (seg1.rightSweepEvent.p.x > seg2.rightSweepEvent.p.x) return 1\n if (seg1.rightSweepEvent.p.x < seg2.rightSweepEvent.p.x) return -1\n\n if (seg1.rightSweepEvent.p.y !== seg2.rightSweepEvent.p.y) return seg1.rightSweepEvent.p.y < seg2.rightSweepEvent.p.y ? 1 : -1\n return 1\n}\n\nclass Event {\n\n constructor (p, featureId, ringId, eventId) {\n this.p = {\n x: p[0],\n y: p[1]\n };\n this.featureId = featureId;\n this.ringId = ringId;\n this.eventId = eventId;\n\n this.otherEvent = null;\n this.isLeftEndpoint = null;\n }\n\n isSamePoint (eventToCheck) {\n return this.p.x === eventToCheck.p.x && this.p.y === eventToCheck.p.y\n }\n}\n\nfunction fillEventQueue (geojson, eventQueue) {\n if (geojson.type === 'FeatureCollection') {\n const features = geojson.features;\n for (let i = 0; i < features.length; i++) {\n processFeature(features[i], eventQueue);\n }\n } else {\n processFeature(geojson, eventQueue);\n }\n}\n\nlet featureId = 0;\nlet ringId = 0;\nlet eventId = 0;\nfunction processFeature (featureOrGeometry, eventQueue) {\n const geom = featureOrGeometry.type === 'Feature' ? featureOrGeometry.geometry : featureOrGeometry;\n let coords = geom.coordinates;\n // standardise the input\n if (geom.type === 'Polygon' || geom.type === 'MultiLineString') coords = [coords];\n if (geom.type === 'LineString') coords = [[coords]];\n\n for (let i = 0; i < coords.length; i++) {\n for (let ii = 0; ii < coords[i].length; ii++) {\n let currentP = coords[i][ii][0];\n let nextP = null;\n ringId = ringId + 1;\n for (let iii = 0; iii < coords[i][ii].length - 1; iii++) {\n nextP = coords[i][ii][iii + 1];\n\n const e1 = new Event(currentP, featureId, ringId, eventId);\n const e2 = new Event(nextP, featureId, ringId, eventId + 1);\n\n e1.otherEvent = e2;\n e2.otherEvent = e1;\n\n if (checkWhichEventIsLeft(e1, e2) > 0) {\n e2.isLeftEndpoint = true;\n e1.isLeftEndpoint = false;\n } else {\n e1.isLeftEndpoint = true;\n e2.isLeftEndpoint = false;\n }\n eventQueue.push(e1);\n eventQueue.push(e2);\n\n currentP = nextP;\n eventId = eventId + 1;\n }\n }\n }\n featureId = featureId + 1;\n}\n\nclass Segment {\n\n constructor (event) {\n this.leftSweepEvent = event;\n this.rightSweepEvent = event.otherEvent;\n }\n}\n\nfunction testSegmentIntersect (seg1, seg2) {\n if (seg1 === null || seg2 === null) return false\n\n if (seg1.leftSweepEvent.ringId === seg2.leftSweepEvent.ringId &&\n (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent))) return false\n\n const x1 = seg1.leftSweepEvent.p.x;\n const y1 = seg1.leftSweepEvent.p.y;\n const x2 = seg1.rightSweepEvent.p.x;\n const y2 = seg1.rightSweepEvent.p.y;\n const x3 = seg2.leftSweepEvent.p.x;\n const y3 = seg2.leftSweepEvent.p.y;\n const x4 = seg2.rightSweepEvent.p.x;\n const y4 = seg2.rightSweepEvent.p.y;\n\n const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n\n if (denom === 0) {\n if (numeA === 0 && numeB === 0) return false\n return false\n }\n\n const uA = numeA / denom;\n const uB = numeB / denom;\n\n if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n const x = x1 + (uA * (x2 - x1));\n const y = y1 + (uA * (y2 - y1));\n return [x, y]\n }\n return false\n}\n\n// import {debugEventAndSegments, debugRemovingSegment} from './debug'\n\nfunction runCheck (eventQueue, ignoreSelfIntersections) {\n ignoreSelfIntersections = ignoreSelfIntersections ? ignoreSelfIntersections : false;\n\n const intersectionPoints = [];\n const outQueue = new TinyQueue([], checkWhichSegmentHasRightEndpointFirst);\n\n while (eventQueue.length) {\n const event = eventQueue.pop();\n if (event.isLeftEndpoint) {\n // debugEventAndSegments(event.p, outQueue.data)\n const segment = new Segment(event);\n for (let i = 0; i < outQueue.data.length; i++) {\n const otherSeg = outQueue.data[i];\n if (ignoreSelfIntersections) {\n if (otherSeg.leftSweepEvent.featureId === event.featureId) continue\n }\n const intersection = testSegmentIntersect(segment, otherSeg);\n if (intersection !== false) intersectionPoints.push(intersection);\n }\n outQueue.push(segment);\n } else if (event.isLeftEndpoint === false) {\n outQueue.pop();\n // const seg = outQueue.pop()\n // debugRemovingSegment(event.p, seg)\n }\n }\n return intersectionPoints\n}\n\nfunction sweeplineIntersections (geojson, ignoreSelfIntersections) {\n const eventQueue = new TinyQueue([], checkWhichEventIsLeft);\n fillEventQueue(geojson, eventQueue);\n return runCheck(eventQueue, ignoreSelfIntersections)\n}\n\nexport default sweeplineIntersections;\n","import { feature, featureCollection, point } from \"@turf/helpers\";\nimport {\n Feature,\n FeatureCollection,\n LineString,\n MultiLineString,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport type { Intersection } from \"sweepline-intersections\";\nimport { sweeplineIntersections as findIntersections } from \"./lib/sweepline-intersections-export.js\";\n\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @function\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.removeDuplicates=true] remove duplicate intersections\n * @param {boolean} [options.ignoreSelfIntersections=true] ignores self-intersections on input features\n * @returns {FeatureCollection<Point>} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect<\n G1 extends LineString | MultiLineString | Polygon | MultiPolygon,\n G2 extends LineString | MultiLineString | Polygon | MultiPolygon,\n>(\n line1: FeatureCollection<G1> | Feature<G1> | G1,\n line2: FeatureCollection<G2> | Feature<G2> | G2,\n options: {\n removeDuplicates?: boolean;\n ignoreSelfIntersections?: boolean;\n } = {}\n): FeatureCollection<Point> {\n const { removeDuplicates = true, ignoreSelfIntersections = true } = options;\n let features: Feature<G1 | G2>[] = [];\n if (line1.type === \"FeatureCollection\")\n features = features.concat(line1.features);\n else if (line1.type === \"Feature\") features.push(line1);\n else if (\n line1.type === \"LineString\" ||\n line1.type === \"Polygon\" ||\n line1.type === \"MultiLineString\" ||\n line1.type === \"MultiPolygon\"\n ) {\n features.push(feature(line1));\n }\n\n if (line2.type === \"FeatureCollection\")\n features = features.concat(line2.features);\n else if (line2.type === \"Feature\") features.push(line2);\n else if (\n line2.type === \"LineString\" ||\n line2.type === \"Polygon\" ||\n line2.type === \"MultiLineString\" ||\n line2.type === \"MultiPolygon\"\n ) {\n features.push(feature(line2));\n }\n\n const intersections = findIntersections(\n featureCollection(features),\n ignoreSelfIntersections\n );\n\n let results: Intersection[] = [];\n if (removeDuplicates) {\n const unique: Record<string, boolean> = {};\n intersections.forEach((intersection) => {\n const key = intersection.join(\",\");\n if (!unique[key]) {\n unique[key] = true;\n results.push(intersection);\n }\n });\n } else {\n results = intersections;\n }\n return featureCollection(results.map((r) => point(r)));\n}\n\nexport { lineIntersect };\nexport default lineIntersect;\n","// Get around problems with moduleResolution node16 and some older libraries.\n// Manifests as \"This expression is not callable ... has no call signatures\"\n// https://stackoverflow.com/a/74709714\n\nimport lib from \"sweepline-intersections\";\n\nexport const sweeplineIntersections = lib as unknown as typeof lib.default;\n","import { feature, point, lineString, isObject } from \"@turf/helpers\";\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {number[]} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @function\n * @param {AllGeoJSON} geojson any GeoJSON object\n * @param {coordEachCallback} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n // Handles null Geometry -- Skips this GeoJSON\n if (geojson === null) return;\n var j,\n k,\n l,\n geometry,\n stopG,\n coords,\n geometryMaybeCollection,\n wrapShrink = 0,\n coordIndex = 0,\n isGeometryCollection,\n type = geojson.type,\n isFeatureCollection = type === \"FeatureCollection\",\n isFeature = type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[featureIndex].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[geomIndex]\n : geometryMaybeCollection;\n\n // Handles null Geometry -- Skips this geometry\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n\n wrapShrink =\n excludeWrapCoord &&\n (geomType === \"Polygon\" || geomType === \"MultiPolygon\")\n ? 1\n : 0;\n\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) ===\n false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {number[]} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @function\n * @param {AllGeoJSON} geojson any GeoJSON object\n * @param {coordReduceCallback} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentCoord\n * //=coordIndex\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function (\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) {\n if (coordIndex === 0 && initialValue === undefined)\n previousValue = currentCoord;\n else\n previousValue = callback(\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {GeoJsonProperties} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @function\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {propEachCallback} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n * //=currentProperties\n * //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {GeoJsonProperties} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @function\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {propReduceCallback} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n * //=previousValue\n * //=currentProperties\n * //=featureIndex\n * return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function (currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @function\n * @param {FeatureCollection|Feature|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {featureEachCallback} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n * //=currentFeature\n * //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @function\n * @param {FeatureCollection|Feature|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {featureReduceCallback} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {\"foo\": \"bar\"}),\n * turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function (currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @function\n * @param {AllGeoJSON} geojson any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function (coord) {\n coords.push(coord);\n });\n return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {GeometryObject} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {GeoJsonProperties} featureProperties The current Feature Properties being processed.\n * @param {BBox} featureBBox The current Feature BBox being processed.\n * @param {Id} featureId The current Feature Id being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @function\n * @param {FeatureCollection|Feature|Geometry|GeometryObject|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {geomEachCallback} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n var i,\n j,\n g,\n geometry,\n stopG,\n geometryMaybeCollection,\n isGeometryCollection,\n featureProperties,\n featureBBox,\n featureId,\n featureIndex = 0,\n isFeatureCollection = geojson.type === \"FeatureCollection\",\n isFeature = geojson.type === \"Feature\",\n stop = isFeatureCollection ? geojson.features.length : 1;\n\n // This logic may look a little weird. The reason why it is that way\n // is because it's trying to be fast. GeoJSON supports multiple kinds\n // of objects at its root: FeatureCollection, Features, Geometries.\n // This function has the responsibility of handling all of them, and that\n // means that some of the `for` loops you see below actually just don't apply\n // to certain inputs. For instance, if you give this just a\n // Point geometry, then both loops are short-circuited and all we do\n // is gradually rename the input until it's called 'geometry'.\n //\n // This also aims to allocate as few resources as possible: just a\n // few numbers and booleans, rather than any temporary arrays as would\n // be required with the normalization approach.\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection\n ? geojson.features[i].geometry\n : isFeature\n ? geojson.geometry\n : geojson;\n featureProperties = isFeatureCollection\n ? geojson.features[i].properties\n : isFeature\n ? geojson.properties\n : {};\n featureBBox = isFeatureCollection\n ? geojson.features[i].bbox\n : isFeature\n ? geojson.bbox\n : undefined;\n featureId = isFeatureCollection\n ? geojson.features[i].id\n : isFeature\n ? geojson.id\n : undefined;\n isGeometryCollection = geometryMaybeCollection\n ? geometryMaybeCollection.type === \"GeometryCollection\"\n : false;\n stopG = isGeometryCollection\n ? geometryMaybeCollection.geometries.length\n : 1;\n\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection\n ? geometryMaybeCollection.geometries[g]\n : geometryMaybeCollection;\n\n // Handle null Geometry\n if (geometry === null) {\n if (\n callback(\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n // Only increase `featureIndex` per each feature\n featureIndex++;\n }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {GeometryObject} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {GeoJsonProperties} featureProperties The current Feature Properties being processed.\n * @param {BBox} featureBBox The current Feature BBox being processed.\n * @param {Id} featureId The current Feature Id being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @function\n * @param {FeatureCollection|Feature|GeometryObject|GeometryCollection|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {geomReduceCallback} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n * //=previousValue\n * //=currentGeometry\n * //=featureIndex\n * //=featureProperties\n * //=featureBBox\n * //=featureId\n * return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function (\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @function\n * @param {FeatureCollection|Feature|GeometryObject|GeometryCollection|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {flattenEachCallback} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n // Callback for single geometry\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n callback(\n feature(geometry, properties, { bbox: bbox, id: id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n\n var geomType;\n\n // Callback for multi-geometry\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n\n for (\n var multiFeatureIndex = 0;\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate,\n };\n if (\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) ===\n false\n )\n return false;\n }\n });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @function\n * @param {FeatureCollection|Feature|GeometryObject|GeometryCollection|Feature<GeometryCollection>} geojson any GeoJSON object\n * @param {flattenReduceCallback} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n * turf.point([26, 37], {foo: 'bar'}),\n * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n * //=previousValue\n * //=currentFeature\n * //=featureIndex\n * //=multiFeatureIndex\n * return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function (currentFeature, featureIndex, multiFeatureIndex) {\n if (\n featureIndex === 0 &&\n multiFeatureIndex === 0 &&\n initialValue === undefined\n )\n previousValue = currentFeature;\n else\n previousValue = callback(\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {AllGeoJSON} geojson any GeoJSON\n * @param {segmentEachCallback} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //=currentSegment\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n * total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n\n // Exclude null Geometries\n if (!feature.geometry) return;\n // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n var type = feature.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n\n // Generate 2-vertex line segments\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n coordEach(\n feature,\n function (\n currentCoord,\n coordIndex,\n featureIndexCoord,\n multiPartIndexCoord,\n geometryIndex\n ) {\n // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n if (\n previousCoords === undefined ||\n featureIndex > previousFeatureIndex ||\n multiPartIndexCoord > previousMultiIndex ||\n geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n [previousCoords, currentCoord],\n feature.properties\n );\n if (\n callback(\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {Reducer}\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {segmentReduceCallback} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n * //= previousSegment\n * //= currentSegment\n * //= featureIndex\n * //= multiFeatureIndex\n * //= geometryIndex\n * //= segmentIndex\n * return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n * previousValue++;\n * return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function (\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) {\n if (started === false && initialValue === undefined)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n * @returns {void}\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @function\n * @param {FeatureCollection<Lines>|Feature<Lines>|Lines|Feature<GeometryCollection>|GeometryCollection} geojson object\n * @param {lineEachCallback} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @returns {void}\n * @example\n * var multiLine = turf.multiLineString([\n * [[26, 37], [35, 45]],\n * [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n // validation\n if (!geojson) throw new Error(\"geojson is required\");\n\n flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n if (feature.geometry === null) return;\n var type = feature.geometry.type;\n var coords = feature.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (\n var geometryIndex = 0;\n geometryIndex < coords.length;\n geometryIndex++\n ) {\n if (\n callback(\n lineString(coords[geometryIndex], feature.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n * - The previousValue argument is initialValue.\n * - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n * - The previousValue argument is the value of the first element present in the array.\n * - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {Reducer} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n * @returns {Reducer}\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @function\n * @param {FeatureCollection<Lines>|Feature<Lines>|Lines|Feature<GeometryCollection>|GeometryCollection} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {Reducer} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {Reducer} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n * //=previousValue\n * //=currentLine\n * //=featureIndex\n * //=multiFeatureIndex\n * //=geometryIndex\n * return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === undefined)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature<LineString<[[10, 10], [50, 30]]>>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature<LineString<[[-10, -10], [-50, -30]]>>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature<LineString<[[-50, -30], [-30, -40]]>>\n */\nfunction findSegment(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find SegmentIndex\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[geometryIndex][segmentIndex],\n coords[geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][segmentIndex],\n coords[multiFeatureIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex =\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1],\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n * [[10, 10], [50, 30], [30, 40]],\n * [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature<Point<[10, 10]>>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature<Point<[-10, -10]>>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature<Point<[-30, -40]>>\n */\nfunction findPoint(geojson, options) {\n // Optional Parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n\n // Find FeatureIndex\n var properties = options.properties;\n var geometry;\n\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n\n // Find Coord Index\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex =\n coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\n\nexport {\n coordReduce,\n coordEach,\n propEach,\n propReduce,\n featureReduce,\n featureEach,\n coordAll,\n geomReduce,\n geomEach,\n flattenReduce,\n flattenEach,\n segmentReduce,\n segmentEach,\n lineReduce,\n lineEach,\n findSegment,\n findPoint,\n};\n","import { featureCollection, lineString, multiLineString } from \"@turf/helpers\";\nimport {\n Feature,\n FeatureCollection,\n LineString,\n MultiLineString,\n MultiPolygon,\n Polygon,\n GeoJsonProperties,\n} from \"geojson\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @function\n * @param {Feature<Polygon|MultiPolygon>} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature<LineString|MultiLinestring>} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nfunction polygonToLine<\n G extends Polygon | MultiPolygon,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n poly: Feature<G, P> | G,\n options: { properties?: any } = {}\n):\n | Feature<LineString | MultiLineString, P>\n | FeatureCollection<LineString | MultiLineString, P> {\n const geom: any = getGeom(poly);\n if (!options.properties && poly.type === \"Feature\") {\n options.properties = poly.properties;\n }\n switch (geom.type) {\n case \"Polygon\":\n return singlePolygonToLine(geom, options);\n case \"MultiPolygon\":\n return multiPolygonToLine(geom, options);\n default:\n throw new Error(\"invalid poly\");\n }\n}\n\n/**\n * @private\n */\nfunction singlePolygonToLine<\n G extends Polygon,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n poly: Feature<G, P> | G,\n options: { properties?: any } = {}\n): Feature<LineString | MultiLineString, P> {\n const geom = getGeom(poly);\n const coords: any[] = geom.coordinates;\n const properties: any = options.properties\n ? options.properties\n : poly.type === \"Feature\"\n ? poly.properties\n : {};\n\n return coordsToLine(coords, properties);\n}\n\n/**\n * @private\n */\nfunction multiPolygonToLine<\n G extends MultiPolygon,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(\n multiPoly: Feature<G, P> | G,\n options: { properties?: P } = {}\n): FeatureCollection<LineString | MultiLineString, P> {\n const geom = getGeom(multiPoly);\n const coords: any[] = geom.coordinates;\n const properties: any = options.properties\n ? options.properties\n : multiPoly.type === \"Feature\"\n ? multiPoly.properties\n : {};\n\n const lines: Array<Feature<LineString | MultiLineString, P>> = [];\n coords.forEach((coord) => {\n lines.push(coordsToLine(coord, properties));\n });\n return featureCollection(lines);\n}\n\n/**\n * @private\n */\nfunction coordsToLine<P extends GeoJsonProperties = GeoJsonProperties>(\n coords: number[][][],\n properties: P\n): Feature<LineString | MultiLineString, P> {\n if (coords.length > 1) {\n return multiLineString(coords, properties);\n }\n return lineString(coords[0], properties);\n}\n\nexport { polygonToLine, coordsToLine, multiPolygonToLine, singlePolygonToLine };\nexport default polygonToLine;\n","import {\n Feature,\n Geometry,\n LineString,\n Point,\n Polygon,\n Position,\n} from \"geojson\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport { flattenEach } from \"@turf/meta\";\nimport { polygonToLine } from \"@turf/polygon-to-line\";\n\n/**\n * Boolean-disjoint returns (TRUE) if the intersection of the two geometries is an empty set.\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreSelfIntersections=true] ignore self-intersections on input features\n * @returns {boolean} true if the intersection is an empty set, false otherwise\n * @example\n * var point = turf.point([2, 2]);\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n *\n * turf.booleanDisjoint(line, point);\n * //=true\n */\nfunction booleanDisjoint(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry,\n {\n ignoreSelfIntersections = true,\n }: {\n ignoreSelfIntersections?: boolean;\n } = { ignoreSelfIntersections: true }\n): boolean {\n let bool = true;\n flattenEach(feature1, (flatten1) => {\n flattenEach(feature2, (flatten2) => {\n if (bool === false) {\n return false;\n }\n bool = disjoint(\n flatten1.geometry,\n flatten2.geometry,\n ignoreSelfIntersections\n );\n });\n });\n return bool;\n}\n\n/**\n * Disjoint operation for simple Geometries (Point/LineString/Polygon)\n *\n * @private\n * @param {Geometry<any>} geom1 GeoJSON Geometry\n * @param {Geometry<any>} geom2 GeoJSON Geometry\n * @param {boolean} ignoreSelfIntersections ignore self-intersections on input features\n * @returns {boolean} true if disjoint, false otherwise\n */\nfunction disjoint(geom1: any, geom2: any, ignoreSelfIntersections: boolean) {\n switch (geom1.type) {\n case \"Point\":\n switch (geom2.type) {\n case \"Point\":\n return !compareCoords(geom1.coordinates, geom2.coordinates);\n case \"LineString\":\n return !isPointOnLine(geom2, geom1);\n case \"Polygon\":\n return !booleanPointInPolygon(geom1, geom2);\n }\n /* istanbul ignore next */\n break;\n case \"LineString\":\n switch (geom2.type) {\n case \"Point\":\n return !isPointOnLine(geom1, geom2);\n case \"LineString\":\n return !isLineOnLine(geom1, geom2, ignoreSelfIntersections);\n case \"Polygon\":\n return !isLineInPoly(geom2, geom1, ignoreSelfIntersections);\n }\n /* istanbul ignore next */\n break;\n case \"Polygon\":\n switch (geom2.type) {\n case \"Point\":\n return !booleanPointInPolygon(geom2, geom1);\n case \"LineString\":\n return !isLineInPoly(geom1, geom2, ignoreSelfIntersections);\n case \"Polygon\":\n return !isPolyInPoly(geom2, geom1, ignoreSelfIntersections);\n }\n }\n return false;\n}\n\n// http://stackoverflow.com/a/11908158/1979085\nfunction isPointOnLine(lineString: LineString, pt: Point) {\n for (let i = 0; i < lineString.coordinates.length - 1; i++) {\n if (\n isPointOnLineSegment(\n lineString.coordinates[i],\n lineString.coordinates[i + 1],\n pt.coordinates\n )\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isLineOnLine(\n lineString1: LineString,\n lineString2: LineString,\n ignoreSelfIntersections: boolean\n) {\n const doLinesIntersect = lineIntersect(lineString1, lineString2, {\n ignoreSelfIntersections,\n });\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\n\nfunction isLineInPoly(\n polygon: Polygon,\n lineString: LineString,\n ignoreSelfIntersections: boolean\n) {\n for (const coord of lineString.coordinates) {\n if (booleanPointInPolygon(coord, polygon)) {\n return true;\n }\n }\n const doLinesIntersect = lineIntersect(lineString, polygonToLine(polygon), {\n ignoreSelfIntersections,\n });\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\n\n/**\n * Is Polygon (geom1) in Polygon (geom2)\n * Only takes into account outer rings\n * See http://stackoverflow.com/a/4833823/1979085\n *\n * @private\n * @param {Geometry|Feature<Polygon>} feature1 Polygon1\n * @param {Geometry|Feature<Polygon>} feature2 Polygon2\n * @param {boolean} ignoreSelfIntersections ignore self-intersections on input features\n * @returns {boolean} true if geom1 is in geom2, false otherwise\n */\nfunction isPolyInPoly(\n feature1: Polygon,\n feature2: Polygon,\n ignoreSelfIntersections: boolean\n) {\n for (const coord1 of feature1.coordinates[0]) {\n if (booleanPointInPolygon(coord1, feature2)) {\n return true;\n }\n }\n for (const coord2 of feature2.coordinates[0]) {\n if (booleanPointInPolygon(coord2, feature1)) {\n return true;\n }\n }\n const doLinesIntersect = lineIntersect(\n polygonToLine(feature1),\n polygonToLine(feature2),\n { ignoreSelfIntersections }\n );\n if (doLinesIntersect.features.length > 0) {\n return true;\n }\n return false;\n}\n\nfunction isPointOnLineSegment(\n lineSegmentStart: Position,\n lineSegmentEnd: Position,\n pt: Position\n) {\n const dxc = pt[0] - lineSegmentStart[0];\n const dyc = pt[1] - lineSegmentStart[1];\n const dxl = lineSegmentEnd[0] - lineSegmentStart[0];\n const dyl = lineSegmentEnd[1] - lineSegmentStart[1];\n const cross = dxc * dyl - dyc * dxl;\n if (cross !== 0) {\n return false;\n }\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n if (dxl > 0) {\n return lineSegmentStart[0] <= pt[0] && pt[0] <= lineSegmentEnd[0];\n } else {\n return lineSegmentEnd[0] <= pt[0] && pt[0] <= lineSegmentStart[0];\n }\n } else if (dyl > 0) {\n return lineSegmentStart[1] <= pt[1] && pt[1] <= lineSegmentEnd[1];\n } else {\n return lineSegmentEnd[1] <= pt[1] && pt[1] <= lineSegmentStart[1];\n }\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true if coord pairs match, false otherwise\n */\nfunction compareCoords(pair1: Position, pair2: Position) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\nexport { booleanDisjoint };\nexport default booleanDisjoint;\n","import { Feature, Geometry } from \"geojson\";\nimport { booleanDisjoint } from \"@turf/boolean-disjoint\";\nimport { flattenEach } from \"@turf/meta\";\n\n/**\n * Boolean-intersects returns (TRUE) if the intersection of the two geometries is NOT an empty set.\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreSelfIntersections=true] ignore self-intersections on input features\n * @returns {boolean} true if geometries intersect, false otherwise\n * @example\n * var point1 = turf.point([2, 2]);\n * var point2 = turf.point([1, 2]);\n * var line = turf.lineString([[1, 1], [1, 3], [1, 4]]);\n *\n * turf.booleanIntersects(line, point1);\n * //=false\n *\n * turf.booleanIntersects(line, point2);\n * //=true\n *\n * //addToMap\n * var addToMap = [point1, point2, line];\n * point1.properties['marker-color'] = '#f00'\n * point2.properties['marker-color'] = '#0f0'\n */\nfunction booleanIntersects(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry,\n {\n ignoreSelfIntersections = true,\n }: {\n ignoreSelfIntersections?: boolean;\n } = {}\n) {\n let bool = false;\n flattenEach(feature1, (flatten1) => {\n flattenEach(feature2, (flatten2) => {\n if (bool === true) {\n return true;\n }\n bool = !booleanDisjoint(flatten1.geometry, flatten2.geometry, {\n ignoreSelfIntersections,\n });\n });\n });\n return bool;\n}\n\nexport { booleanIntersects };\nexport default booleanIntersects;\n","import intersects from '@turf/boolean-intersects';\nimport type {FeatureCollection} from 'geojson';\nimport type {FeatureData} from '../types-internal.js';\nimport type {SpatialFilter} from '../types.js';\n\nexport function geojsonFeatures({\n geojson,\n spatialFilter,\n uniqueIdProperty,\n}: {\n geojson: FeatureCollection;\n spatialFilter: SpatialFilter;\n uniqueIdProperty?: string;\n}): FeatureData[] {\n let uniqueIdx = 0;\n const map = new Map();\n\n if (!spatialFilter) {\n return [];\n }\n\n for (const feature of geojson.features) {\n const uniqueId = uniqueIdProperty\n ? feature.properties![uniqueIdProperty]\n : ++uniqueIdx;\n if (!map.has(uniqueId) && intersects(spatialFilter, feature)) {\n map.set(uniqueId, feature.properties);\n }\n }\n\n return Array.from(map.values());\n}\n","import { BBox, Feature, Polygon, GeoJsonProperties } from \"geojson\";\nimport { polygon, Id } from \"@turf/helpers\";\n\n/**\n * Takes a bbox and returns an equivalent {@link Polygon|polygon}.\n *\n * @function\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @param {Object} [options={}] Optional parameters\n * @param {GeoJsonProperties} [options.properties={}] Translate properties to Polygon\n * @param {string|number} [options.id={}] Translate Id to Polygon\n * @returns {Feature<Polygon>} a Polygon representation of the bounding box\n * @example\n * var bbox = [0, 0, 10, 10];\n *\n * var poly = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [poly]\n */\nfunction bboxPolygon<P extends GeoJsonProperties = GeoJsonProperties>(\n bbox: BBox,\n options: {\n properties?: P;\n id?: Id;\n } = {}\n): Feature<Polygon, P> {\n // Convert BBox positions to Numbers\n // No performance loss for including Number()\n // https://github.com/Turfjs/turf/issues/1119\n const west = Number(bbox[0]);\n const south = Number(bbox[1]);\n const east = Number(bbox[2]);\n const north = Number(bbox[3]);\n\n if (bbox.length === 6) {\n throw new Error(\n \"@turf/bbox-polygon does not support BBox with 6 positions\"\n );\n }\n\n const lowLeft = [west, south];\n const topLeft = [west, north];\n const topRight = [east, north];\n const lowRight = [east, south];\n\n return polygon(\n [[lowLeft, lowRight, topRight, topLeft, lowLeft]],\n options.properties,\n { bbox, id: options.id }\n );\n}\n\nexport { bboxPolygon };\nexport default bboxPolygon;\n","import { BBox } from \"geojson\";\nimport { AllGeoJSON } from \"@turf/helpers\";\nimport { coordEach } from \"@turf/meta\";\n\n/**\n * Calculates the bounding box for any GeoJSON object, including FeatureCollection.\n * Uses geojson.bbox if available and options.recompute is not set.\n *\n * @function\n * @param {GeoJSON} geojson any GeoJSON object\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.recompute] Whether to ignore an existing bbox property on geojson\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(\n geojson: AllGeoJSON,\n options: {\n recompute?: boolean;\n } = {}\n): BBox {\n if (geojson.bbox != null && true !== options.recompute) {\n return geojson.bbox;\n }\n const result: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n coordEach(geojson, (coord) => {\n if (result[0] > coord[0]) {\n result[0] = coord[0];\n }\n if (result[1] > coord[1]) {\n result[1] = coord[1];\n }\n if (result[2] < coord[0]) {\n result[2] = coord[0];\n }\n if (result[3] < coord[1]) {\n result[3] = coord[1];\n }\n });\n return result;\n}\n\nexport { bbox };\nexport default bbox;\n","import { Feature, LineString } from \"geojson\";\nimport { Coord } from \"@turf/helpers\";\nimport { getCoord, getCoords } from \"@turf/invariant\";\n\n/**\n * Returns true if a point is on a line. Accepts a optional parameter to ignore the\n * start and end vertices of the linestring.\n *\n * @function\n * @param {Coord} pt GeoJSON Point\n * @param {Feature<LineString>} line GeoJSON LineString\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.\n * @param {number} [options.epsilon] Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * @returns {boolean} true/false\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);\n * var isPointOnLine = turf.booleanPointOnLine(pt, line);\n * //=true\n */\nfunction booleanPointOnLine(\n pt: Coord,\n line: Feature<LineString> | LineString,\n options: {\n ignoreEndVertices?: boolean;\n epsilon?: number;\n } = {}\n): boolean {\n // Normalize inputs\n const ptCoords = getCoord(pt);\n const lineCoords = getCoords(line);\n\n // Main\n for (let i = 0; i < lineCoords.length - 1; i++) {\n let ignoreBoundary: boolean | string = false;\n if (options.ignoreEndVertices) {\n if (i === 0) {\n ignoreBoundary = \"start\";\n }\n if (i === lineCoords.length - 2) {\n ignoreBoundary = \"end\";\n }\n if (i === 0 && i + 1 === lineCoords.length - 1) {\n ignoreBoundary = \"both\";\n }\n }\n if (\n isPointOnLineSegment(\n lineCoords[i],\n lineCoords[i + 1],\n ptCoords,\n ignoreBoundary,\n typeof options.epsilon === \"undefined\" ? null : options.epsilon\n )\n ) {\n return true;\n }\n }\n return false;\n}\n\n// See http://stackoverflow.com/a/4833823/1979085\n// See https://stackoverflow.com/a/328122/1048847\n/**\n * @private\n * @param {Position} lineSegmentStart coord pair of start of line\n * @param {Position} lineSegmentEnd coord pair of end of line\n * @param {Position} pt coord pair of point to check\n * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.\n * @param {number} epsilon Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * If true which end to ignore.\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(\n lineSegmentStart: number[],\n lineSegmentEnd: number[],\n pt: number[],\n excludeBoundary: string | boolean,\n epsilon: number | null\n): boolean {\n const x = pt[0];\n const y = pt[1];\n const x1 = lineSegmentStart[0];\n const y1 = lineSegmentStart[1];\n const x2 = lineSegmentEnd[0];\n const y2 = lineSegmentEnd[1];\n const dxc = pt[0] - x1;\n const dyc = pt[1] - y1;\n const dxl = x2 - x1;\n const dyl = y2 - y1;\n const cross = dxc * dyl - dyc * dxl;\n if (epsilon !== null) {\n if (Math.abs(cross) > epsilon) {\n return false;\n }\n } else if (cross !== 0) {\n return false;\n }\n\n // Special cases for zero length lines\n // https://github.com/Turfjs/turf/issues/2750\n if (Math.abs(dxl) === Math.abs(dyl) && Math.abs(dxl) === 0) {\n // Zero length line.\n if (excludeBoundary) {\n // To be on a zero length line pt has to be on the start (and end), BUT we\n // are excluding start and end from possible matches.\n return false;\n }\n if (pt[0] === lineSegmentStart[0] && pt[1] === lineSegmentStart[1]) {\n // If point is same as start (and end) it's on the line segment\n return true;\n } else {\n // Otherwise point is somewhere else\n return false;\n }\n }\n\n if (!excludeBoundary) {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n } else if (excludeBoundary === \"start\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n }\n return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n } else if (excludeBoundary === \"end\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n }\n return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n } else if (excludeBoundary === \"both\") {\n if (Math.abs(dxl) >= Math.abs(dyl)) {\n return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n }\n return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n }\n return false;\n}\n\nexport { booleanPointOnLine };\nexport default booleanPointOnLine;\n","import {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPoint,\n MultiPolygon,\n Point,\n Polygon,\n} from \"geojson\";\nimport { bbox as calcBbox } from \"@turf/bbox\";\nimport { booleanPointOnLine } from \"@turf/boolean-point-on-line\";\nimport { booleanPointInPolygon } from \"@turf/boolean-point-in-polygon\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Boolean-within returns true if the first geometry is completely within the second geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)\n * must not intersect the exterior of the secondary (geometry b).\n * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.\n *\n * @function\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry\n): boolean {\n var geom1 = getGeom(feature1);\n var geom2 = getGeom(feature2);\n var type1 = geom1.type;\n var type2 = geom2.type;\n\n switch (type1) {\n case \"Point\":\n switch (type2) {\n case \"MultiPoint\":\n return isPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return booleanPointOnLine(geom1, geom2, { ignoreEndVertices: true });\n case \"Polygon\":\n case \"MultiPolygon\":\n return booleanPointInPolygon(geom1, geom2, { ignoreBoundary: true });\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"MultiPoint\":\n switch (type2) {\n case \"MultiPoint\":\n return isMultiPointInMultiPoint(geom1, geom2);\n case \"LineString\":\n return isMultiPointOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isMultiPointInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"LineString\":\n switch (type2) {\n case \"LineString\":\n return isLineOnLine(geom1, geom2);\n case \"Polygon\":\n case \"MultiPolygon\":\n return isLineInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n case \"Polygon\":\n switch (type2) {\n case \"Polygon\":\n case \"MultiPolygon\":\n return isPolyInPoly(geom1, geom2);\n default:\n throw new Error(\"feature2 \" + type2 + \" geometry not supported\");\n }\n default:\n throw new Error(\"feature1 \" + type1 + \" geometry not supported\");\n }\n}\n\nfunction isPointInMultiPoint(point: Point, multiPoint: MultiPoint) {\n var i;\n var output = false;\n for (i = 0; i < multiPoint.coordinates.length; i++) {\n if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n output = true;\n break;\n }\n }\n return output;\n}\n\nfunction isMultiPointInMultiPoint(\n multiPoint1: MultiPoint,\n multiPoint2: MultiPoint\n) {\n for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n var anyMatch = false;\n for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n if (\n compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])\n ) {\n anyMatch = true;\n }\n }\n if (!anyMatch) {\n return false;\n }\n }\n return true;\n}\n\nfunction isMultiPointOnLine(multiPoint: MultiPoint, lineString: LineString) {\n var foundInsidePoint = false;\n\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n if (!booleanPointOnLine(multiPoint.coordinates[i], lineString)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointOnLine(\n multiPoint.coordinates[i],\n lineString,\n { ignoreEndVertices: true }\n );\n }\n }\n return foundInsidePoint;\n}\n\nfunction isMultiPointInPoly(multiPoint: MultiPoint, polygon: Polygon) {\n var output = true;\n var oneInside = false;\n var isInside = false;\n for (var i = 0; i < multiPoint.coordinates.length; i++) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon);\n if (!isInside) {\n output = false;\n break;\n }\n if (!oneInside) {\n isInside = booleanPointInPolygon(multiPoint.coordinates[i], polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return output && isInside;\n}\n\nfunction isLineOnLine(lineString1: LineString, lineString2: LineString) {\n for (var i = 0; i < lineString1.coordinates.length; i++) {\n if (!booleanPointOnLine(lineString1.coordinates[i], lineString2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction isLineInPoly(linestring: LineString, polygon: Polygon) {\n var polyBbox = calcBbox(polygon);\n var lineBbox = calcBbox(linestring);\n if (!doBBoxOverlap(polyBbox, lineBbox)) {\n return false;\n }\n var foundInsidePoint = false;\n\n for (var i = 0; i < linestring.coordinates.length; i++) {\n if (!booleanPointInPolygon(linestring.coordinates[i], polygon)) {\n return false;\n }\n if (!foundInsidePoint) {\n foundInsidePoint = booleanPointInPolygon(\n linestring.coordinates[i],\n polygon,\n { ignoreBoundary: true }\n );\n }\n if (!foundInsidePoint && i < linestring.coordinates.length - 1) {\n var midpoint = getMidpoint(\n linestring.coordinates[i],\n linestring.coordinates[i + 1]\n );\n foundInsidePoint = booleanPointInPolygon(midpoint, polygon, {\n ignoreBoundary: true,\n });\n }\n }\n return foundInsidePoint;\n}\n\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Polygon} geometry1\n * @param {Polygon|MultiPolygon} geometry2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(geometry1: Polygon, geometry2: Polygon | MultiPolygon) {\n var poly1Bbox = calcBbox(geometry1);\n var poly2Bbox = calcBbox(geometry2);\n if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n return false;\n }\n for (var i = 0; i < geometry1.coordinates[0].length; i++) {\n if (!booleanPointInPolygon(geometry1.coordinates[0][i], geometry2)) {\n return false;\n }\n }\n return true;\n}\n\nfunction doBBoxOverlap(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] > bbox2[0]) return false;\n if (bbox1[2] < bbox2[2]) return false;\n if (bbox1[1] > bbox2[1]) return false;\n if (bbox1[3] < bbox2[3]) return false;\n return true;\n}\n\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1: number[], pair2: number[]) {\n return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1: number[], pair2: number[]) {\n return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\n\nexport { booleanWithin };\nexport default booleanWithin;\n","/*\r\n * bignumber.js v9.1.2\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2022 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\nvar\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n/*\r\n * Create and return a BigNumber constructor.\r\n */\r\nfunction clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, -1);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n // If any number is NaN, return NaN.\r\n function maxOrMin(args, n) {\r\n var k, y,\r\n i = 1,\r\n x = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n y = new BigNumber(args[i]);\r\n if (!y.s || (k = compare(x, y)) === n || k === 0 && x.s === n) {\r\n x = y;\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = mathfloor(n / pows10[d - j - 1] % 10);\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : mathfloor(n / pows10[d - j - 1] % 10);\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? n.s * (2 - isOdd(n)) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) {\r\n zc = xc;\r\n xc = yc;\r\n yc = zc;\r\n i = xcL;\r\n xcL = ycL;\r\n ycL = i;\r\n }\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n b = a;\r\n }\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) {\r\n i = g1;\r\n g1 = g2;\r\n g2 = i;\r\n len -= i;\r\n }\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n P[Symbol.toStringTag] = 'BigNumber';\r\n\r\n // Node.js v10.12.0+\r\n P[Symbol.for('nodejs.util.inspect.custom')] = P.valueOf;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n}\r\n\r\n\r\n// PRIVATE HELPER FUNCTIONS\r\n\r\n// These functions don't need access to variables,\r\n// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\nfunction bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n}\r\n\r\n\r\n// Return a coefficient array as a string of base 10 digits.\r\nfunction coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n}\r\n\r\n\r\n// Compare the value of BigNumbers x and y.\r\nfunction compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n}\r\n\r\n\r\n/*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\nfunction intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n}\r\n\r\n\r\n// Assumes finite n.\r\nfunction isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n}\r\n\r\n\r\nfunction toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n}\r\n\r\n\r\nfunction toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n}\r\n\r\n\r\n// EXPORT\r\n\r\n\r\nexport var BigNumber = clone();\r\n\r\nexport default BigNumber;\r\n","type Comparator<T> = (a: T, b: T) => number;\ntype Predicate<T> = (value: T) => boolean;\n\nclass SplayTreeNode<K, Node extends SplayTreeNode<K, Node>> {\n readonly key: K;\n\n left: Node | null = null;\n right: Node | null = null;\n\n constructor(key: K) {\n this.key = key;\n }\n}\n\nclass SplayTreeSetNode<K> extends SplayTreeNode<K, SplayTreeSetNode<K>> {\n constructor(key: K) {\n super(key);\n }\n}\n\nclass SplayTreeMapNode<K, V> extends SplayTreeNode<K, SplayTreeMapNode<K, V>> {\n readonly value: V;\n\n constructor(key: K, value: V) {\n super(key);\n this.value = value;\n }\n\n replaceValue(value: V) {\n const node = new SplayTreeMapNode(this.key, value);\n node.left = this.left;\n node.right = this.right;\n return node;\n }\n}\n\nabstract class SplayTree<K, Node extends SplayTreeNode<K, Node>> {\n protected abstract root: Node | null;\n\n public size = 0;\n\n protected modificationCount = 0;\n\n protected splayCount = 0;\n\n protected abstract compare: Comparator<K>;\n\n protected abstract validKey: Predicate<unknown>;\n\n protected splay(key: K) {\n const root = this.root;\n if (root == null) {\n this.compare(key, key);\n return -1;\n }\n\n let right: Node | null = null;\n let newTreeRight: Node | null = null;\n let left: Node | null = null;\n let newTreeLeft: Node | null = null;\n let current = root;\n const compare = this.compare;\n let comp: number;\n while (true) {\n comp = compare(current.key, key);\n if (comp > 0) {\n let currentLeft = current.left;\n if (currentLeft == null) break;\n comp = compare(currentLeft.key, key);\n if (comp > 0) {\n current.left = currentLeft.right;\n currentLeft.right = current;\n current = currentLeft;\n currentLeft = current.left;\n if (currentLeft == null) break;\n }\n if (right == null) {\n newTreeRight = current;\n } else {\n right.left = current;\n }\n right = current;\n current = currentLeft;\n } else if (comp < 0) {\n let currentRight = current.right;\n if (currentRight == null) break;\n comp = compare(currentRight.key, key);\n if (comp < 0) {\n current.right = currentRight.left;\n currentRight.left = current;\n current = currentRight;\n currentRight = current.right;\n if (currentRight == null) break;\n }\n if (left == null) {\n newTreeLeft = current;\n } else {\n left.right = current;\n }\n left = current;\n current = currentRight;\n } else {\n break;\n }\n }\n if (left != null) {\n left.right = current.left;\n current.left = newTreeLeft;\n }\n if (right != null) {\n right.left = current.right;\n current.right = newTreeRight;\n }\n if (this.root !== current) {\n this.root = current;\n this.splayCount++;\n }\n return comp;\n }\n\n protected splayMin(node: Node) {\n let current = node;\n let nextLeft = current.left;\n while (nextLeft != null) {\n const left = nextLeft;\n current.left = left.right;\n left.right = current;\n current = left;\n nextLeft = current.left;\n }\n return current;\n }\n\n protected splayMax(node: Node) {\n let current = node;\n let nextRight = current.right;\n while (nextRight != null) {\n const right = nextRight;\n current.right = right.left;\n right.left = current;\n current = right;\n nextRight = current.right;\n }\n return current;\n }\n\n protected _delete(key: K) {\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp != 0) return null;\n let root = this.root;\n const result = root;\n const left = root.left;\n this.size--;\n if (left == null) {\n this.root = root.right;\n } else {\n const right = root.right;\n root = this.splayMax(left);\n\n root.right = right;\n this.root = root;\n }\n this.modificationCount++;\n return result;\n }\n\n protected addNewRoot(node: Node, comp: number) {\n this.size++;\n this.modificationCount++;\n const root = this.root;\n if (root == null) {\n this.root = node;\n return;\n }\n if (comp < 0) {\n node.left = root;\n node.right = root.right;\n root.right = null;\n } else {\n node.right = root;\n node.left = root.left;\n root.left = null;\n }\n this.root = node;\n }\n\n protected _first() {\n const root = this.root;\n if (root == null) return null;\n this.root = this.splayMin(root);\n return this.root;\n }\n\n protected _last() {\n const root = this.root;\n if (root == null) return null;\n this.root = this.splayMax(root);\n return this.root;\n }\n\n public clear() {\n this.root = null;\n this.size = 0;\n this.modificationCount++;\n }\n\n public has(key: unknown) {\n return this.validKey(key) && this.splay(key as K) == 0;\n }\n\n protected defaultCompare(): Comparator<K> {\n return (a: K, b: K) => a < b ? -1 : a > b ? 1 : 0;\n }\n\n protected wrap(): SplayTreeWrapper<K, Node> {\n return {\n getRoot: () => { return this.root },\n setRoot: (root) => { this.root = root },\n getSize: () => { return this.size },\n getModificationCount: () => { return this.modificationCount },\n getSplayCount: () => { return this.splayCount },\n setSplayCount: (count) => { this.splayCount = count },\n splay: (key) => { return this.splay(key) },\n has: (key) => { return this.has(key) },\n };\n }\n}\n\nexport class SplayTreeMap<K, V> extends SplayTree<K, SplayTreeMapNode<K, V>> implements Iterable<[K, V]>, Map<K, V> {\n protected root: SplayTreeMapNode<K, V> | null = null;\n\n protected compare: Comparator<K>;\n protected validKey: Predicate<unknown>;\n\n constructor(compare?: Comparator<K>, isValidKey?: Predicate<unknown>) {\n super();\n this.compare = compare ?? this.defaultCompare();\n this.validKey = isValidKey ?? ((a: unknown) => a != null && a != undefined);\n }\n\n delete(key: unknown) {\n if (!this.validKey(key)) return false;\n return this._delete(key as K) != null;\n }\n\n forEach(f: (value: V, key: K, map: Map<K, V>) => void) {\n const nodes: Iterator<[K, V]> = new SplayTreeMapEntryIterableIterator<K, V>(this.wrap());\n let result: IteratorResult<[K, V]>;\n while (result = nodes.next(), !result.done) {\n f(result.value[1], result.value[0], this);\n }\n }\n\n get(key: unknown): V | undefined {\n if (!this.validKey(key)) return undefined;\n if (this.root != null) {\n const comp = this.splay(key as K);\n if (comp == 0) {\n return this.root!.value;\n }\n }\n return undefined;\n }\n\n hasValue(value: unknown) {\n const initialSplayCount = this.splayCount;\n const visit = (node: SplayTreeMapNode<K, V> | null) => {\n while (node != null) {\n if (node.value == value) return true;\n if (initialSplayCount != this.splayCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (node.right != null && visit(node.right)) {\n return true;\n }\n node = node.left;\n }\n return false;\n }\n\n return visit(this.root);\n }\n\n set(key: K, value: V) {\n const comp = this.splay(key);\n if (comp == 0) {\n this.root = this.root!.replaceValue(value);\n this.splayCount += 1;\n return this;\n }\n this.addNewRoot(new SplayTreeMapNode(key, value), comp);\n return this;\n }\n\n setAll(other: Map<K, V>) {\n other.forEach((value: V, key: K) => {\n this.set(key, value);\n });\n }\n\n setIfAbsent(key: K, ifAbsent: () => V) {\n let comp = this.splay(key);\n if (comp == 0) {\n return this.root!.value;\n }\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const value = ifAbsent();\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n comp = this.splay(key);\n }\n this.addNewRoot(new SplayTreeMapNode(key, value), comp);\n return value;\n }\n\n isEmpty() {\n return this.root == null;\n }\n\n isNotEmpty() {\n return !this.isEmpty();\n }\n\n firstKey() {\n if (this.root == null) return null;\n return this._first()!.key;\n }\n\n lastKey() {\n if (this.root == null) return null;\n return this._last()!.key;\n }\n\n lastKeyBefore(key: K) {\n if (key == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp < 0) return this.root!.key;\n let node: SplayTreeMapNode<K, V> | null = this.root!.left;\n if (node == null) return null;\n let nodeRight = node.right;\n while (nodeRight != null) {\n node = nodeRight;\n nodeRight = node.right;\n }\n return node!.key;\n }\n\n firstKeyAfter(key: K) {\n if (key == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(key);\n if (comp > 0) return this.root!.key;\n let node: SplayTreeMapNode<K, V> | null = this.root!.right;\n if (node == null) return null;\n let nodeLeft = node.left;\n while (nodeLeft != null) {\n node = nodeLeft;\n nodeLeft = node.left;\n }\n return node!.key;\n }\n\n update(key: K, update: (value: V) => V, ifAbsent?: () => V) {\n let comp = this.splay(key);\n if (comp == 0) {\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const newValue = update(this.root!.value);\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n this.splay(key);\n }\n this.root = this.root!.replaceValue(newValue);\n this.splayCount += 1;\n return newValue;\n }\n if (ifAbsent != null) {\n const modificationCount = this.modificationCount;\n const splayCount = this.splayCount;\n const newValue = ifAbsent();\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (splayCount != this.splayCount) {\n comp = this.splay(key);\n }\n this.addNewRoot(new SplayTreeMapNode(key, newValue), comp);\n return newValue;\n }\n throw \"Invalid argument (key): Key not in map.\"\n }\n\n updateAll(update: (key: K, value: V) => V) {\n const root = this.root;\n if (root == null) return;\n const iterator = new SplayTreeMapEntryIterableIterator(this.wrap());\n let node: IteratorResult<[K, V]>;\n while (node = iterator.next(), !node.done) {\n const newValue = update(...node.value);\n iterator.replaceValue(newValue);\n }\n }\n\n keys(): IterableIterator<K> {\n return new SplayTreeKeyIterableIterator<K, SplayTreeMapNode<K, V>>(this.wrap());\n }\n\n values(): IterableIterator<V> {\n return new SplayTreeValueIterableIterator<K, V>(this.wrap());\n }\n\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n return new SplayTreeMapEntryIterableIterator<K, V>(this.wrap());\n }\n\n [Symbol.toStringTag] = '[object Map]'\n}\n\nexport class SplayTreeSet<E> extends SplayTree<E, SplayTreeSetNode<E>> implements Iterable<E>, Set<E> {\n protected root: SplayTreeSetNode<E> | null = null;\n\n protected compare: Comparator<E>;\n protected validKey: Predicate<unknown>;\n\n constructor(compare?: Comparator<E>, isValidKey?: Predicate<unknown>) {\n super();\n this.compare = compare ?? this.defaultCompare();\n this.validKey = isValidKey ?? ((v: unknown) => v != null && v != undefined );\n }\n\n delete(element: unknown) {\n if (!this.validKey(element)) return false;\n return this._delete(element as E) != null;\n }\n\n deleteAll(elements: Iterable<unknown>) {\n for (const element of elements) {\n this.delete(element);\n }\n }\n\n forEach(f: (element: E, element2: E, set: Set<E>) => void) {\n const nodes: Iterator<E> = this[Symbol.iterator]();\n let result: IteratorResult<E>;\n while (result = nodes.next(), !result.done) {\n f(result.value, result.value, this);\n }\n }\n\n add(element: E) {\n const compare = this.splay(element);\n if (compare != 0) this.addNewRoot(new SplayTreeSetNode(element), compare);\n return this;\n }\n\n addAndReturn(element: E) {\n const compare = this.splay(element);\n if (compare != 0) this.addNewRoot(new SplayTreeSetNode(element), compare);\n return this.root!.key;\n }\n\n addAll(elements: Iterable<E>) {\n for (const element of elements) {\n this.add(element);\n }\n }\n\n isEmpty() {\n return this.root == null;\n }\n\n isNotEmpty() {\n return this.root != null;\n }\n\n single() {\n if (this.size == 0) throw \"Bad state: No element\";\n if (this.size > 1) throw \"Bad state: Too many element\";\n return this.root!.key;\n }\n\n first() {\n if (this.size == 0) throw \"Bad state: No element\";\n return this._first()!.key;\n }\n\n last() {\n if (this.size == 0) throw \"Bad state: No element\";\n return this._last()!.key;\n }\n\n lastBefore(element: E) {\n if (element == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(element);\n if (comp < 0) return this.root!.key;\n let node: SplayTreeSetNode<E> | null = this.root!.left;\n if (node == null) return null;\n let nodeRight = node.right;\n while (nodeRight != null) {\n node = nodeRight;\n nodeRight = node.right;\n }\n return node!.key;\n }\n\n firstAfter(element: E) {\n if (element == null) throw \"Invalid arguments(s)\";\n if (this.root == null) return null;\n const comp = this.splay(element);\n if (comp > 0) return this.root!.key;\n let node: SplayTreeSetNode<E> | null = this.root!.right;\n if (node == null) return null;\n let nodeLeft = node.left;\n while (nodeLeft != null) {\n node = nodeLeft;\n nodeLeft = node.left;\n }\n return node!.key;\n }\n\n retainAll(elements: Iterable<unknown>) {\n const retainSet = new SplayTreeSet<E>(this.compare, this.validKey);\n const modificationCount = this.modificationCount;\n for (const object of elements) {\n if (modificationCount != this.modificationCount) {\n throw \"Concurrent modification during iteration.\";\n }\n if (this.validKey(object) && this.splay(object as E) == 0) {\n retainSet.add(this.root!.key);\n }\n }\n if (retainSet.size != this.size) {\n this.root = retainSet.root;\n this.size = retainSet.size;\n this.modificationCount++;\n }\n }\n\n lookup(object: unknown): E | null {\n if (!this.validKey(object)) return null;\n const comp = this.splay(object as E);\n if (comp != 0) return null;\n return this.root!.key;\n }\n\n intersection(other: Set<unknown>): Set<E> {\n const result = new SplayTreeSet<E>(this.compare, this.validKey);\n for (const element of this) {\n if (other.has(element)) result.add(element);\n }\n return result;\n }\n\n difference(other: Set<unknown>): Set<E> {\n const result = new SplayTreeSet<E>(this.compare, this.validKey);\n for (const element of this) {\n if (!other.has(element)) result.add(element);\n }\n return result;\n }\n\n union(other: Set<E>): Set<E> {\n const u = this.clone();\n u.addAll(other);\n return u;\n }\n\n protected clone() {\n const set = new SplayTreeSet<E>(this.compare, this.validKey);\n set.size = this.size;\n set.root = this.copyNode<SplayTreeSetNode<E>>(this.root);\n return set;\n }\n\n protected copyNode<Node extends SplayTreeNode<E, Node>>(node: Node | null) {\n if (node == null) return null;\n function copyChildren(node: Node, dest: SplayTreeSetNode<E>) {\n let left: Node | null;\n let right: Node | null;\n do {\n left = node.left;\n right = node.right;\n if (left != null) {\n const newLeft = new SplayTreeSetNode<E>(left.key);\n dest.left = newLeft;\n copyChildren(left, newLeft);\n }\n if (right != null) {\n const newRight = new SplayTreeSetNode<E>(right.key);\n dest.right = newRight;\n node = right;\n dest = newRight;\n }\n } while (right != null);\n }\n\n const result = new SplayTreeSetNode<E>(node.key);\n copyChildren(node, result);\n return result;\n }\n\n toSet(): Set<E> {\n return this.clone();\n }\n\n entries(): IterableIterator<[E, E]> {\n return new SplayTreeSetEntryIterableIterator<E, SplayTreeSetNode<E>>(this.wrap());\n }\n\n keys(): IterableIterator<E> {\n return this[Symbol.iterator]();\n }\n \n values(): IterableIterator<E> {\n return this[Symbol.iterator]();\n }\n\n [Symbol.iterator](): IterableIterator<E> {\n return new SplayTreeKeyIterableIterator<E, SplayTreeSetNode<E>>(this.wrap());\n }\n\n [Symbol.toStringTag] = '[object Set]'\n}\n\ninterface SplayTreeWrapper<K, Node extends SplayTreeNode<K, Node>> {\n getRoot: () => Node | null;\n setRoot: (root: Node | null) => void;\n getSize: () => number;\n getModificationCount: () => number;\n getSplayCount: () => number;\n setSplayCount: (count: number) => void;\n splay: (key: K) => number;\n has: (key: unknown) => boolean;\n}\n\ntype SplayTreeMapWrapper<K, V> = SplayTreeWrapper<K, SplayTreeMapNode<K, V>>;\n\nabstract class SplayTreeIterableIterator<K, Node extends SplayTreeNode<K, Node>, T> implements IterableIterator<T> {\n protected readonly tree: SplayTreeWrapper<K, Node>;\n\n protected readonly path = new Array<Node>();\n\n protected modificationCount: number | null = null;\n\n protected splayCount: number;\n\n constructor(tree: SplayTreeWrapper<K, Node>) {\n this.tree = tree;\n this.splayCount = tree.getSplayCount();\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this;\n }\n\n next(): IteratorResult<T, null> {\n if (this.moveNext()) return { done: false, value: this.current()! }\n return { done: true, value: null }\n }\n\n protected current() {\n if (!this.path.length) return null;\n const node = this.path[this.path.length - 1];\n return this.getValue(node);\n }\n\n protected rebuildPath(key: K) {\n this.path.splice(0, this.path.length)\n this.tree.splay(key);\n this.path.push(this.tree.getRoot()!);\n this.splayCount = this.tree.getSplayCount();\n }\n\n protected findLeftMostDescendent(node: Node | null) {\n while (node != null) {\n this.path.push(node);\n node = node.left;\n }\n }\n\n protected moveNext() {\n if (this.modificationCount != this.tree.getModificationCount()) {\n if (this.modificationCount == null) {\n this.modificationCount = this.tree.getModificationCount();\n let node = this.tree.getRoot();\n while (node != null) {\n this.path.push(node);\n node = node.left;\n }\n return this.path.length > 0;\n }\n throw \"Concurrent modification during iteration.\";\n }\n if (!this.path.length) return false;\n if (this.splayCount != this.tree.getSplayCount()) {\n this.rebuildPath(this.path[this.path.length - 1].key);\n }\n let node = this.path[this.path.length - 1];\n let next = node.right;\n if (next != null) {\n while (next != null) {\n this.path.push(next);\n next = next.left;\n }\n return true;\n }\n this.path.pop();\n while (this.path.length && this.path[this.path.length - 1].right === node) {\n node = this.path.pop()!;\n }\n return this.path.length > 0;\n }\n\n protected abstract getValue(node: Node): T\n}\n\nclass SplayTreeKeyIterableIterator<K, Node extends SplayTreeNode<K, Node>> extends SplayTreeIterableIterator<K, Node, K> {\n\n protected getValue(node: Node) {\n return node.key;\n }\n}\n\nclass SplayTreeSetEntryIterableIterator<K, Node extends SplayTreeNode<K, Node>> extends SplayTreeIterableIterator<K, Node, [K, K]> {\n\n protected getValue(node: Node): [K, K] {\n return [node.key, node.key];\n }\n}\n\nclass SplayTreeValueIterableIterator<K, V> extends SplayTreeIterableIterator<K, SplayTreeMapNode<K, V>, V> {\n\n constructor(map: SplayTreeMapWrapper<K, V>) {\n super(map);\n }\n\n protected getValue(node: SplayTreeMapNode<K, V>) {\n return node.value;\n }\n}\n\nclass SplayTreeMapEntryIterableIterator<K, V> extends SplayTreeIterableIterator<K, SplayTreeMapNode<K, V>, [K, V]> {\n\n constructor(map: SplayTreeMapWrapper<K, V>) {\n super(map);\n }\n\n protected getValue(node: SplayTreeMapNode<K, V>): [K, V] {\n return [node.key, node.value];\n }\n\n replaceValue(value: V) {\n if (this.modificationCount != this.tree.getModificationCount()) {\n throw \"Concurrent modification during iteration.\";\n }\n if (this.splayCount != this.tree.getSplayCount()) {\n this.rebuildPath(this.path[this.path.length - 1].key);\n }\n const last = this.path.pop()!;\n const newLast = last.replaceValue(value);\n if (!this.path.length) {\n this.tree.setRoot(newLast);\n } else {\n const parent = this.path[this.path.length - 1];\n if (last === parent.left) {\n parent.left = newLast;\n } else {\n parent.right = newLast;\n }\n }\n this.path.push(newLast);\n const count = this.tree.getSplayCount() + 1;\n this.tree.setSplayCount(count);\n this.splayCount = count;\n }\n}","import BigNumber from \"bignumber.js\";\nimport { Bbox } from \"./bbox.js\";\nimport { precision } from \"./precision.js\";\nimport Segment from \"./segment.js\";\nimport { Point } from \"./sweep-event.js\";\n\nexport type Ring = [number, number][]\nexport type Poly = Ring[]\nexport type MultiPoly = Poly[]\nexport type Geom = Poly | MultiPoly\n\nexport class RingIn {\n poly: PolyIn\n isExterior: boolean\n segments: Segment[]\n bbox: Bbox\n\n constructor(geomRing: Ring, poly: PolyIn, isExterior: boolean) {\n if (!Array.isArray(geomRing) || geomRing.length === 0) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\")\n }\n\n this.poly = poly\n this.isExterior = isExterior\n this.segments = []\n\n if (\n typeof geomRing[0][0] !== \"number\" ||\n typeof geomRing[0][1] !== \"number\"\n ) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\")\n }\n\n const firstPoint = precision.snap({ x: new BigNumber(geomRing[0][0]), y: new BigNumber(geomRing[0][1]) }) as Point\n this.bbox = {\n ll: { x: firstPoint.x, y: firstPoint.y },\n ur: { x: firstPoint.x, y: firstPoint.y },\n }\n\n let prevPoint = firstPoint\n for (let i = 1, iMax = geomRing.length; i < iMax; i++) {\n if (\n typeof geomRing[i][0] !== \"number\" ||\n typeof geomRing[i][1] !== \"number\"\n ) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\")\n }\n const point = precision.snap({ x: new BigNumber(geomRing[i][0]), y: new BigNumber(geomRing[i][1]) }) as Point\n // skip repeated points\n if (point.x.eq(prevPoint.x) && point.y.eq(prevPoint.y)) continue\n this.segments.push(Segment.fromRing(prevPoint, point, this))\n if (point.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = point.x\n if (point.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = point.y\n if (point.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = point.x\n if (point.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = point.y\n prevPoint = point\n }\n // add segment from last to first if last is not the same as first\n if (!firstPoint.x.eq(prevPoint.x) || !firstPoint.y.eq(prevPoint.y)) {\n this.segments.push(Segment.fromRing(prevPoint, firstPoint, this))\n }\n }\n\n getSweepEvents() {\n const sweepEvents = []\n for (let i = 0, iMax = this.segments.length; i < iMax; i++) {\n const segment = this.segments[i]\n sweepEvents.push(segment.leftSE)\n sweepEvents.push(segment.rightSE)\n }\n return sweepEvents\n }\n}\n\nexport class PolyIn {\n multiPoly: MultiPolyIn\n exteriorRing: RingIn\n interiorRings: RingIn[]\n bbox: Bbox\n\n constructor(geomPoly: Poly, multiPoly: MultiPolyIn) {\n if (!Array.isArray(geomPoly)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\")\n }\n this.exteriorRing = new RingIn(geomPoly[0], this, true)\n // copy by value\n this.bbox = {\n ll: { x: this.exteriorRing.bbox.ll.x, y: this.exteriorRing.bbox.ll.y },\n ur: { x: this.exteriorRing.bbox.ur.x, y: this.exteriorRing.bbox.ur.y },\n }\n this.interiorRings = []\n for (let i = 1, iMax = geomPoly.length; i < iMax; i++) {\n const ring = new RingIn(geomPoly[i], this, false)\n if (ring.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = ring.bbox.ll.x\n if (ring.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = ring.bbox.ll.y\n if (ring.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = ring.bbox.ur.x\n if (ring.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = ring.bbox.ur.y\n this.interiorRings.push(ring)\n }\n this.multiPoly = multiPoly\n }\n\n getSweepEvents() {\n const sweepEvents = this.exteriorRing.getSweepEvents()\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringSweepEvents = this.interiorRings[i].getSweepEvents()\n for (let j = 0, jMax = ringSweepEvents.length; j < jMax; j++) {\n sweepEvents.push(ringSweepEvents[j])\n }\n }\n return sweepEvents\n }\n}\n\nexport class MultiPolyIn {\n isSubject: boolean\n polys: PolyIn[]\n bbox: Bbox\n\n constructor(geom: Geom, isSubject: boolean) {\n if (!Array.isArray(geom)) {\n throw new Error(\"Input geometry is not a valid Polygon or MultiPolygon\")\n }\n\n try {\n // if the input looks like a polygon, convert it to a multipolygon\n if (typeof geom[0][0][0] === \"number\") geom = [geom as Poly]\n } catch (ex) {\n // The input is either malformed or has empty arrays.\n // In either case, it will be handled later on.\n }\n\n this.polys = []\n this.bbox = {\n ll: { x: new BigNumber(Number.POSITIVE_INFINITY), y: new BigNumber(Number.POSITIVE_INFINITY) },\n ur: { x: new BigNumber(Number.NEGATIVE_INFINITY), y: new BigNumber(Number.NEGATIVE_INFINITY) },\n }\n for (let i = 0, iMax = geom.length; i < iMax; i++) {\n const poly = new PolyIn(geom[i] as Poly, this)\n if (poly.bbox.ll.x.isLessThan(this.bbox.ll.x)) this.bbox.ll.x = poly.bbox.ll.x\n if (poly.bbox.ll.y.isLessThan(this.bbox.ll.y)) this.bbox.ll.y = poly.bbox.ll.y\n if (poly.bbox.ur.x.isGreaterThan(this.bbox.ur.x)) this.bbox.ur.x = poly.bbox.ur.x\n if (poly.bbox.ur.y.isGreaterThan(this.bbox.ur.y)) this.bbox.ur.y = poly.bbox.ur.y\n this.polys.push(poly)\n }\n this.isSubject = isSubject\n }\n\n getSweepEvents() {\n const sweepEvents = []\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polySweepEvents = this.polys[i].getSweepEvents()\n for (let j = 0, jMax = polySweepEvents.length; j < jMax; j++) {\n sweepEvents.push(polySweepEvents[j])\n }\n }\n return sweepEvents\n }\n}\n","export default <T>(x: T) => {\n return () => {\n return x\n }\n}","import BigNumber from \"bignumber.js\"\nimport constant from \"./constant.js\"\n\nexport default (eps?: number) => {\n const almostEqual = eps ? (a: BigNumber, b: BigNumber) =>\n b.minus(a).abs().isLessThanOrEqualTo(eps)\n : constant(false)\n\n return (a: BigNumber, b: BigNumber) => {\n if (almostEqual(a, b)) return 0\n\n return a.comparedTo(b)\n }\n}","import BigNumber from \"bignumber.js\";\nimport constant from \"./constant.js\";\nimport { Vector } from \"./vector.js\";\n\nexport default function (eps?: number) {\n const almostCollinear = eps ? (area2: BigNumber, ax: BigNumber, ay: BigNumber, cx: BigNumber, cy: BigNumber) =>\n area2.exponentiatedBy(2).isLessThanOrEqualTo(\n cx.minus(ax).exponentiatedBy(2).plus(cy.minus(ay).exponentiatedBy(2))\n .times(eps))\n : constant(false)\n\n return (a: Vector, b: Vector, c: Vector) => {\n const ax = a.x, ay = a.y, cx = c.x, cy = c.y\n\n const area2 = ay.minus(cy).times(b.x.minus(cx)).minus(ax.minus(cx).times(b.y.minus(cy)))\n\n if (almostCollinear(area2, ax, ay, cx, cy)) return 0\n\n return area2.comparedTo(0)\n }\n}","import BigNumber from \"bignumber.js\";\nimport { SplayTreeSet } from \"splaytree-ts\"\nimport compare from \"./compare.js\";\nimport identity from \"./identity.js\";\nimport { Vector } from \"./vector.js\";\n\nexport default (eps?: number) => {\n if (eps) {\n\n const xTree = new SplayTreeSet(compare(eps))\n const yTree = new SplayTreeSet(compare(eps))\n\n const snapCoord = (coord: BigNumber, tree: SplayTreeSet<BigNumber>) => {\n return tree.addAndReturn(coord)\n }\n\n const snap = (v: Vector) => {\n return {\n x: snapCoord(v.x, xTree),\n y: snapCoord(v.y, yTree),\n } as Vector\n }\n\n snap({ x: new BigNumber(0), y: new BigNumber(0)})\n\n return snap\n }\n\n return identity<Vector>\n}","export default <T>(x: T) => {\n return x;\n}","import compare from \"./compare.js\";\nimport orient from \"./orient.js\";\nimport snap from \"./snap.js\";\n\nconst set = (eps?: number) => {\n return {\n set: (eps?: number) => { precision = set(eps) },\n reset: () => set(eps),\n compare: compare(eps),\n snap: snap(eps),\n orient: orient(eps)\n }\n}\n\nexport let precision: ReturnType<typeof set> = set()","import { Vector } from \"./vector.js\";\n\nexport interface Bbox {\n ll: Vector;\n ur: Vector;\n}\n\n/**\n * A bounding box has the format:\n *\n * { ll: { x: xmin, y: ymin }, ur: { x: xmax, y: ymax } }\n *\n */\n\nexport const isInBbox = (bbox: Bbox, point: Vector) => {\n return (\n bbox.ll.x.isLessThanOrEqualTo(point.x) &&\n point.x.isLessThanOrEqualTo(bbox.ur.x) &&\n bbox.ll.y.isLessThanOrEqualTo(point.y) &&\n point.y.isLessThanOrEqualTo(bbox.ur.y) \n )\n}\n\n/* Returns either null, or a bbox (aka an ordered pair of points)\n * If there is only one point of overlap, a bbox with identical points\n * will be returned */\nexport const getBboxOverlap = (b1: Bbox, b2: Bbox) => {\n // check if the bboxes overlap at all\n if (\n b2.ur.x.isLessThan(b1.ll.x) ||\n b1.ur.x.isLessThan(b2.ll.x) ||\n b2.ur.y.isLessThan(b1.ll.y) ||\n b1.ur.y.isLessThan(b2.ll.y) \n )\n return null\n\n // find the middle two X values\n const lowerX = b1.ll.x.isLessThan(b2.ll.x) ? b2.ll.x : b1.ll.x\n const upperX = b1.ur.x.isLessThan(b2.ur.x) ? b1.ur.x : b2.ur.x\n\n // find the middle two Y values\n const lowerY = b1.ll.y.isLessThan(b2.ll.y) ? b2.ll.y : b1.ll.y\n const upperY = b1.ur.y.isLessThan(b2.ur.y) ? b1.ur.y : b2.ur.y\n\n // put those middle values together to get the overlap\n return { ll: { x: lowerX, y: lowerY }, ur: { x: upperX, y: upperY } } as Bbox\n}\n","import { SplayTreeSet } from \"splaytree-ts\"\nimport { getBboxOverlap } from \"./bbox.js\"\nimport * as geomIn from \"./geom-in.js\"\nimport { Geom } from \"./geom-in.js\"\nimport * as geomOut from \"./geom-out.js\"\nimport { precision } from \"./precision.js\"\nimport SweepEvent from \"./sweep-event.js\"\nimport SweepLine from \"./sweep-line.js\"\n\nexport class Operation {\n type!: string\n numMultiPolys!: number\n\n run(type: string, geom: Geom, moreGeoms: Geom[]) {\n operation.type = type\n\n /* Convert inputs to MultiPoly objects */\n const multipolys = [new geomIn.MultiPolyIn(geom, true)]\n for (let i = 0, iMax = moreGeoms.length; i < iMax; i++) {\n multipolys.push(new geomIn.MultiPolyIn(moreGeoms[i], false))\n }\n operation.numMultiPolys = multipolys.length\n\n /* BBox optimization for difference operation\n * If the bbox of a multipolygon that's part of the clipping doesn't\n * intersect the bbox of the subject at all, we can just drop that\n * multiploygon. */\n if (operation.type === \"difference\") {\n // in place removal\n const subject = multipolys[0]\n let i = 1\n while (i < multipolys.length) {\n if (getBboxOverlap(multipolys[i].bbox, subject.bbox) !== null) i++\n else multipolys.splice(i, 1)\n }\n }\n\n /* BBox optimization for intersection operation\n * If we can find any pair of multipolygons whose bbox does not overlap,\n * then the result will be empty. */\n if (operation.type === \"intersection\") {\n // TODO: this is O(n^2) in number of polygons. By sorting the bboxes,\n // it could be optimized to O(n * ln(n))\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const mpA = multipolys[i]\n for (let j = i + 1, jMax = multipolys.length; j < jMax; j++) {\n if (getBboxOverlap(mpA.bbox, multipolys[j].bbox) === null) return []\n }\n }\n }\n\n /* Put segment endpoints in a priority queue */\n const queue = new SplayTreeSet(SweepEvent.compare)\n for (let i = 0, iMax = multipolys.length; i < iMax; i++) {\n const sweepEvents = multipolys[i].getSweepEvents()\n for (let j = 0, jMax = sweepEvents.length; j < jMax; j++) {\n queue.add(sweepEvents[j])\n }\n }\n\n /* Pass the sweep line over those endpoints */\n const sweepLine = new SweepLine(queue)\n let evt = null\n if (queue.size != 0) {\n evt = queue.first()\n queue.delete(evt)\n }\n while (evt) {\n const newEvents = sweepLine.process(evt)\n for (let i = 0, iMax = newEvents.length; i < iMax; i++) {\n const evt = newEvents[i]\n if (evt.consumedBy === undefined) queue.add(evt)\n }\n if (queue.size != 0) {\n evt = queue.first()\n queue.delete(evt)\n } else {\n evt = null;\n }\n }\n\n // free some memory we don't need anymore\n precision.reset()\n\n /* Collect and compile segments we're keeping into a multipolygon */\n const ringsOut = geomOut.RingOut.factory(sweepLine.segments)\n const result = new geomOut.MultiPolyOut(ringsOut)\n return result.getGeom()\n }\n}\n\n// singleton available by import\nconst operation = new Operation()\n\nexport default operation\n","import * as bn from \"bignumber.js\";\n\nexport interface Vector {\n x: bn.BigNumber;\n y: bn.BigNumber;\n}\n\n/* Cross Product of two vectors with first point at origin */\nexport const crossProduct = (a: Vector, b: Vector) => a.x.times(b.y).minus(a.y.times(b.x))\n\n/* Dot Product of two vectors with first point at origin */\nexport const dotProduct = (a: Vector, b: Vector) => a.x.times(b.x).plus(a.y.times(b.y))\n\nexport const length = (v: Vector) => dotProduct(v, v).sqrt()\n\n/* Get the sine of the angle from pShared -> pAngle to pShaed -> pBase */\nexport const sineOfAngle = (pShared: Vector, pBase: Vector, pAngle: Vector) => {\n const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) }\n const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) }\n return crossProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase))\n}\n\n/* Get the cosine of the angle from pShared -> pAngle to pShaed -> pBase */\nexport const cosineOfAngle = (pShared: Vector, pBase: Vector, pAngle: Vector) => {\n const vBase = { x: pBase.x.minus(pShared.x), y: pBase.y.minus(pShared.y) }\n const vAngle = { x: pAngle.x.minus(pShared.x), y: pAngle.y.minus(pShared.y) }\n return dotProduct(vAngle, vBase).div(length(vAngle)).div(length(vBase))\n}\n\n/* Get the x coordinate where the given line (defined by a point and vector)\n * crosses the horizontal line with the given y coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nexport const horizontalIntersection = (pt: Vector, v: Vector, y: bn.BigNumber) => {\n if (v.y.isZero()) return null\n return { x: pt.x.plus((v.x.div(v.y)).times(y.minus(pt.y))), y: y }\n}\n\n/* Get the y coordinate where the given line (defined by a point and vector)\n * crosses the vertical line with the given x coordiante.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nexport const verticalIntersection = (pt: Vector, v: Vector, x: bn.BigNumber) => {\n if (v.x.isZero()) return null\n return { x: x, y: pt.y.plus((v.y.div(v.x)).times(x.minus(pt.x))) }\n}\n\n/* Get the intersection of two lines, each defined by a base point and a vector.\n * In the case of parrallel lines (including overlapping ones) returns null. */\nexport const intersection = (pt1: Vector, v1: Vector, pt2: Vector, v2: Vector) => {\n // take some shortcuts for vertical and horizontal lines\n // this also ensures we don't calculate an intersection and then discover\n // it's actually outside the bounding box of the line\n if (v1.x.isZero()) return verticalIntersection(pt2, v2, pt1.x)\n if (v2.x.isZero()) return verticalIntersection(pt1, v1, pt2.x)\n if (v1.y.isZero()) return horizontalIntersection(pt2, v2, pt1.y)\n if (v2.y.isZero()) return horizontalIntersection(pt1, v1, pt2.y)\n\n // General case for non-overlapping segments.\n // This algorithm is based on Schneider and Eberly.\n // http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - pg 244\n\n const kross = crossProduct(v1, v2)\n if (kross.isZero()) return null\n\n const ve = { x: pt2.x.minus(pt1.x), y: pt2.y.minus(pt1.y) }\n const d1 = crossProduct(ve, v1).div(kross)\n const d2 = crossProduct(ve, v2).div(kross)\n\n // take the average of the two calculations to minimize rounding error\n const x1 = pt1.x.plus(d2.times(v1.x)),\n x2 = pt2.x.plus(d1.times(v2.x))\n const y1 = pt1.y.plus(d2.times(v1.y)),\n y2 = pt2.y.plus(d1.times(v2.y))\n const x = x1.plus(x2).div(2)\n const y = y1.plus(y2).div(2)\n return { x: x, y: y } as Vector\n}\n\n/* Given a vector, return one that is perpendicular */\nexport const perpendicular = (v: Vector) => {\n return { x: v.y.negated(), y: v.x }\n}","import BigNumber from \"bignumber.js\";\nimport Segment from \"./segment.js\"\nimport { cosineOfAngle, sineOfAngle, Vector } from \"./vector.js\"\n\nexport interface Point extends Vector {\n events: SweepEvent[];\n}\n\nexport default class SweepEvent {\n point: Point;\n isLeft: boolean;\n segment!: Segment;\n otherSE!: SweepEvent;\n consumedBy: SweepEvent | undefined;\n\n // for ordering sweep events in the sweep event queue\n static compare(a: SweepEvent, b: SweepEvent) {\n // favor event with a point that the sweep line hits first\n const ptCmp = SweepEvent.comparePoints(a.point, b.point)\n if (ptCmp !== 0) return ptCmp\n\n // the points are the same, so link them if needed\n if (a.point !== b.point) a.link(b)\n\n // favor right events over left\n if (a.isLeft !== b.isLeft) return a.isLeft ? 1 : -1\n\n // we have two matching left or right endpoints\n // ordering of this case is the same as for their segments\n return Segment.compare(a.segment, b.segment)\n }\n\n // for ordering points in sweep line order\n static comparePoints(aPt: Point, bPt: Point) {\n if (aPt.x.isLessThan(bPt.x)) return -1\n if (aPt.x.isGreaterThan(bPt.x)) return 1\n\n if (aPt.y.isLessThan(bPt.y)) return -1\n if (aPt.y.isGreaterThan(bPt.y)) return 1\n\n return 0\n }\n\n // Warning: 'point' input will be modified and re-used (for performance)\n constructor(point: Point, isLeft: boolean) {\n if (point.events === undefined) point.events = [this]\n else point.events.push(this)\n this.point = point\n this.isLeft = isLeft\n // this.segment, this.otherSE set by factory\n }\n\n link(other: SweepEvent) {\n if (other.point === this.point) {\n throw new Error(\"Tried to link already linked events\")\n }\n const otherEvents = other.point.events\n for (let i = 0, iMax = otherEvents.length; i < iMax; i++) {\n const evt = otherEvents[i]\n this.point.events.push(evt)\n evt.point = this.point\n }\n this.checkForConsuming()\n }\n\n /* Do a pass over our linked events and check to see if any pair\n * of segments match, and should be consumed. */\n checkForConsuming() {\n // FIXME: The loops in this method run O(n^2) => no good.\n // Maintain little ordered sweep event trees?\n // Can we maintaining an ordering that avoids the need\n // for the re-sorting with getLeftmostComparator in geom-out?\n\n // Compare each pair of events to see if other events also match\n const numEvents = this.point.events.length\n for (let i = 0; i < numEvents; i++) {\n const evt1 = this.point.events[i]\n if (evt1.segment.consumedBy !== undefined) continue\n for (let j = i + 1; j < numEvents; j++) {\n const evt2 = this.point.events[j]\n if (evt2.consumedBy !== undefined) continue\n if (evt1.otherSE.point.events !== evt2.otherSE.point.events) continue\n evt1.segment.consume(evt2.segment)\n }\n }\n }\n\n getAvailableLinkedEvents() {\n // point.events is always of length 2 or greater\n const events = []\n for (let i = 0, iMax = this.point.events.length; i < iMax; i++) {\n const evt = this.point.events[i]\n if (evt !== this && !evt.segment.ringOut && evt.segment.isInResult()) {\n events.push(evt)\n }\n }\n return events\n }\n\n /**\n * Returns a comparator function for sorting linked events that will\n * favor the event that will give us the smallest left-side angle.\n * All ring construction starts as low as possible heading to the right,\n * so by always turning left as sharp as possible we'll get polygons\n * without uncessary loops & holes.\n *\n * The comparator function has a compute cache such that it avoids\n * re-computing already-computed values.\n */\n getLeftmostComparator(baseEvent: SweepEvent) {\n const cache = new Map<SweepEvent, { sine: BigNumber, cosine: BigNumber }>()\n\n const fillCache = (linkedEvent: SweepEvent) => {\n const nextEvent = linkedEvent.otherSE\n cache.set(linkedEvent, {\n sine: sineOfAngle(this.point, baseEvent.point, nextEvent.point),\n cosine: cosineOfAngle(this.point, baseEvent.point, nextEvent.point),\n })\n }\n\n return (a: SweepEvent, b: SweepEvent) => {\n if (!cache.has(a)) fillCache(a)\n if (!cache.has(b)) fillCache(b)\n\n const { sine: asine, cosine: acosine } = cache.get(a)!\n const { sine: bsine, cosine: bcosine } = cache.get(b)!\n\n // both on or above x-axis\n if (asine.isGreaterThanOrEqualTo(0) && bsine.isGreaterThanOrEqualTo(0)) {\n if (acosine.isLessThan(bcosine)) return 1\n if (acosine.isGreaterThan(bcosine)) return -1\n return 0\n }\n\n // both below x-axis\n if (asine.isLessThan(0) && bsine.isLessThan(0)) {\n if (acosine.isLessThan(bcosine)) return -1\n if (acosine.isGreaterThan(bcosine)) return 1\n return 0\n }\n\n // one above x-axis, one below\n if (bsine.isLessThan(asine)) return -1\n if (bsine.isGreaterThan(asine)) return 1\n return 0\n }\n }\n}\n","import { MultiPoly, Poly, Ring } from \"./geom-in.js\"\nimport { precision } from \"./precision.js\"\nimport Segment from \"./segment.js\"\nimport SweepEvent from \"./sweep-event.js\"\n\nexport class RingOut {\n events: SweepEvent[]\n poly: PolyOut | null\n _isExteriorRing: boolean | undefined\n _enclosingRing: RingOut | null | undefined\n \n /* Given the segments from the sweep line pass, compute & return a series\n * of closed rings from all the segments marked to be part of the result */\n static factory(allSegments: Segment[]) {\n const ringsOut = []\n\n for (let i = 0, iMax = allSegments.length; i < iMax; i++) {\n const segment = allSegments[i]\n if (!segment.isInResult() || segment.ringOut) continue\n\n let prevEvent = null\n let event = segment.leftSE\n let nextEvent = segment.rightSE\n const events = [event]\n\n const startingPoint = event.point\n const intersectionLEs = []\n\n /* Walk the chain of linked events to form a closed ring */\n while (true) {\n prevEvent = event\n event = nextEvent\n events.push(event)\n\n /* Is the ring complete? */\n if (event.point === startingPoint) break\n\n while (true) {\n const availableLEs = event.getAvailableLinkedEvents()\n\n /* Did we hit a dead end? This shouldn't happen. Indicates some earlier\n * part of the algorithm malfunctioned... please file a bug report. */\n if (availableLEs.length === 0) {\n const firstPt = events[0].point\n const lastPt = events[events.length - 1].point\n throw new Error(\n `Unable to complete output ring starting at [${firstPt.x},` +\n ` ${firstPt.y}]. Last matching segment found ends at` +\n ` [${lastPt.x}, ${lastPt.y}].`,\n )\n }\n\n /* Only one way to go, so cotinue on the path */\n if (availableLEs.length === 1) {\n nextEvent = availableLEs[0].otherSE\n break\n }\n\n /* We must have an intersection. Check for a completed loop */\n let indexLE = null\n for (let j = 0, jMax = intersectionLEs.length; j < jMax; j++) {\n if (intersectionLEs[j].point === event.point) {\n indexLE = j\n break\n }\n }\n /* Found a completed loop. Cut that off and make a ring */\n if (indexLE !== null) {\n const intersectionLE = intersectionLEs.splice(indexLE)[0]\n const ringEvents = events.splice(intersectionLE.index)\n ringEvents.unshift(ringEvents[0].otherSE)\n ringsOut.push(new RingOut(ringEvents.reverse()))\n continue\n }\n /* register the intersection */\n intersectionLEs.push({\n index: events.length,\n point: event.point,\n })\n /* Choose the left-most option to continue the walk */\n const comparator = event.getLeftmostComparator(prevEvent)\n nextEvent = availableLEs.sort(comparator)[0].otherSE\n break\n }\n }\n\n ringsOut.push(new RingOut(events))\n }\n return ringsOut\n }\n\n constructor(events: SweepEvent[]) {\n this.events = events\n for (let i = 0, iMax = events.length; i < iMax; i++) {\n events[i].segment.ringOut = this\n }\n this.poly = null\n }\n\n getGeom() {\n // Remove superfluous points (ie extra points along a straight line),\n let prevPt = this.events[0].point\n const points = [prevPt]\n for (let i = 1, iMax = this.events.length - 1; i < iMax; i++) {\n const pt = this.events[i].point\n const nextPt = this.events[i + 1].point\n if (precision.orient(pt, prevPt, nextPt) === 0) continue\n points.push(pt)\n prevPt = pt\n }\n\n // ring was all (within rounding error of angle calc) colinear points\n if (points.length === 1) return null\n\n // check if the starting point is necessary\n const pt = points[0]\n const nextPt = points[1]\n if (precision.orient(pt, prevPt, nextPt) === 0) points.shift()\n\n points.push(points[0])\n const step = this.isExteriorRing() ? 1 : -1\n const iStart = this.isExteriorRing() ? 0 : points.length - 1\n const iEnd = this.isExteriorRing() ? points.length : -1\n const orderedPoints: Ring = []\n for (let i = iStart; i != iEnd; i += step)\n orderedPoints.push([points[i].x.toNumber(), points[i].y.toNumber()])\n return orderedPoints\n }\n\n isExteriorRing(): boolean {\n if (this._isExteriorRing === undefined) {\n const enclosing = this.enclosingRing()\n this._isExteriorRing = enclosing ? !enclosing.isExteriorRing() : true\n }\n return this._isExteriorRing\n }\n\n enclosingRing() {\n if (this._enclosingRing === undefined) {\n this._enclosingRing = this._calcEnclosingRing()\n }\n return this._enclosingRing\n }\n\n /* Returns the ring that encloses this one, if any */\n _calcEnclosingRing(): RingOut | null | undefined {\n // start with the ealier sweep line event so that the prevSeg\n // chain doesn't lead us inside of a loop of ours\n let leftMostEvt = this.events[0]\n for (let i = 1, iMax = this.events.length; i < iMax; i++) {\n const evt = this.events[i]\n if (SweepEvent.compare(leftMostEvt, evt) > 0) leftMostEvt = evt\n }\n\n let prevSeg: Segment | null | undefined = leftMostEvt.segment.prevInResult()\n let prevPrevSeg: Segment | null | undefined = prevSeg ? prevSeg.prevInResult() : null\n\n while (true) {\n // no segment found, thus no ring can enclose us\n if (!prevSeg) return null\n\n // no segments below prev segment found, thus the ring of the prev\n // segment must loop back around and enclose us\n if (!prevPrevSeg) return prevSeg.ringOut\n\n // if the two segments are of different rings, the ring of the prev\n // segment must either loop around us or the ring of the prev prev\n // seg, which would make us and the ring of the prev peers\n if (prevPrevSeg.ringOut !== prevSeg.ringOut) {\n if (prevPrevSeg.ringOut?.enclosingRing() !== prevSeg.ringOut) {\n return prevSeg.ringOut\n } else return prevSeg.ringOut?.enclosingRing()\n }\n\n // two segments are from the same ring, so this was a penisula\n // of that ring. iterate downward, keep searching\n prevSeg = prevPrevSeg.prevInResult()\n prevPrevSeg = prevSeg ? prevSeg.prevInResult() : null\n }\n }\n}\n\nexport class PolyOut {\n exteriorRing: RingOut;\n interiorRings: RingOut[];\n\n constructor(exteriorRing: RingOut) {\n this.exteriorRing = exteriorRing\n exteriorRing.poly = this\n this.interiorRings = []\n }\n\n addInterior(ring: RingOut) {\n this.interiorRings.push(ring)\n ring.poly = this\n }\n\n getGeom() {\n const geom0 = this.exteriorRing.getGeom()\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (geom0 === null) return null\n const geom: Poly = [geom0];\n for (let i = 0, iMax = this.interiorRings.length; i < iMax; i++) {\n const ringGeom = this.interiorRings[i].getGeom()\n // interior ring was all (within rounding error of angle calc) colinear points\n if (ringGeom === null) continue\n geom.push(ringGeom)\n }\n return geom\n }\n}\n\nexport class MultiPolyOut {\n rings: RingOut[];\n polys: PolyOut[];\n\n constructor(rings: RingOut[]) {\n this.rings = rings\n this.polys = this._composePolys(rings)\n }\n\n getGeom() {\n const geom: MultiPoly = []\n for (let i = 0, iMax = this.polys.length; i < iMax; i++) {\n const polyGeom = this.polys[i].getGeom()\n // exterior ring was all (within rounding error of angle calc) colinear points\n if (polyGeom === null) continue\n geom.push(polyGeom)\n }\n return geom\n }\n\n _composePolys(rings: RingOut[]) {\n const polys = []\n for (let i = 0, iMax = rings.length; i < iMax; i++) {\n const ring = rings[i]\n if (ring.poly) continue\n if (ring.isExteriorRing()) polys.push(new PolyOut(ring))\n else {\n const enclosingRing = ring.enclosingRing()\n if (!enclosingRing?.poly) polys.push(new PolyOut(enclosingRing!))\n enclosingRing?.poly?.addInterior(ring)\n }\n }\n return polys\n }\n}\n","import { SplayTreeSet } from \"splaytree-ts\"\nimport Segment from \"./segment.js\"\nimport SweepEvent, { Point } from \"./sweep-event.js\"\n\n/**\n * NOTE: We must be careful not to change any segments while\n * they are in the SplayTree. AFAIK, there's no way to tell\n * the tree to rebalance itself - thus before splitting\n * a segment that's in the tree, we remove it from the tree,\n * do the split, then re-insert it. (Even though splitting a\n * segment *shouldn't* change its correct position in the\n * sweep line tree, the reality is because of rounding errors,\n * it sometimes does.)\n */\n\nexport default class SweepLine {\n private queue: SplayTreeSet<SweepEvent>\n private tree: SplayTreeSet<Segment>\n segments: Segment[]\n\n constructor(queue: SplayTreeSet<SweepEvent>, comparator = Segment.compare) {\n this.queue = queue\n this.tree = new SplayTreeSet(comparator)\n this.segments = []\n }\n\n process(event: SweepEvent) {\n const segment = event.segment\n const newEvents: SweepEvent[] = []\n\n // if we've already been consumed by another segment,\n // clean up our body parts and get out\n if (event.consumedBy) {\n if (event.isLeft) this.queue.delete(event.otherSE)\n else this.tree.delete(segment)\n return newEvents\n }\n\n if (event.isLeft) this.tree.add(segment);\n\n let prevSeg: Segment | null = segment\n let nextSeg: Segment | null = segment\n\n // skip consumed segments still in tree\n do {\n prevSeg = this.tree.lastBefore(prevSeg)\n } while (prevSeg != null && prevSeg.consumedBy != undefined)\n\n // skip consumed segments still in tree\n do {\n nextSeg = this.tree.firstAfter(nextSeg)\n } while (nextSeg != null && nextSeg.consumedBy != undefined)\n\n if (event.isLeft) {\n // Check for intersections against the previous segment in the sweep line\n let prevMySplitter = null\n if (prevSeg) {\n const prevInter = prevSeg.getIntersection(segment)\n if (prevInter !== null) {\n if (!segment.isAnEndpoint(prevInter)) prevMySplitter = prevInter\n if (!prevSeg.isAnEndpoint(prevInter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, prevInter)\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i])\n }\n }\n }\n }\n\n // Check for intersections against the next segment in the sweep line\n let nextMySplitter = null\n if (nextSeg) {\n const nextInter = nextSeg.getIntersection(segment)\n if (nextInter !== null) {\n if (!segment.isAnEndpoint(nextInter)) nextMySplitter = nextInter\n if (!nextSeg.isAnEndpoint(nextInter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, nextInter)\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i])\n }\n }\n }\n }\n\n // For simplicity, even if we find more than one intersection we only\n // spilt on the 'earliest' (sweep-line style) of the intersections.\n // The other intersection will be handled in a future process().\n if (prevMySplitter !== null || nextMySplitter !== null) {\n let mySplitter = null\n if (prevMySplitter === null) mySplitter = nextMySplitter\n else if (nextMySplitter === null) mySplitter = prevMySplitter\n else {\n const cmpSplitters = SweepEvent.comparePoints(\n prevMySplitter,\n nextMySplitter,\n )\n mySplitter = cmpSplitters <= 0 ? prevMySplitter : nextMySplitter\n }\n\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n this.queue.delete(segment.rightSE)\n newEvents.push(segment.rightSE)\n\n const newEventsFromSplit = segment.split(mySplitter!)\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i])\n }\n }\n\n if (newEvents.length > 0) {\n // We found some intersections, so re-do the current event to\n // make sure sweep line ordering is totally consistent for later\n // use with the segment 'prev' pointers\n this.tree.delete(segment)\n newEvents.push(event)\n } else {\n // done with left event\n this.segments.push(segment)\n segment.prev = prevSeg\n }\n } else {\n // event.isRight\n\n // since we're about to be removed from the sweep line, check for\n // intersections between our previous and next segments\n if (prevSeg && nextSeg) {\n const inter = prevSeg.getIntersection(nextSeg)\n if (inter !== null) {\n if (!prevSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(prevSeg, inter)\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i])\n }\n }\n if (!nextSeg.isAnEndpoint(inter)) {\n const newEventsFromSplit = this._splitSafely(nextSeg, inter)\n for (let i = 0, iMax = newEventsFromSplit.length; i < iMax; i++) {\n newEvents.push(newEventsFromSplit[i])\n }\n }\n }\n }\n\n this.tree.delete(segment)\n }\n\n return newEvents\n }\n\n /* Safely split a segment that is currently in the datastructures\n * IE - a segment other than the one that is currently being processed. */\n _splitSafely(seg: Segment, pt: Point) {\n // Rounding errors can cause changes in ordering,\n // so remove afected segments and right sweep events before splitting\n // removeNode() doesn't work, so have re-find the seg\n // https://github.com/w8r/splay-tree/pull/5\n this.tree.delete(seg)\n const rightSE = seg.rightSE\n this.queue.delete(rightSE)\n const newEvents = seg.split(pt)\n newEvents.push(rightSE)\n // splitting can trigger consumption\n if (seg.consumedBy === undefined) this.tree.add(seg)\n return newEvents\n }\n}\n","import { getBboxOverlap, isInBbox } from \"./bbox.js\"\nimport { MultiPolyIn, RingIn } from \"./geom-in.js\"\nimport { RingOut } from \"./geom-out.js\"\nimport operation from \"./operation.js\"\nimport { precision } from \"./precision.js\"\nimport SweepEvent, { Point } from \"./sweep-event.js\"\nimport { intersection } from \"./vector.js\"\n\ninterface State {\n rings: RingIn[],\n windings: number[],\n multiPolys: MultiPolyIn[]\n}\n\n// Give segments unique ID's to get consistent sorting of\n// segments and sweep events when all else is identical\nlet segmentId = 0\n\nexport default class Segment {\n id: number\n leftSE: SweepEvent\n rightSE: SweepEvent\n rings: RingIn[] | null\n windings: number[] | null\n ringOut: RingOut | undefined\n consumedBy: Segment | undefined\n prev: Segment | null | undefined\n _prevInResult: Segment | null | undefined\n _beforeState: State | undefined\n _afterState: State | undefined\n _isInResult: boolean | undefined\n\n /* This compare() function is for ordering segments in the sweep\n * line tree, and does so according to the following criteria:\n *\n * Consider the vertical line that lies an infinestimal step to the\n * right of the right-more of the two left endpoints of the input\n * segments. Imagine slowly moving a point up from negative infinity\n * in the increasing y direction. Which of the two segments will that\n * point intersect first? That segment comes 'before' the other one.\n *\n * If neither segment would be intersected by such a line, (if one\n * or more of the segments are vertical) then the line to be considered\n * is directly on the right-more of the two left inputs.\n */\n static compare(a: Segment, b: Segment) {\n const alx = a.leftSE.point.x\n const blx = b.leftSE.point.x\n const arx = a.rightSE.point.x\n const brx = b.rightSE.point.x\n\n // check if they're even in the same vertical plane\n if (brx.isLessThan(alx)) return 1\n if (arx.isLessThan(blx)) return -1\n\n const aly = a.leftSE.point.y\n const bly = b.leftSE.point.y\n const ary = a.rightSE.point.y\n const bry = b.rightSE.point.y\n\n // is left endpoint of segment B the right-more?\n if (alx.isLessThan(blx)) {\n // are the two segments in the same horizontal plane?\n if (bly.isLessThan(aly) && bly.isLessThan(ary)) return 1\n if (bly.isGreaterThan(aly) && bly.isGreaterThan(ary)) return -1\n\n // is the B left endpoint colinear to segment A?\n const aCmpBLeft = a.comparePoint(b.leftSE.point)\n if (aCmpBLeft < 0) return 1\n if (aCmpBLeft > 0) return -1\n\n // is the A right endpoint colinear to segment B ?\n const bCmpARight = b.comparePoint(a.rightSE.point)\n if (bCmpARight !== 0) return bCmpARight\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return -1\n }\n\n // is left endpoint of segment A the right-more?\n if (alx.isGreaterThan(blx)) {\n if (aly.isLessThan(bly) && aly.isLessThan(bry)) return -1\n if (aly.isGreaterThan(bly) && aly.isGreaterThan(bry)) return 1\n\n // is the A left endpoint colinear to segment B?\n const bCmpALeft = b.comparePoint(a.leftSE.point)\n if (bCmpALeft !== 0) return bCmpALeft\n\n // is the B right endpoint colinear to segment A?\n const aCmpBRight = a.comparePoint(b.rightSE.point)\n if (aCmpBRight < 0) return 1\n if (aCmpBRight > 0) return -1\n\n // colinear segments, consider the one with left-more\n // left endpoint to be first (arbitrary?)\n return 1\n }\n\n // if we get here, the two left endpoints are in the same\n // vertical plane, ie alx === blx\n\n // consider the lower left-endpoint to come first\n if (aly.isLessThan(bly)) return -1\n if (aly.isGreaterThan(bly)) return 1\n\n // left endpoints are identical\n // check for colinearity by using the left-more right endpoint\n\n // is the A right endpoint more left-more?\n if (arx.isLessThan(brx)) {\n const bCmpARight = b.comparePoint(a.rightSE.point)\n if (bCmpARight !== 0) return bCmpARight\n }\n\n // is the B right endpoint more left-more?\n if (arx.isGreaterThan(brx)) {\n const aCmpBRight = a.comparePoint(b.rightSE.point)\n if (aCmpBRight < 0) return 1\n if (aCmpBRight > 0) return -1\n }\n\n if (!arx.eq(brx)) {\n // are these two [almost] vertical segments with opposite orientation?\n // if so, the one with the lower right endpoint comes first\n const ay = ary.minus(aly)\n const ax = arx.minus(alx)\n const by = bry.minus(bly)\n const bx = brx.minus(blx)\n if (ay.isGreaterThan(ax) && by.isLessThan(bx)) return 1\n if (ay.isLessThan(ax) && by.isGreaterThan(bx)) return -1\n }\n\n // we have colinear segments with matching orientation\n // consider the one with more left-more right endpoint to be first\n if (arx.isGreaterThan(brx)) return 1\n if (arx.isLessThan(brx)) return -1\n\n // if we get here, two two right endpoints are in the same\n // vertical plane, ie arx === brx\n\n // consider the lower right-endpoint to come first\n if (ary.isLessThan(bry)) return -1\n if (ary.isGreaterThan(bry)) return 1\n\n // right endpoints identical as well, so the segments are idential\n // fall back on creation order as consistent tie-breaker\n if (a.id < b.id) return -1\n if (a.id > b.id) return 1\n\n // identical segment, ie a === b\n return 0\n }\n\n /* Warning: a reference to ringWindings input will be stored,\n * and possibly will be later modified */\n constructor(leftSE: SweepEvent, rightSE: SweepEvent, rings: RingIn[], windings: number[]) {\n this.id = ++segmentId\n this.leftSE = leftSE\n leftSE.segment = this\n leftSE.otherSE = rightSE\n this.rightSE = rightSE\n rightSE.segment = this\n rightSE.otherSE = leftSE\n this.rings = rings\n this.windings = windings\n // left unset for performance, set later in algorithm\n // this.ringOut, this.consumedBy, this.prev\n }\n\n static fromRing(pt1: Point, pt2: Point, ring: RingIn) {\n let leftPt: Point, rightPt: Point, winding: number\n\n // ordering the two points according to sweep line ordering\n const cmpPts = SweepEvent.comparePoints(pt1, pt2)\n if (cmpPts < 0) {\n leftPt = pt1\n rightPt = pt2\n winding = 1\n } else if (cmpPts > 0) {\n leftPt = pt2\n rightPt = pt1\n winding = -1\n } else\n throw new Error(\n `Tried to create degenerate segment at [${pt1.x}, ${pt1.y}]`,\n )\n\n const leftSE = new SweepEvent(leftPt, true)\n const rightSE = new SweepEvent(rightPt, false)\n return new Segment(leftSE, rightSE, [ring], [winding])\n }\n\n /* When a segment is split, the rightSE is replaced with a new sweep event */\n replaceRightSE(newRightSE: SweepEvent) {\n this.rightSE = newRightSE\n this.rightSE.segment = this\n this.rightSE.otherSE = this.leftSE\n this.leftSE.otherSE = this.rightSE\n }\n\n bbox() {\n const y1 = this.leftSE.point.y\n const y2 = this.rightSE.point.y\n return {\n ll: { x: this.leftSE.point.x, y: y1.isLessThan(y2) ? y1 : y2 },\n ur: { x: this.rightSE.point.x, y: y1.isGreaterThan(y2) ? y1 : y2 },\n }\n }\n\n /* A vector from the left point to the right */\n vector() {\n return {\n x: this.rightSE.point.x.minus(this.leftSE.point.x),\n y: this.rightSE.point.y.minus(this.leftSE.point.y),\n }\n }\n\n isAnEndpoint(pt: Point) {\n return (\n (pt.x.eq(this.leftSE.point.x) && pt.y.eq(this.leftSE.point.y)) ||\n (pt.x.eq(this.rightSE.point.x) && pt.y.eq(this.rightSE.point.y))\n )\n }\n\n /* Compare this segment with a point.\n *\n * A point P is considered to be colinear to a segment if there\n * exists a distance D such that if we travel along the segment\n * from one * endpoint towards the other a distance D, we find\n * ourselves at point P.\n *\n * Return value indicates:\n *\n * 1: point lies above the segment (to the left of vertical)\n * 0: point is colinear to segment\n * -1: point lies below the segment (to the right of vertical)\n */\n comparePoint(point: Point) {\n return precision.orient(this.leftSE.point, point, this.rightSE.point)\n }\n\n /**\n * Given another segment, returns the first non-trivial intersection\n * between the two segments (in terms of sweep line ordering), if it exists.\n *\n * A 'non-trivial' intersection is one that will cause one or both of the\n * segments to be split(). As such, 'trivial' vs. 'non-trivial' intersection:\n *\n * * endpoint of segA with endpoint of segB --> trivial\n * * endpoint of segA with point along segB --> non-trivial\n * * endpoint of segB with point along segA --> non-trivial\n * * point along segA with point along segB --> non-trivial\n *\n * If no non-trivial intersection exists, return null\n * Else, return null.\n */\n getIntersection(other: Segment) {\n // If bboxes don't overlap, there can't be any intersections\n const tBbox = this.bbox()\n const oBbox = other.bbox()\n const bboxOverlap = getBboxOverlap(tBbox, oBbox)\n if (bboxOverlap === null) return null\n\n // We first check to see if the endpoints can be considered intersections.\n // This will 'snap' intersections to endpoints if possible, and will\n // handle cases of colinearity.\n\n const tlp = this.leftSE.point\n const trp = this.rightSE.point\n const olp = other.leftSE.point\n const orp = other.rightSE.point\n\n // does each endpoint touch the other segment?\n // note that we restrict the 'touching' definition to only allow segments\n // to touch endpoints that lie forward from where we are in the sweep line pass\n const touchesOtherLSE = isInBbox(tBbox, olp) && this.comparePoint(olp) === 0\n const touchesThisLSE = isInBbox(oBbox, tlp) && other.comparePoint(tlp) === 0\n const touchesOtherRSE = isInBbox(tBbox, orp) && this.comparePoint(orp) === 0\n const touchesThisRSE = isInBbox(oBbox, trp) && other.comparePoint(trp) === 0\n\n // do left endpoints match?\n if (touchesThisLSE && touchesOtherLSE) {\n // these two cases are for colinear segments with matching left\n // endpoints, and one segment being longer than the other\n if (touchesThisRSE && !touchesOtherRSE) return trp\n if (!touchesThisRSE && touchesOtherRSE) return orp\n // either the two segments match exactly (two trival intersections)\n // or just on their left endpoint (one trivial intersection\n return null\n }\n\n // does this left endpoint matches (other doesn't)\n if (touchesThisLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesOtherRSE) {\n if (tlp.x.eq(orp.x) && tlp.y.eq(orp.y)) return null\n }\n // t-intersection on left endpoint\n return tlp\n }\n\n // does other left endpoint matches (this doesn't)\n if (touchesOtherLSE) {\n // check for segments that just intersect on opposing endpoints\n if (touchesThisRSE) {\n if (trp.x.eq(olp.x) && trp.y.eq(olp.y)) return null\n }\n // t-intersection on left endpoint\n return olp\n }\n\n // trivial intersection on right endpoints\n if (touchesThisRSE && touchesOtherRSE) return null\n\n // t-intersections on just one right endpoint\n if (touchesThisRSE) return trp\n if (touchesOtherRSE) return orp\n\n // None of our endpoints intersect. Look for a general intersection between\n // infinite lines laid over the segments\n const pt = intersection(tlp, this.vector(), olp, other.vector())\n\n // are the segments parrallel? Note that if they were colinear with overlap,\n // they would have an endpoint intersection and that case was already handled above\n if (pt === null) return null\n\n // is the intersection found between the lines not on the segments?\n if (!isInBbox(bboxOverlap, pt)) return null\n\n // round the the computed point if needed\n return precision.snap(pt) as Point\n }\n\n /**\n * Split the given segment into multiple segments on the given points.\n * * Each existing segment will retain its leftSE and a new rightSE will be\n * generated for it.\n * * A new segment will be generated which will adopt the original segment's\n * rightSE, and a new leftSE will be generated for it.\n * * If there are more than two points given to split on, new segments\n * in the middle will be generated with new leftSE and rightSE's.\n * * An array of the newly generated SweepEvents will be returned.\n *\n * Warning: input array of points is modified\n */\n split(point: Point) {\n const newEvents = []\n const alreadyLinked = point.events !== undefined\n\n const newLeftSE = new SweepEvent(point, true)\n const newRightSE = new SweepEvent(point, false)\n const oldRightSE = this.rightSE\n this.replaceRightSE(newRightSE)\n newEvents.push(newRightSE)\n newEvents.push(newLeftSE)\n const newSeg = new Segment(\n newLeftSE,\n oldRightSE,\n this.rings!.slice(),\n this.windings!.slice(),\n )\n\n // when splitting a nearly vertical downward-facing segment,\n // sometimes one of the resulting new segments is vertical, in which\n // case its left and right events may need to be swapped\n if (\n SweepEvent.comparePoints(newSeg.leftSE.point, newSeg.rightSE.point) > 0\n ) {\n newSeg.swapEvents()\n }\n if (SweepEvent.comparePoints(this.leftSE.point, this.rightSE.point) > 0) {\n this.swapEvents()\n }\n\n // in the point we just used to create new sweep events with was already\n // linked to other events, we need to check if either of the affected\n // segments should be consumed\n if (alreadyLinked) {\n newLeftSE.checkForConsuming()\n newRightSE.checkForConsuming()\n }\n\n return newEvents\n }\n\n /* Swap which event is left and right */\n swapEvents() {\n const tmpEvt = this.rightSE\n this.rightSE = this.leftSE\n this.leftSE = tmpEvt\n this.leftSE.isLeft = true\n this.rightSE.isLeft = false\n for (let i = 0, iMax = this.windings!.length; i < iMax; i++) {\n this.windings![i] *= -1\n }\n }\n\n /* Consume another segment. We take their rings under our wing\n * and mark them as consumed. Use for perfectly overlapping segments */\n consume(other: Segment) {\n let consumer = this as Segment\n let consumee = other\n while (consumer.consumedBy) consumer = consumer.consumedBy\n while (consumee.consumedBy) consumee = consumee.consumedBy\n\n const cmp = Segment.compare(consumer, consumee)\n if (cmp === 0) return // already consumed\n // the winner of the consumption is the earlier segment\n // according to sweep line ordering\n if (cmp > 0) {\n const tmp = consumer\n consumer = consumee\n consumee = tmp\n }\n\n // make sure a segment doesn't consume it's prev\n if (consumer.prev === consumee) {\n const tmp = consumer\n consumer = consumee\n consumee = tmp\n }\n\n for (let i = 0, iMax = consumee.rings!.length; i < iMax; i++) {\n const ring = consumee.rings![i]\n const winding = consumee.windings![i]\n const index = consumer.rings!.indexOf(ring)\n if (index === -1) {\n consumer.rings!.push(ring)\n consumer.windings!.push(winding)\n } else consumer.windings![index] += winding\n }\n consumee.rings = null\n consumee.windings = null\n consumee.consumedBy = consumer\n\n // mark sweep events consumed as to maintain ordering in sweep event queue\n consumee.leftSE.consumedBy = consumer.leftSE\n consumee.rightSE.consumedBy = consumer.rightSE\n }\n\n /* The first segment previous segment chain that is in the result */\n prevInResult(): Segment | null | undefined {\n if (this._prevInResult !== undefined) return this._prevInResult\n if (!this.prev) this._prevInResult = null\n else if (this.prev.isInResult()) this._prevInResult = this.prev\n else this._prevInResult = this.prev.prevInResult()\n return this._prevInResult\n }\n\n beforeState(): State {\n if (this._beforeState !== undefined) return this._beforeState\n if (!this.prev)\n this._beforeState = {\n rings: [],\n windings: [],\n multiPolys: [],\n }\n else {\n const seg = this.prev.consumedBy || this.prev\n this._beforeState = seg.afterState()\n }\n return this._beforeState\n }\n\n afterState() {\n if (this._afterState !== undefined) return this._afterState\n\n const beforeState = this.beforeState()\n this._afterState = {\n rings: beforeState.rings.slice(0),\n windings: beforeState.windings.slice(0),\n multiPolys: [],\n }\n const ringsAfter = this._afterState.rings\n const windingsAfter = this._afterState.windings\n const mpsAfter = this._afterState.multiPolys\n\n // calculate ringsAfter, windingsAfter\n for (let i = 0, iMax = this.rings!.length; i < iMax; i++) {\n const ring = this.rings![i]\n const winding = this.windings![i]\n const index = ringsAfter.indexOf(ring)\n if (index === -1) {\n ringsAfter.push(ring)\n windingsAfter.push(winding)\n } else windingsAfter[index] += winding\n }\n\n // calcualte polysAfter\n const polysAfter = []\n const polysExclude = []\n for (let i = 0, iMax = ringsAfter.length; i < iMax; i++) {\n if (windingsAfter[i] === 0) continue // non-zero rule\n const ring = ringsAfter[i]\n const poly = ring.poly\n if (polysExclude.indexOf(poly) !== -1) continue\n if (ring.isExterior) polysAfter.push(poly)\n else {\n if (polysExclude.indexOf(poly) === -1) polysExclude.push(poly)\n const index = polysAfter.indexOf(ring.poly)\n if (index !== -1) polysAfter.splice(index, 1)\n }\n }\n\n // calculate multiPolysAfter\n for (let i = 0, iMax = polysAfter.length; i < iMax; i++) {\n const mp = polysAfter[i].multiPoly\n if (mpsAfter.indexOf(mp) === -1) mpsAfter.push(mp)\n }\n\n return this._afterState\n }\n\n /* Is this segment part of the final result? */\n isInResult() {\n // if we've been consumed, we're not in the result\n if (this.consumedBy) return false\n\n if (this._isInResult !== undefined) return this._isInResult\n\n const mpsBefore = this.beforeState().multiPolys\n const mpsAfter = this.afterState().multiPolys\n\n switch (operation.type) {\n case \"union\": {\n // UNION - included iff:\n // * On one side of us there is 0 poly interiors AND\n // * On the other side there is 1 or more.\n const noBefores = mpsBefore.length === 0\n const noAfters = mpsAfter.length === 0\n this._isInResult = noBefores !== noAfters\n break\n }\n\n case \"intersection\": {\n // INTERSECTION - included iff:\n // * on one side of us all multipolys are rep. with poly interiors AND\n // * on the other side of us, not all multipolys are repsented\n // with poly interiors\n let least\n let most\n if (mpsBefore.length < mpsAfter.length) {\n least = mpsBefore.length\n most = mpsAfter.length\n } else {\n least = mpsAfter.length\n most = mpsBefore.length\n }\n this._isInResult = most === operation.numMultiPolys && least < most\n break\n }\n\n case \"xor\": {\n // XOR - included iff:\n // * the difference between the number of multipolys represented\n // with poly interiors on our two sides is an odd number\n const diff = Math.abs(mpsBefore.length - mpsAfter.length)\n this._isInResult = diff % 2 === 1\n break\n }\n\n case \"difference\": {\n // DIFFERENCE included iff:\n // * on exactly one side, we have just the subject\n const isJustSubject = (mps: MultiPolyIn[]) => mps.length === 1 && mps[0].isSubject\n this._isInResult = isJustSubject(mpsBefore) !== isJustSubject(mpsAfter)\n break\n }\n }\n\n return this._isInResult\n }\n}\n","import { Geom } from \"./geom-in.js\"\nimport { precision } from \"./precision.js\"\nimport operation from \"./operation.js\"\n\nexport { Geom }\n\nexport const union = (geom: Geom, ...moreGeoms: Geom[]) =>\n operation.run(\"union\", geom, moreGeoms)\n\nexport const intersection = (geom: Geom, ...moreGeoms: Geom[]) =>\n operation.run(\"intersection\", geom, moreGeoms)\n\nexport const xor = (geom: Geom, ...moreGeoms: Geom[]) =>\n operation.run(\"xor\", geom, moreGeoms)\n\nexport const difference = (geom: Geom, ...moreGeoms: Geom[]) =>\n operation.run(\"difference\", geom, moreGeoms)\n\nexport const setPrecision = precision.set","import {\n Feature,\n GeoJsonProperties,\n MultiPolygon,\n Polygon,\n FeatureCollection,\n} from \"geojson\";\nimport { multiPolygon, polygon } from \"@turf/helpers\";\nimport { geomEach } from \"@turf/meta\";\nimport * as polyclip from \"polyclip-ts\";\n\n/**\n * Takes {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and\n * finds their polygonal intersection. If they don't intersect, returns null.\n *\n * @function\n * @param {FeatureCollection<Polygon | MultiPolygon>} features the features to intersect\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature\n * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or\n * {@link MultiPolygon}). If they do not share any area, returns `null`.\n * @example\n * var poly1 = turf.polygon([[\n * [-122.801742, 45.48565],\n * [-122.801742, 45.60491],\n * [-122.584762, 45.60491],\n * [-122.584762, 45.48565],\n * [-122.801742, 45.48565]\n * ]]);\n *\n * var poly2 = turf.polygon([[\n * [-122.520217, 45.535693],\n * [-122.64038, 45.553967],\n * [-122.720031, 45.526554],\n * [-122.669906, 45.507309],\n * [-122.723464, 45.446643],\n * [-122.532577, 45.408574],\n * [-122.487258, 45.477466],\n * [-122.520217, 45.535693]\n * ]]);\n *\n * var intersection = turf.intersect(turf.featureCollection([poly1, poly2]));\n *\n * //addToMap\n * var addToMap = [poly1, poly2, intersection];\n */\nfunction intersect<P extends GeoJsonProperties = GeoJsonProperties>(\n features: FeatureCollection<Polygon | MultiPolygon>,\n options: {\n properties?: P;\n } = {}\n): Feature<Polygon | MultiPolygon, P> | null {\n const geoms: polyclip.Geom[] = [];\n\n geomEach(features, (geom) => {\n geoms.push(geom.coordinates as polyclip.Geom);\n });\n\n if (geoms.length < 2) {\n throw new Error(\"Must specify at least 2 geometries\");\n }\n const intersection = polyclip.intersection(geoms[0], ...geoms.slice(1));\n if (intersection.length === 0) return null;\n if (intersection.length === 1)\n return polygon(intersection[0], options.properties);\n return multiPolygon(intersection, options.properties);\n}\n\nexport { intersect };\nexport default intersect;\n","// math.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable no-shadow */ // radians and degrees are common variable names\n\nimport type {NumericArray} from '@math.gl/types';\n\nimport type {MathArray} from '../classes/base/math-array';\n\nconst RADIANS_TO_DEGREES = (1 / Math.PI) * 180;\nconst DEGREES_TO_RADIANS = (1 / 180) * Math.PI;\n\nexport type ConfigurationOptions = {\n EPSILON: number;\n debug?: boolean;\n precision: number;\n printTypes?: boolean;\n printDegrees?: boolean;\n printRowMajor?: boolean;\n _cartographicRadians?: boolean;\n};\n\nconst DEFAULT_CONFIG: Required<ConfigurationOptions> = {\n EPSILON: 1e-12,\n debug: false,\n precision: 4,\n printTypes: false,\n printDegrees: false,\n printRowMajor: true,\n _cartographicRadians: false\n};\n\n// We use a global field to store the config\ndeclare global {\n // eslint-disable-next-line no-var\n var mathgl: {\n config: Required<ConfigurationOptions>;\n };\n}\n\n// Configuration is truly global as of v3.6 to ensure single config even if multiple copies of math.gl\n// Multiple copies of config can be quite tricky to debug...\nglobalThis.mathgl = globalThis.mathgl || {config: {...DEFAULT_CONFIG}};\n\nexport const config = globalThis.mathgl.config;\n\nexport function configure(options: Partial<ConfigurationOptions>): ConfigurationOptions {\n // Only copy existing keys\n Object.assign(config, options);\n return config;\n}\n\n/**\n * Formats a value into a string\n * @param value\n * @param param1\n * @returns\n */\nexport function formatValue(\n value: number,\n {precision = config.precision}: {precision?: number} = {}\n): string {\n value = round(value);\n // get rid of trailing zeros\n return `${parseFloat(value.toPrecision(precision))}`;\n}\n\n/**\n * Check if value is an \"array\"\n * Returns `true` if value is either an array or a typed array\n * Note: returns `false` for `ArrayBuffer` and `DataView` instances\n * @note isTypedArray and isNumericArray are often more useful in TypeScript\n */\nexport function isArray(value: unknown): boolean {\n return Array.isArray(value) || (ArrayBuffer.isView(value) && !(value instanceof DataView));\n}\n\nexport function clone(array: NumericArray | MathArray): NumericArray {\n return 'clone' in array ? array.clone() : array.slice();\n}\n\nexport function toRadians(degrees: number): number;\nexport function toRadians(degrees: NumericArray): NumericArray;\n\nexport function toRadians(degrees: number | NumericArray): number | NumericArray {\n return radians(degrees as NumericArray);\n}\n\nexport function toDegrees(degrees: number): number;\nexport function toDegrees(degrees: NumericArray): NumericArray;\n\nexport function toDegrees(radians: number | NumericArray): number | NumericArray {\n return degrees(radians as NumericArray);\n}\n\n// GLSL math function equivalents - Works on both single values and vectors\n\n/**\n * \"GLSL equivalent\" radians: Works on single values and vectors\n */\nexport function radians(degrees: number): number;\nexport function radians(degrees: NumericArray, result?: NumericArray): NumericArray;\n\nexport function radians(\n degrees: number | NumericArray,\n result?: NumericArray\n): number | NumericArray {\n return map(degrees, (degrees) => degrees * DEGREES_TO_RADIANS, result);\n}\n\n/**\n * \"GLSL equivalent\" degrees: Works on single values and vectors\n */\nexport function degrees(radians: number): number;\nexport function degrees(radians: NumericArray, result?: NumericArray): NumericArray;\n\nexport function degrees(\n radians: number | NumericArray,\n result?: NumericArray\n): number | NumericArray {\n return map(radians, (radians) => radians * RADIANS_TO_DEGREES, result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.sin`: Works on single values and vectors\n * @deprecated\n */\nexport function sin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.sin(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.cos`: Works on single values and vectors\n * @deprecated\n */\nexport function cos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.cos(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.tan`: Works on single values and vectors\n * @deprecated\n */\nexport function tan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.tan(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.asin`: Works on single values and vectors\n * @deprecated\n */\nexport function asin(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.asin(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.acos`: Works on single values and vectors\n * @deprecated\n */\nexport function acos(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.acos(angle), result);\n}\n\n/**\n * \"GLSL equivalent\" of `Math.atan`: Works on single values and vectors\n * @deprecated\n */\nexport function atan(radians: number | NumericArray, result?: NumericArray): number | NumericArray {\n return map(radians, (angle) => Math.atan(angle), result);\n}\n\n/**\n * GLSL style value clamping: Works on single values and vectors\n */\nexport function clamp(value: number, min: number, max: number): number;\nexport function clamp(value: NumericArray, min: number, max: number): NumericArray;\n\nexport function clamp(\n value: number | NumericArray,\n min: number,\n max: number\n): number | NumericArray {\n return map(value, (value) => Math.max(min, Math.min(max, value)));\n}\n\n/**\n * Interpolate between two numbers or two arrays\n */\nexport function lerp(a: number, b: number, t: number): number;\nexport function lerp(a: NumericArray, b: NumericArray, t: number): NumericArray;\n\nexport function lerp(\n a: number | NumericArray,\n b: number | NumericArray,\n t: number\n): number | NumericArray {\n if (isArray(a)) {\n return (a as NumericArray).map((ai: number, i: number) => lerp(ai, (b as NumericArray)[i], t));\n }\n return t * (b as number) + (1 - t) * (a as number);\n}\n\n/* eslint-disable */\n\n/**\n * Compares any two math objects, using `equals` method if available.\n * @param a\n * @param b\n * @param epsilon\n * @returns\n */\nexport function equals(a: any, b: any, epsilon?: number): boolean {\n const oldEpsilon = config.EPSILON;\n if (epsilon) {\n config.EPSILON = epsilon;\n }\n try {\n if (a === b) {\n return true;\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n // eslint-disable-next-line max-depth\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (a && a.equals) {\n return a.equals(b);\n }\n if (b && b.equals) {\n return b.equals(a);\n }\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b) <= config.EPSILON * Math.max(1, Math.abs(a), Math.abs(b));\n }\n return false;\n } finally {\n config.EPSILON = oldEpsilon;\n }\n}\n\nexport function exactEquals(a: any, b: any): boolean {\n if (a === b) {\n return true;\n }\n if (a && typeof a === 'object' && b && typeof b === 'object') {\n if (a.constructor !== b.constructor) {\n return false;\n }\n if (a.exactEquals) {\n return a.exactEquals(b);\n }\n }\n if (isArray(a) && isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; ++i) {\n if (!exactEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\n\n/* eslint-enable */\n\nexport function withEpsilon<T>(epsilon: number, func: () => T): T {\n const oldPrecision = config.EPSILON;\n config.EPSILON = epsilon;\n let value: T;\n try {\n value = func();\n } finally {\n config.EPSILON = oldPrecision;\n }\n return value;\n}\n\n// HELPERS\n\nfunction round(value: number): number {\n return Math.round(value / config.EPSILON) * config.EPSILON;\n}\n\n// If the array has a clone function, calls it, otherwise returns a copy\nfunction duplicateArray(array: NumericArray): NumericArray {\n // @ts-expect-error We check for math.gl class methods\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n return array.clone ? (array.clone() as NumericArray) : (new Array(array.length) as number[]);\n}\n\n// If the argument value is an array, applies the func element wise,\n// otherwise applies func to the argument value\nfunction map(\n value: number | NumericArray,\n func: (x: number, index?: number, resultArray?: NumericArray) => number,\n result?: NumericArray\n): number | NumericArray {\n if (isArray(value)) {\n const array = value as NumericArray;\n result = result || duplicateArray(array);\n for (let i = 0; i < result.length && i < array.length; ++i) {\n const val = typeof value === 'number' ? value : value[i];\n result[i] = func(val, i, result);\n }\n return result;\n }\n return func(value as number);\n}\n","// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(message || '@math.gl/web-mercator: assertion failed.');\n }\n}\n","// TODO - THE UTILITIES IN THIS FILE SHOULD BE IMPORTED FROM WEB-MERCATOR-VIEWPORT MODULE\n\nimport {createMat4, transformVector, clamp, log2} from './math-utils';\n\nimport {mat4, vec2, vec3} from '@math.gl/core';\nimport {assert} from './assert';\n\n// CONSTANTS\nconst PI = Math.PI;\nconst PI_4 = PI / 4;\nconst DEGREES_TO_RADIANS = PI / 180;\nconst RADIANS_TO_DEGREES = 180 / PI;\nconst TILE_SIZE = 512;\n// Average circumference (40075 km equatorial, 40007 km meridional)\nconst EARTH_CIRCUMFERENCE = 40.03e6;\n// Latitude that makes a square world, 2 * atan(E ** PI) - PI / 2\nexport const MAX_LATITUDE = 85.051129;\n\n// Mapbox default altitude\nexport const DEFAULT_ALTITUDE = 1.5;\n\nexport type DistanceScales = {\n unitsPerMeter: number[];\n metersPerUnit: number[];\n unitsPerMeter2?: number[];\n unitsPerDegree: number[];\n degreesPerUnit: number[];\n unitsPerDegree2?: number[];\n};\n\n/**\n * PROJECTION MATRIX PARAMETERS\n *\n * TODO how to document mebers\n * @param fov in radians. fov is variable, depends on pitch and altitude\n * @param aspect width/height\n * @param focalDistance distance at which visual scale factor is 1\n * @param near near clipping plane\n * @param far far clipping plane\n */\ntype ProjectionParameters = {\n fov: number;\n aspect: number;\n focalDistance: number;\n near: number;\n far: number;\n};\n\n/** Logarithimic zoom to linear scale **/\nexport function zoomToScale(zoom: number): number {\n return Math.pow(2, zoom);\n}\n\n/** Linear scale to logarithimic zoom **/\nexport function scaleToZoom(scale: number): number {\n return log2(scale);\n}\n\n/**\n * Project [lng,lat] on sphere onto [x,y] on 512*512 Mercator Zoom 0 tile.\n * Performs the nonlinear part of the web mercator projection.\n * Remaining projection is done with 4x4 matrices which also handles\n * perspective.\n *\n * @param lngLat - [lng, lat] coordinates\n * Specifies a point on the sphere to project onto the map.\n * @return [x,y] coordinates.\n */\nexport function lngLatToWorld(lngLat: number[]): [number, number] {\n const [lng, lat] = lngLat;\n assert(Number.isFinite(lng));\n assert(Number.isFinite(lat) && lat >= -90 && lat <= 90, 'invalid latitude');\n\n const lambda2 = lng * DEGREES_TO_RADIANS;\n const phi2 = lat * DEGREES_TO_RADIANS;\n const x = (TILE_SIZE * (lambda2 + PI)) / (2 * PI);\n const y = (TILE_SIZE * (PI + Math.log(Math.tan(PI_4 + phi2 * 0.5)))) / (2 * PI);\n return [x, y];\n}\n\n/**\n * Unproject world point [x,y] on map onto {lat, lon} on sphere\n *\n * @param xy - array with [x,y] members\n * representing point on projected map plane\n * @return - array with [x,y] of point on sphere.\n * Has toArray method if you need a GeoJSON Array.\n * Per cartographic tradition, lat and lon are specified as degrees.\n */\nexport function worldToLngLat(xy: number[]): [number, number] {\n const [x, y] = xy;\n const lambda2 = (x / TILE_SIZE) * (2 * PI) - PI;\n const phi2 = 2 * (Math.atan(Math.exp((y / TILE_SIZE) * (2 * PI) - PI)) - PI_4);\n return [lambda2 * RADIANS_TO_DEGREES, phi2 * RADIANS_TO_DEGREES];\n}\n\n/**\n * Returns the zoom level that gives a 1 meter pixel at a certain latitude\n * 1 = C*cos(y)/2^z/TILE_SIZE = C*cos(y)/2^(z+9)\n */\nexport function getMeterZoom(options: {latitude: number}): number {\n const {latitude} = options;\n assert(Number.isFinite(latitude));\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return scaleToZoom(EARTH_CIRCUMFERENCE * latCosine) - 9;\n}\n\n/**\n * Calculate the conversion from meter to common units at a given latitude\n * This is a cheaper version of `getDistanceScales`\n * @param latitude center latitude in degrees\n * @returns common units per meter\n */\nexport function unitsPerMeter(latitude: number): number {\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n return TILE_SIZE / EARTH_CIRCUMFERENCE / latCosine;\n}\n\n/**\n * Calculate distance scales in meters around current lat/lon, both for\n * degrees and pixels.\n * In mercator projection mode, the distance scales vary significantly\n * with latitude.\n */\nexport function getDistanceScales(options: {\n latitude: number;\n longitude: number;\n highPrecision?: boolean;\n}): DistanceScales {\n const {latitude, longitude, highPrecision = false} = options;\n assert(Number.isFinite(latitude) && Number.isFinite(longitude));\n\n const worldSize = TILE_SIZE;\n const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);\n\n /**\n * Number of pixels occupied by one degree longitude around current lat/lon:\n unitsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)\n = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)\n unitsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)\n = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)\n */\n const unitsPerDegreeX = worldSize / 360;\n const unitsPerDegreeY = unitsPerDegreeX / latCosine;\n\n /**\n * Number of pixels occupied by one meter around current lat/lon:\n */\n const altUnitsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;\n\n /**\n * LngLat: longitude -> east and latitude -> north (bottom left)\n * UTM meter offset: x -> east and y -> north (bottom left)\n * World space: x -> east and y -> south (top left)\n *\n * Y needs to be flipped when converting delta degree/meter to delta pixels\n */\n const result: DistanceScales = {\n unitsPerMeter: [altUnitsPerMeter, altUnitsPerMeter, altUnitsPerMeter],\n metersPerUnit: [1 / altUnitsPerMeter, 1 / altUnitsPerMeter, 1 / altUnitsPerMeter],\n\n unitsPerDegree: [unitsPerDegreeX, unitsPerDegreeY, altUnitsPerMeter],\n degreesPerUnit: [1 / unitsPerDegreeX, 1 / unitsPerDegreeY, 1 / altUnitsPerMeter]\n };\n\n /**\n * Taylor series 2nd order for 1/latCosine\n f'(a) * (x - a)\n = d(1/cos(lat * DEGREES_TO_RADIANS))/d(lat) * dLat\n = DEGREES_TO_RADIANS * tan(lat * DEGREES_TO_RADIANS) / cos(lat * DEGREES_TO_RADIANS) * dLat\n */\n if (highPrecision) {\n const latCosine2 = (DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS)) / latCosine;\n const unitsPerDegreeY2 = (unitsPerDegreeX * latCosine2) / 2;\n const altUnitsPerDegree2 = (worldSize / EARTH_CIRCUMFERENCE) * latCosine2;\n const altUnitsPerMeter2 = (altUnitsPerDegree2 / unitsPerDegreeY) * altUnitsPerMeter;\n\n result.unitsPerDegree2 = [0, unitsPerDegreeY2, altUnitsPerDegree2];\n result.unitsPerMeter2 = [altUnitsPerMeter2, 0, altUnitsPerMeter2];\n }\n\n // Main results, used for converting meters to latlng deltas and scaling offsets\n return result;\n}\n\n/**\n * Offset a lng/lat position by meterOffset (northing, easting)\n */\nexport function addMetersToLngLat(lngLatZ: number[], xyz: number[]): number[] {\n const [longitude, latitude, z0] = lngLatZ;\n const [x, y, z] = xyz;\n\n // eslint-disable-next-line no-shadow\n const {unitsPerMeter, unitsPerMeter2} = getDistanceScales({\n longitude,\n latitude,\n highPrecision: true\n });\n\n const worldspace = lngLatToWorld(lngLatZ);\n worldspace[0] += x * (unitsPerMeter[0] + unitsPerMeter2[0] * y);\n worldspace[1] += y * (unitsPerMeter[1] + unitsPerMeter2[1] * y);\n\n const newLngLat = worldToLngLat(worldspace);\n const newZ = (z0 || 0) + (z || 0);\n\n return Number.isFinite(z0) || Number.isFinite(z) ? [newLngLat[0], newLngLat[1], newZ] : newLngLat;\n}\n\n/**\n *\n * view and projection matrix creation is intentionally kept compatible with\n * mapbox-gl's implementation to ensure that seamless interoperation\n * with mapbox and react-map-gl. See: https://github.com/mapbox/mapbox-gl-js\n */\nexport function getViewMatrix(options: {\n // Viewport props\n height: number;\n pitch: number;\n bearing: number;\n altitude: number;\n // Pre-calculated parameters\n scale: number;\n center?: number[];\n}): number[] {\n const {\n // Viewport props\n height,\n pitch,\n bearing,\n altitude,\n // Pre-calculated parameters\n scale,\n center\n } = options;\n // VIEW MATRIX: PROJECTS MERCATOR WORLD COORDINATES\n // Note that mercator world coordinates typically need to be flipped\n //\n // Note: As usual, matrix operation orders should be read in reverse\n // since vectors will be multiplied from the right during transformation\n const vm = createMat4();\n\n // Move camera to altitude (along the pitch & bearing direction)\n mat4.translate(vm, vm, [0, 0, -altitude]);\n\n // Rotate by bearing, and then by pitch (which tilts the view)\n mat4.rotateX(vm, vm, -pitch * DEGREES_TO_RADIANS);\n mat4.rotateZ(vm, vm, bearing * DEGREES_TO_RADIANS);\n\n const relativeScale = scale / height;\n mat4.scale(vm, vm, [relativeScale, relativeScale, relativeScale]);\n\n if (center) {\n mat4.translate(vm, vm, vec3.negate([], center));\n }\n\n return vm;\n}\n\n/**\n * Calculates mapbox compatible projection matrix from parameters\n *\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns project parameters object\n */\nexport function getProjectionParameters(options: {\n width: number;\n height: number;\n scale?: number;\n center?: number[];\n offset?: [number, number];\n fovy?: number;\n altitude?: number;\n pitch?: number;\n nearZMultiplier?: number;\n farZMultiplier?: number;\n}): ProjectionParameters {\n const {\n width,\n height,\n altitude,\n pitch = 0,\n offset,\n center,\n scale,\n nearZMultiplier = 1,\n farZMultiplier = 1\n } = options;\n let {fovy = altitudeToFovy(DEFAULT_ALTITUDE)} = options;\n\n // For back-compatibility allow field of view to be\n // derived from altitude\n if (altitude !== undefined) {\n fovy = altitudeToFovy(altitude);\n }\n\n const fovRadians = fovy * DEGREES_TO_RADIANS;\n const pitchRadians = pitch * DEGREES_TO_RADIANS;\n\n // Distance from camera to the target\n const focalDistance = fovyToAltitude(fovy);\n\n let cameraToSeaLevelDistance = focalDistance;\n\n if (center) {\n cameraToSeaLevelDistance += (center[2] * scale) / Math.cos(pitchRadians) / height;\n }\n\n const fovAboveCenter = fovRadians * (0.5 + (offset ? offset[1] : 0) / height);\n\n // Find the distance from the center point to the center top\n // in focal distance units using law of sines.\n const topHalfSurfaceDistance =\n (Math.sin(fovAboveCenter) * cameraToSeaLevelDistance) /\n Math.sin(clamp(Math.PI / 2 - pitchRadians - fovAboveCenter, 0.01, Math.PI - 0.01));\n\n // Calculate z distance of the farthest fragment that should be rendered.\n const furthestDistance =\n Math.sin(pitchRadians) * topHalfSurfaceDistance + cameraToSeaLevelDistance;\n // Matches mapbox limit\n const horizonDistance = cameraToSeaLevelDistance * 10;\n\n // Calculate z value of the farthest fragment that should be rendered.\n const farZ = Math.min(furthestDistance * farZMultiplier, horizonDistance);\n\n return {\n fov: fovRadians,\n aspect: width / height,\n focalDistance,\n near: nearZMultiplier,\n far: farZ\n };\n}\n\n/**\n * CALCULATE PROJECTION MATRIX: PROJECTS FROM CAMERA (VIEW) SPACE TO CLIPSPACE\n *\n * To match mapbox's z buffer:\n * - \\<= 0.28: nearZMultiplier: 0.1, farZmultiplier: 1\n * - \\>= 0.29: nearZMultiplier: 1 / height, farZMultiplier: 1.01\n *\n * @param options Viewport options\n * @param options.width Width of \"viewport\" or window\n * @param options.height Height of \"viewport\" or window\n * @param options.scale Scale at the current zoom\n * @param options.center Offset of the target, vec3 in world space\n * @param options.offset Offset of the focal point, vec2 in screen space\n * @param options.pitch Camera angle in degrees (0 is straight down)\n * @param options.fovy field of view in degrees\n * @param options.altitude if provided, field of view is calculated using `altitudeToFovy()`\n * @param options.nearZMultiplier control z buffer\n * @param options.farZMultiplier control z buffer\n * @returns 4x4 projection matrix\n */\nexport function getProjectionMatrix(options: {\n width: number;\n height: number;\n pitch: number;\n scale?: number;\n center?: number[];\n offset?: [number, number];\n fovy?: number;\n altitude?: number;\n nearZMultiplier: number;\n farZMultiplier: number;\n}): number[] {\n const {fov, aspect, near, far} = getProjectionParameters(options);\n\n const projectionMatrix = mat4.perspective(\n [] as number[],\n fov, // fov in radians\n aspect, // aspect ratio\n near, // near plane\n far // far plane\n );\n\n return projectionMatrix;\n}\n\n/**\n *\n * Convert an altitude to field of view such that the\n * focal distance is equal to the altitude\n *\n * @param altitude - altitude of camera in screen units\n * @return fovy field of view in degrees\n */\nexport function altitudeToFovy(altitude: number): number {\n return 2 * Math.atan(0.5 / altitude) * RADIANS_TO_DEGREES;\n}\n\n/**\n *\n * Convert an field of view such that the\n * focal distance is equal to the altitude\n *\n * @param fovy - field of view in degrees\n * @return altitude altitude of camera in screen units\n */\nexport function fovyToAltitude(fovy: number): number {\n return 0.5 / Math.tan(0.5 * fovy * DEGREES_TO_RADIANS);\n}\n\n/**\n * Project flat coordinates to pixels on screen.\n *\n * @param xyz - flat coordinate on 512*512 Mercator Zoom 0 tile\n * @param pixelProjectionMatrix - projection matrix 4x4\n * @return [x, y, depth] pixel coordinate on screen.\n */\nexport function worldToPixels(xyz: number[], pixelProjectionMatrix: number[]): number[];\n\n// Project flat coordinates to pixels on screen.\nexport function worldToPixels(xyz: number[], pixelProjectionMatrix: number[]): number[] {\n const [x, y, z = 0] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(z));\n\n return transformVector(pixelProjectionMatrix, [x, y, z, 1]);\n}\n\n/**\n * Unproject pixels on screen to flat coordinates.\n *\n * @param xyz - pixel coordinate on screen.\n * @param pixelUnprojectionMatrix - unprojection matrix 4x4\n * @param targetZ - if pixel coordinate does not have a 3rd component (depth),\n * targetZ is used as the elevation plane to unproject onto\n * @return [x, y, Z] flat coordinates on 512*512 Mercator Zoom 0 tile.\n */\nexport function pixelsToWorld(\n xyz: number[],\n pixelUnprojectionMatrix: number[],\n targetZ: number = 0\n): number[] {\n const [x, y, z] = xyz;\n assert(Number.isFinite(x) && Number.isFinite(y), 'invalid pixel coordinate');\n\n if (Number.isFinite(z)) {\n // Has depth component\n const coord = transformVector(pixelUnprojectionMatrix, [x, y, z, 1]);\n return coord;\n }\n\n // since we don't know the correct projected z value for the point,\n // unproject two points to get a line and then find the point on that line with z=0\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, y, 0, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, y, 1, 1]);\n\n const z0 = coord0[2];\n const z1 = coord1[2];\n\n const t = z0 === z1 ? 0 : ((targetZ || 0) - z0) / (z1 - z0);\n return vec2.lerp([] as number[], coord0, coord1, t);\n}\n","/* eslint-disable camelcase */\nimport {vec2} from '@math.gl/core';\nimport type {WebMercatorViewport} from './web-mercator-viewport';\nimport {worldToLngLat} from './web-mercator-utils';\nimport {transformVector} from './math-utils';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\n/*\n * Returns the quad at the intersection of the frustum and the given z plane\n * @param {WebMercatorViewport} viewport\n * @param {Number} z - elevation in meters\n */\nexport function getBounds(viewport: WebMercatorViewport, z: number = 0): number[][] {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const {width, height, unproject} = viewport;\n const unprojectOps = {targetZ: z};\n const bottomLeft = unproject([0, height], unprojectOps);\n const bottomRight = unproject([width, height], unprojectOps);\n let topLeft: number[];\n let topRight: number[];\n\n const halfFov = viewport.fovy\n ? 0.5 * viewport.fovy * DEGREES_TO_RADIANS\n : Math.atan(0.5 / viewport.altitude);\n const angleToGround = (90 - viewport.pitch) * DEGREES_TO_RADIANS;\n // The top plane is parallel to the ground if halfFov == angleToGround\n if (halfFov > angleToGround - 0.01) {\n // intersect with the far plane\n topLeft = unprojectOnFarPlane(viewport, 0, z);\n topRight = unprojectOnFarPlane(viewport, width, z);\n } else {\n // intersect with the top plane\n topLeft = unproject([0, 0], unprojectOps);\n topRight = unproject([width, 0], unprojectOps);\n }\n\n return [bottomLeft, bottomRight, topRight, topLeft];\n}\n\n/*\n * Find a point on the far clipping plane of the viewport\n * @param {WebMercatorViewport} viewport\n * @param {Number} x - projected x in screen space\n * @param {Number} targetZ - the elevation of the point in meters\n */\nfunction unprojectOnFarPlane(viewport: WebMercatorViewport, x: number, targetZ: number): number[] {\n const {pixelUnprojectionMatrix} = viewport;\n const coord0 = transformVector(pixelUnprojectionMatrix, [x, 0, 1, 1]);\n const coord1 = transformVector(pixelUnprojectionMatrix, [x, viewport.height, 1, 1]);\n\n const z = targetZ * viewport.distanceScales.unitsPerMeter[2];\n const t = (z - coord0[2]) / (coord1[2] - coord0[2]);\n const coord = vec2.lerp([], coord0, coord1, t);\n\n const result = worldToLngLat(coord);\n result.push(targetZ);\n return result;\n}\n","import {lngLatToWorld} from '@math.gl/web-mercator';\nimport type {BBox, GeoJsonGeometryTypes, Geometry, Position} from 'geojson';\n\ntype TransformFn = (coordinates: any[], bbox: Position[]) => any[];\n\nconst TRANSFORM_FN: Record<\n Exclude<GeoJsonGeometryTypes, 'GeometryCollection'>,\n TransformFn\n> = {\n Point: transformPoint,\n MultiPoint: transformMultiPoint,\n LineString: transformLineString,\n MultiLineString: transformMultiLineString,\n Polygon: transformPolygon,\n MultiPolygon: transformMultiPolygon,\n};\n\n/**\n * Transform WGS84 coordinates to tile coords.\n * It's the inverse of deck.gl coordinate-transform (https://github.com/visgl/deck.gl/blob/master/modules/geo-layers/src/mvt-layer/coordinate-transform.js)\n *\n * @param geometry - any valid geojson geometry\n * @param bbox - geojson bbox\n */\nexport function transformToTileCoords<T extends Geometry>(\n geometry: T,\n bbox: BBox\n): T {\n const [west, south, east, north] = bbox;\n const nw = projectFlat([west, north]);\n const se = projectFlat([east, south]);\n const projectedBbox = [nw, se];\n\n if (geometry.type === 'GeometryCollection') {\n throw new Error('Unsupported geometry type GeometryCollection');\n }\n\n const transformFn = TRANSFORM_FN[geometry.type];\n const coordinates = transformFn(geometry.coordinates, projectedBbox);\n return {...geometry, coordinates};\n}\n\nfunction transformPoint([pointX, pointY]: Position, [nw, se]: Position[]) {\n const x = inverseLerp(nw[0], se[0], pointX);\n const y = inverseLerp(nw[1], se[1], pointY);\n\n return [x, y];\n}\n\nfunction getPoints(geometry: Position[], bbox: Position[]) {\n return geometry.map((g) => transformPoint(projectFlat(g), bbox));\n}\n\nfunction transformMultiPoint(multiPoint: Position[], bbox: Position[]) {\n return getPoints(multiPoint, bbox);\n}\n\nfunction transformLineString(line: Position[], bbox: Position[]) {\n return getPoints(line, bbox);\n}\n\nfunction transformMultiLineString(\n multiLineString: Position[][],\n bbox: Position[]\n) {\n return multiLineString.map((lineString) =>\n transformLineString(lineString, bbox)\n );\n}\n\nfunction transformPolygon(polygon: Position[][], bbox: Position[]) {\n return polygon.map((polygonRing) => getPoints(polygonRing, bbox));\n}\n\nfunction transformMultiPolygon(multiPolygon: Position[][][], bbox: Position[]) {\n return multiPolygon.map((polygon) => transformPolygon(polygon, bbox));\n}\n\nfunction projectFlat(xyz: Position): Position {\n return lngLatToWorld(xyz);\n}\n\nfunction inverseLerp(a: number, b: number, x: number): number {\n return (x - a) / (b - a);\n}\n","import {lerp} from '@math.gl/core';\nimport {lngLatToWorld, worldToLngLat} from '@math.gl/web-mercator';\nimport type {BBox, GeoJsonGeometryTypes, Geometry, Position} from 'geojson';\n\ntype TransformFn = (coordinates: any[], bbox: Position[]) => any[];\n\nconst TRANSFORM_FN: Record<\n Exclude<GeoJsonGeometryTypes, 'GeometryCollection'>,\n TransformFn\n> = {\n Point: transformPoint,\n MultiPoint: transformMultiPoint,\n LineString: transformLineString,\n MultiLineString: transformMultiLineString,\n Polygon: transformPolygon,\n MultiPolygon: transformMultiPolygon,\n};\n\n/**\n * Transform tile coords to WGS84 coordinates.\n *\n * @param geometry - any valid geojson geometry\n * @param bbox - geojson bbox\n */\nexport function transformTileCoordsToWGS84<T extends Geometry>(\n geometry: T,\n bbox: BBox\n): T {\n const [west, south, east, north] = bbox;\n const nw = lngLatToWorld([west, north]);\n const se = lngLatToWorld([east, south]);\n const projectedBbox = [nw, se];\n\n if (geometry.type === 'GeometryCollection') {\n throw new Error('Unsupported geometry type GeometryCollection');\n }\n\n const transformFn = TRANSFORM_FN[geometry.type];\n const coordinates = transformFn(geometry.coordinates, projectedBbox);\n return {...geometry, coordinates};\n}\n\nfunction transformPoint([pointX, pointY]: Position, [nw, se]: Position[]) {\n const x = lerp(nw[0], se[0], pointX);\n const y = lerp(nw[1], se[1], pointY);\n\n return worldToLngLat([x, y]);\n}\n\nfunction getPoints(geometry: Position[], bbox: Position[]) {\n return geometry.map((g) => transformPoint(g, bbox));\n}\n\nfunction transformMultiPoint(multiPoint: Position[], bbox: Position[]) {\n return getPoints(multiPoint, bbox);\n}\n\nfunction transformLineString(line: Position[], bbox: Position[]) {\n return getPoints(line, bbox);\n}\n\nfunction transformMultiLineString(\n multiLineString: Position[][],\n bbox: Position[]\n) {\n return multiLineString.map((lineString) =>\n transformLineString(lineString, bbox)\n );\n}\n\nfunction transformPolygon(polygon: Position[][], bbox: Position[]) {\n return polygon.map((polygonRing) => getPoints(polygonRing, bbox));\n}\n\nfunction transformMultiPolygon(multiPolygon: Position[][][], bbox: Position[]) {\n return multiPolygon.map((polygon) => transformPolygon(polygon, bbox));\n}\n","import bboxPolygon from '@turf/bbox-polygon';\nimport intersects from '@turf/boolean-intersects';\nimport booleanWithin from '@turf/boolean-within';\nimport intersect from '@turf/intersect';\nimport {transformToTileCoords} from '../utils/transformToTileCoords.js';\nimport {transformTileCoordsToWGS84} from '../utils/transformTileCoordsToWGS84.js';\nimport {TileFormat} from '../constants.js';\nimport type {\n BBox,\n Feature,\n Geometry,\n LineString,\n MultiPolygon,\n Point,\n Polygon,\n Position,\n} from 'geojson';\nimport type {SpatialFilter, Tile} from '../types.js';\nimport {featureCollection} from '@turf/helpers';\nimport type {FeatureData} from '../types-internal.js';\nimport type {\n BinaryAttribute,\n BinaryFeature,\n BinaryGeometryType,\n BinaryLineFeature,\n BinaryPointFeature,\n BinaryPolygonFeature,\n TypedArrayConstructor,\n} from '@loaders.gl/schema';\n\nexport const FEATURE_GEOM_PROPERTY = '__geomValue';\n\ntype TileMap = Map<unknown, unknown>;\n\ntype TileDataInternal = {\n uniqueId: string | number | undefined;\n properties: any;\n numericProps: Record<string, number>;\n};\n\ntype GeometryExtractOptions = {\n storeGeometry?: boolean;\n};\n\nexport function tileFeaturesGeometries({\n tiles,\n tileFormat,\n spatialFilter,\n uniqueIdProperty,\n options,\n}: {\n tiles: Tile[];\n tileFormat?: TileFormat;\n spatialFilter: SpatialFilter;\n uniqueIdProperty?: string;\n options?: GeometryExtractOptions;\n}): FeatureData[] {\n const map = new Map();\n\n for (const tile of tiles) {\n // Discard if it's not a visible tile (only check false value, not undefined)\n // or tile has not data\n if (tile.isVisible === false || !tile.data) {\n continue;\n }\n\n const bbox = [\n tile.bbox.west,\n tile.bbox.south,\n tile.bbox.east,\n tile.bbox.north,\n ] as BBox;\n const bboxToGeom = bboxPolygon(bbox);\n const tileIsFullyVisible = booleanWithin(bboxToGeom, spatialFilter);\n\n // Clip the geometry to intersect with the tile\n const spatialFilterFeature: Feature<Polygon | MultiPolygon> = {\n type: 'Feature',\n geometry: spatialFilter,\n properties: {},\n };\n const clippedGeometryToIntersect = intersect(\n featureCollection([bboxToGeom, spatialFilterFeature])\n );\n\n if (!clippedGeometryToIntersect) {\n continue;\n }\n\n // We assume that MVT tileFormat uses local coordinates so we transform the geometry to intersect to tile coordinates [0..1],\n // while in the case of 'geojson' or binary, the geometries are already in WGS84\n const transformedGeometryToIntersect =\n tileFormat === TileFormat.MVT\n ? transformToTileCoords(clippedGeometryToIntersect.geometry, bbox)\n : clippedGeometryToIntersect.geometry;\n\n calculateFeatures({\n map,\n tileIsFullyVisible,\n geometryIntersection: transformedGeometryToIntersect,\n data: tile.data.points!,\n type: 'Point',\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n });\n calculateFeatures({\n map,\n tileIsFullyVisible,\n geometryIntersection: transformedGeometryToIntersect,\n data: tile.data.lines!,\n type: 'LineString',\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n });\n calculateFeatures({\n map,\n tileIsFullyVisible,\n geometryIntersection: transformedGeometryToIntersect,\n data: tile.data.polygons!,\n type: 'Polygon',\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n });\n }\n return Array.from(map.values());\n}\n\nfunction processTileFeatureProperties({\n map,\n data,\n startIndex,\n endIndex,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n storeGeometry,\n geometryIntersection,\n}: {\n map: TileMap;\n data: BinaryFeature;\n startIndex: number;\n endIndex: number;\n type: BinaryGeometryType;\n bbox: BBox;\n tileFormat?: TileFormat;\n uniqueIdProperty?: string;\n storeGeometry: boolean;\n geometryIntersection?: Geometry;\n}) {\n const tileProps = getPropertiesFromTile(data, startIndex);\n const uniquePropertyValue = getUniquePropertyValue(\n tileProps,\n uniqueIdProperty,\n map\n );\n\n if (!uniquePropertyValue || map.has(uniquePropertyValue)) {\n return;\n }\n let geometry: Geometry | null = null;\n\n // Only calculate geometry if necessary\n if (storeGeometry || geometryIntersection) {\n const {positions} = data;\n const ringCoordinates = getRingCoordinatesFor(\n startIndex,\n endIndex,\n positions\n );\n geometry = getFeatureByType(ringCoordinates, type);\n }\n\n // If intersection is required, check before proceeding\n if (\n geometry &&\n geometryIntersection &&\n !intersects(geometry, geometryIntersection)\n ) {\n return;\n }\n\n const properties = parseProperties(tileProps);\n\n // Only save geometry if necessary\n if (storeGeometry && geometry) {\n properties[FEATURE_GEOM_PROPERTY] =\n tileFormat === TileFormat.MVT\n ? transformTileCoordsToWGS84(geometry, bbox)\n : geometry;\n }\n map.set(uniquePropertyValue, properties);\n}\n\nfunction addIntersectedFeaturesInTile({\n map,\n data,\n geometryIntersection,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n}: {\n map: TileMap;\n data: BinaryFeature;\n geometryIntersection: Geometry;\n type: BinaryGeometryType;\n bbox: BBox;\n tileFormat?: TileFormat;\n uniqueIdProperty?: string;\n options?: GeometryExtractOptions;\n}) {\n const indices = getIndices(data, type);\n const storeGeometry = options?.storeGeometry || false;\n\n for (let i = 0; i < indices.length - 1; i++) {\n const startIndex = indices[i];\n const endIndex = indices[i + 1];\n processTileFeatureProperties({\n map,\n data,\n startIndex,\n endIndex,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n storeGeometry,\n geometryIntersection,\n });\n }\n}\n\n// Despite TypeScript, 'data.type' is OPTIONAL. So 'type' must be passed in\n// separately. Observed missing .type for Redshift tilesets, 2025-04-09.\nfunction getIndices(data: BinaryFeature, type: BinaryGeometryType) {\n let indices: BinaryAttribute;\n switch (type) {\n case 'Polygon':\n indices = (data as BinaryPolygonFeature).primitivePolygonIndices;\n break;\n case 'LineString':\n indices = (data as BinaryLineFeature).pathIndices;\n break;\n case 'Point':\n indices = createIndicesForPoints(data as BinaryPointFeature);\n break;\n default:\n throw new Error(\n `Unsupported geometry type: ${type as unknown as string}`\n );\n }\n return indices.value;\n}\n\nfunction getFeatureId(data: BinaryFeature, startIndex: number) {\n return data.featureIds.value[startIndex];\n}\n\nfunction getPropertiesFromTile(data: BinaryFeature, startIndex: number) {\n const featureId = getFeatureId(data, startIndex);\n const {properties, numericProps, fields} = data;\n const result: TileDataInternal = {\n uniqueId: (fields?.[featureId] as {id: string | number})?.id,\n properties: properties[featureId],\n numericProps: {},\n };\n\n for (const key in numericProps) {\n result.numericProps[key] = numericProps[key].value[startIndex];\n }\n\n return result;\n}\n\nfunction parseProperties(tileProps: TileDataInternal) {\n const {properties, numericProps} = tileProps;\n return Object.assign({}, properties, numericProps);\n}\n\nfunction getUniquePropertyValue(\n tileProps: TileDataInternal,\n uniqueIdProperty: string | undefined,\n map: TileMap\n) {\n if (uniqueIdProperty) {\n return getValueFromTileProps(tileProps, uniqueIdProperty);\n }\n\n if (tileProps.uniqueId) {\n return tileProps.uniqueId;\n }\n\n const artificialId = map.size + 1; // a counter, assumed as a valid new id\n return (\n getValueFromTileProps(tileProps, 'cartodb_id') ||\n getValueFromTileProps(tileProps, 'geoid') ||\n artificialId\n );\n}\n\nfunction getValueFromTileProps(\n tileProps: TileDataInternal,\n propertyName: string\n) {\n const {properties, numericProps} = tileProps;\n return numericProps[propertyName] || properties[propertyName];\n}\n\nfunction getFeatureByType(\n coordinates: Position[],\n type: BinaryGeometryType\n): Polygon | LineString | Point {\n switch (type) {\n case 'Polygon':\n return {type: 'Polygon', coordinates: [coordinates]};\n case 'LineString':\n return {type: 'LineString', coordinates};\n case 'Point':\n return {type: 'Point', coordinates: coordinates[0]};\n default:\n throw new Error('Invalid geometry type');\n }\n}\n\nfunction getRingCoordinatesFor(\n startIndex: number,\n endIndex: number,\n positions: BinaryAttribute\n) {\n const ringCoordinates = [];\n\n for (let j = startIndex; j < endIndex; j++) {\n ringCoordinates.push(\n Array.from(\n positions.value.subarray(j * positions.size, (j + 1) * positions.size)\n )\n );\n }\n\n return ringCoordinates;\n}\n\nfunction calculateFeatures({\n map,\n tileIsFullyVisible,\n geometryIntersection,\n data,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n}: {\n map: TileMap;\n tileIsFullyVisible: boolean;\n geometryIntersection: SpatialFilter;\n data: BinaryFeature;\n type: BinaryGeometryType;\n bbox: BBox;\n tileFormat?: TileFormat;\n uniqueIdProperty?: string;\n options?: GeometryExtractOptions;\n}) {\n if (!data?.properties.length) {\n return;\n }\n\n if (tileIsFullyVisible) {\n addAllFeaturesInTile({\n map,\n data,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n });\n } else {\n addIntersectedFeaturesInTile({\n map,\n data,\n geometryIntersection,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n });\n }\n}\n\nfunction addAllFeaturesInTile({\n map,\n data,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n options,\n}: {\n map: TileMap;\n data: BinaryFeature;\n type: BinaryGeometryType;\n bbox: BBox;\n tileFormat?: TileFormat;\n uniqueIdProperty?: string;\n options?: GeometryExtractOptions;\n}) {\n const indices = getIndices(data, type);\n const storeGeometry = options?.storeGeometry || false;\n for (let i = 0; i < indices.length - 1; i++) {\n const startIndex = indices[i];\n const endIndex = indices[i + 1];\n processTileFeatureProperties({\n map,\n data,\n startIndex,\n endIndex,\n type,\n bbox,\n tileFormat,\n uniqueIdProperty,\n storeGeometry,\n });\n }\n}\n\n/**\n * BinaryPointFeature does not include indices, so we generate in-memory\n * indices to allow processing points similarly to other topologies.\n */\nfunction createIndicesForPoints(data: BinaryPointFeature): BinaryAttribute {\n const featureIds = data.featureIds.value;\n const lastFeatureId = featureIds[featureIds.length - 1];\n const PointIndicesArray = featureIds.constructor as TypedArrayConstructor;\n\n const pointIndices: BinaryAttribute = {\n value: new PointIndicesArray(featureIds.length + 1),\n size: 1,\n };\n pointIndices.value.set(featureIds);\n pointIndices.value.set([lastFeatureId + 1], featureIds.length);\n return pointIndices;\n}\n","// a tile is an array [x,y,z]\nvar d2r = Math.PI / 180,\n r2d = 180 / Math.PI;\n\nfunction tileToBBOX (tile) {\n var e = tile2lon(tile[0]+1,tile[2]);\n var w = tile2lon(tile[0],tile[2]);\n var s = tile2lat(tile[1]+1,tile[2]);\n var n = tile2lat(tile[1],tile[2]);\n return [w,s,e,n];\n}\n\nfunction tileToGeoJSON (tile) {\n var bbox = tileToBBOX(tile);\n var poly = {\n type: 'Polygon',\n coordinates:\n [\n [\n [bbox[0],bbox[1]],\n [bbox[0], bbox[3]],\n [bbox[2], bbox[3]],\n [bbox[2], bbox[1]],\n [bbox[0], bbox[1]]\n ]\n ]\n };\n return poly;\n}\n\nfunction tile2lon(x, z) {\n return (x/Math.pow(2,z)*360-180);\n}\n\nfunction tile2lat(y, z) {\n var n=Math.PI-2*Math.PI*y/Math.pow(2,z);\n return (r2d*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));\n}\n\nfunction pointToTile(lon, lat, z) {\n var tile = pointToTileFraction(lon, lat, z);\n tile[0] = Math.floor(tile[0]);\n tile[1] = Math.floor(tile[1]);\n return tile;\n}\n\nfunction getChildren (tile) {\n return [\n [tile[0]*2, tile[1]*2, tile[2]+1],\n [tile[0]*2+1, tile[1]*2, tile[2 ]+1],\n [tile[0]*2+1, tile[1]*2+1, tile[2]+1],\n [tile[0]*2, tile[1]*2+1, tile[2]+1],\n ];\n}\n\nfunction getParent (tile) {\n // top left\n if(tile[0]%2===0 && tile[1]%2===0) {\n return [tile[0]/2, tile[1]/2, tile[2]-1];\n }\n // bottom left\n else if((tile[0]%2===0) && (!tile[1]%2===0)) {\n return [tile[0]/2, (tile[1]-1)/2, tile[2]-1];\n }\n // top right\n else if((!tile[0]%2===0) && (tile[1]%2===0)) {\n return [(tile[0]-1)/2, (tile[1])/2, tile[2]-1];\n }\n // bottom right\n else {\n return [(tile[0]-1)/2, (tile[1]-1)/2, tile[2]-1];\n }\n}\n\nfunction getSiblings (tile) {\n return getChildren(getParent(tile));\n}\n\nfunction hasSiblings(tile, tiles) {\n var siblings = getSiblings(tile);\n for (var i = 0; i < siblings.length; i++) {\n if (!hasTile(tiles, siblings[i])) return false;\n }\n return true;\n}\n\nfunction hasTile(tiles, tile) {\n for (var i = 0; i < tiles.length; i++) {\n if (tilesEqual(tiles[i], tile)) return true;\n }\n return false;\n}\n\nfunction tilesEqual(tile1, tile2) {\n return (\n tile1[0] === tile2[0] &&\n tile1[1] === tile2[1] &&\n tile1[2] === tile2[2]\n );\n}\n\nfunction tileToQuadkey(tile) {\n var index = '';\n for (var z = tile[2]; z > 0; z--) {\n var b = 0;\n var mask = 1 << (z - 1);\n if ((tile[0] & mask) !== 0) b++;\n if ((tile[1] & mask) !== 0) b += 2;\n index += b.toString();\n }\n return index;\n}\n\nfunction quadkeyToTile(quadkey) {\n var x = 0;\n var y = 0;\n var z = quadkey.length;\n\n for (var i = z; i > 0; i--) {\n var mask = 1 << (i - 1);\n switch (quadkey[z - i]) {\n case '0':\n break;\n\n case '1':\n x |= mask;\n break;\n\n case '2':\n y |= mask;\n break;\n\n case '3':\n x |= mask;\n y |= mask;\n break;\n }\n }\n return [x,y,z];\n}\n\nfunction bboxToTile(bboxCoords) {\n var min = pointToTile(bboxCoords[0], bboxCoords[1], 32);\n var max = pointToTile(bboxCoords[2], bboxCoords[3], 32);\n var bbox = [min[0], min[1], max[0], max[1]];\n\n var z = getBboxZoom(bbox);\n if (z === 0) return [0,0,0];\n var x = bbox[0] >>> (32 - z);\n var y = bbox[1] >>> (32 - z);\n return [x,y,z];\n}\n\nfunction getBboxZoom(bbox) {\n var MAX_ZOOM = 28;\n for (var z = 0; z < MAX_ZOOM; z++) {\n var mask = 1 << (32 - (z + 1));\n if (((bbox[0] & mask) != (bbox[2] & mask)) ||\n ((bbox[1] & mask) != (bbox[3] & mask))) {\n return z;\n }\n }\n\n return MAX_ZOOM;\n}\n\nfunction pointToTileFraction(lon, lat, z) {\n var sin = Math.sin(lat * d2r),\n z2 = Math.pow(2, z),\n x = z2 * (lon / 360 + 0.5),\n y = z2 * (0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI);\n return [x, y, z];\n}\n\nmodule.exports = {\n tileToGeoJSON: tileToGeoJSON,\n tileToBBOX: tileToBBOX,\n getChildren: getChildren,\n getParent: getParent,\n getSiblings: getSiblings,\n hasTile: hasTile,\n hasSiblings: hasSiblings,\n tilesEqual: tilesEqual,\n tileToQuadkey: tileToQuadkey,\n quadkeyToTile: quadkeyToTile,\n pointToTile: pointToTile,\n bboxToTile: bboxToTile,\n pointToTileFraction: pointToTileFraction\n};\n","var tilebelt = require('tilebelt');\n\n/**\n * Given a geometry, create cells and return them in a format easily readable\n * by any software that reads GeoJSON.\n *\n * @alias geojson\n * @param {Object} geom GeoJSON geometry\n * @param {Object} limits an object with min_zoom and max_zoom properties\n * specifying the minimum and maximum level to be tiled.\n * @returns {Object} FeatureCollection of cells formatted as GeoJSON Features\n */\nexports.geojson = function (geom, limits) {\n return {\n type: 'FeatureCollection',\n features: getTiles(geom, limits).map(tileToFeature)\n };\n};\n\nfunction tileToFeature(t) {\n return {\n type: 'Feature',\n geometry: tilebelt.tileToGeoJSON(t),\n properties: {}\n };\n}\n\n/**\n * Given a geometry, create cells and return them in their raw form,\n * as an array of cell identifiers.\n *\n * @alias tiles\n * @param {Object} geom GeoJSON geometry\n * @param {Object} limits an object with min_zoom and max_zoom properties\n * specifying the minimum and maximum level to be tiled.\n * @returns {Array<Array<number>>} An array of tiles given as [x, y, z] arrays\n */\nexports.tiles = getTiles;\n\n/**\n * Given a geometry, create cells and return them as\n * [quadkey](http://msdn.microsoft.com/en-us/library/bb259689.aspx) indexes.\n *\n * @alias indexes\n * @param {Object} geom GeoJSON geometry\n * @param {Object} limits an object with min_zoom and max_zoom properties\n * specifying the minimum and maximum level to be tiled.\n * @returns {Array<String>} An array of tiles given as quadkeys.\n */\nexports.indexes = function (geom, limits) {\n return getTiles(geom, limits).map(tilebelt.tileToQuadkey);\n};\n\nfunction getTiles(geom, limits) {\n var i, tile,\n coords = geom.coordinates,\n maxZoom = limits.max_zoom,\n tileHash = {},\n tiles = [];\n\n if (geom.type === 'Point') {\n return [tilebelt.pointToTile(coords[0], coords[1], maxZoom)];\n\n } else if (geom.type === 'MultiPoint') {\n for (i = 0; i < coords.length; i++) {\n tile = tilebelt.pointToTile(coords[i][0], coords[i][1], maxZoom);\n tileHash[toID(tile[0], tile[1], tile[2])] = true;\n }\n } else if (geom.type === 'LineString') {\n lineCover(tileHash, coords, maxZoom);\n\n } else if (geom.type === 'MultiLineString') {\n for (i = 0; i < coords.length; i++) {\n lineCover(tileHash, coords[i], maxZoom);\n }\n } else if (geom.type === 'Polygon') {\n polygonCover(tileHash, tiles, coords, maxZoom);\n\n } else if (geom.type === 'MultiPolygon') {\n for (i = 0; i < coords.length; i++) {\n polygonCover(tileHash, tiles, coords[i], maxZoom);\n }\n } else {\n throw new Error('Geometry type not implemented');\n }\n\n if (limits.min_zoom !== maxZoom) {\n // sync tile hash and tile array so that both contain the same tiles\n var len = tiles.length;\n appendHashTiles(tileHash, tiles);\n for (i = 0; i < len; i++) {\n var t = tiles[i];\n tileHash[toID(t[0], t[1], t[2])] = true;\n }\n return mergeTiles(tileHash, tiles, limits);\n }\n\n appendHashTiles(tileHash, tiles);\n return tiles;\n}\n\nfunction mergeTiles(tileHash, tiles, limits) {\n var mergedTiles = [];\n\n for (var z = limits.max_zoom; z > limits.min_zoom; z--) {\n\n var parentTileHash = {};\n var parentTiles = [];\n\n for (var i = 0; i < tiles.length; i++) {\n var t = tiles[i];\n\n if (t[0] % 2 === 0 && t[1] % 2 === 0) {\n var id2 = toID(t[0] + 1, t[1], z),\n id3 = toID(t[0], t[1] + 1, z),\n id4 = toID(t[0] + 1, t[1] + 1, z);\n\n if (tileHash[id2] && tileHash[id3] && tileHash[id4]) {\n tileHash[toID(t[0], t[1], t[2])] = false;\n tileHash[id2] = false;\n tileHash[id3] = false;\n tileHash[id4] = false;\n\n var parentTile = [t[0] / 2, t[1] / 2, z - 1];\n\n if (z - 1 === limits.min_zoom) mergedTiles.push(parentTile);\n else {\n parentTileHash[toID(t[0] / 2, t[1] / 2, z - 1)] = true;\n parentTiles.push(parentTile);\n }\n }\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n t = tiles[i];\n if (tileHash[toID(t[0], t[1], t[2])]) mergedTiles.push(t);\n }\n\n tileHash = parentTileHash;\n tiles = parentTiles;\n }\n\n return mergedTiles;\n}\n\nfunction polygonCover(tileHash, tileArray, geom, zoom) {\n var intersections = [];\n\n for (var i = 0; i < geom.length; i++) {\n var ring = [];\n lineCover(tileHash, geom[i], zoom, ring);\n\n for (var j = 0, len = ring.length, k = len - 1; j < len; k = j++) {\n var m = (j + 1) % len;\n var y = ring[j][1];\n\n // add interesction if it's not local extremum or duplicate\n if ((y > ring[k][1] || y > ring[m][1]) && // not local minimum\n (y < ring[k][1] || y < ring[m][1]) && // not local maximum\n y !== ring[m][1]) intersections.push(ring[j]);\n }\n }\n\n intersections.sort(compareTiles); // sort by y, then x\n\n for (i = 0; i < intersections.length; i += 2) {\n // fill tiles between pairs of intersections\n y = intersections[i][1];\n for (var x = intersections[i][0] + 1; x < intersections[i + 1][0]; x++) {\n var id = toID(x, y, zoom);\n if (!tileHash[id]) {\n tileArray.push([x, y, zoom]);\n }\n }\n }\n}\n\nfunction compareTiles(a, b) {\n return (a[1] - b[1]) || (a[0] - b[0]);\n}\n\nfunction lineCover(tileHash, coords, maxZoom, ring) {\n var prevX, prevY;\n\n for (var i = 0; i < coords.length - 1; i++) {\n var start = tilebelt.pointToTileFraction(coords[i][0], coords[i][1], maxZoom),\n stop = tilebelt.pointToTileFraction(coords[i + 1][0], coords[i + 1][1], maxZoom),\n x0 = start[0],\n y0 = start[1],\n x1 = stop[0],\n y1 = stop[1],\n dx = x1 - x0,\n dy = y1 - y0;\n\n if (dy === 0 && dx === 0) continue;\n\n var sx = dx > 0 ? 1 : -1,\n sy = dy > 0 ? 1 : -1,\n x = Math.floor(x0),\n y = Math.floor(y0),\n tMaxX = dx === 0 ? Infinity : Math.abs(((dx > 0 ? 1 : 0) + x - x0) / dx),\n tMaxY = dy === 0 ? Infinity : Math.abs(((dy > 0 ? 1 : 0) + y - y0) / dy),\n tdx = Math.abs(sx / dx),\n tdy = Math.abs(sy / dy);\n\n if (x !== prevX || y !== prevY) {\n tileHash[toID(x, y, maxZoom)] = true;\n if (ring && y !== prevY) ring.push([x, y]);\n prevX = x;\n prevY = y;\n }\n\n while (tMaxX < 1 || tMaxY < 1) {\n if (tMaxX < tMaxY) {\n tMaxX += tdx;\n x += sx;\n } else {\n tMaxY += tdy;\n y += sy;\n }\n tileHash[toID(x, y, maxZoom)] = true;\n if (ring && y !== prevY) ring.push([x, y]);\n prevX = x;\n prevY = y;\n }\n }\n\n if (ring && y === ring[0][1]) ring.pop();\n}\n\nfunction appendHashTiles(hash, tiles) {\n var keys = Object.keys(hash);\n for (var i = 0; i < keys.length; i++) {\n tiles.push(fromID(+keys[i]));\n }\n}\n\nfunction toID(x, y, z) {\n var dim = 2 * (1 << z);\n return ((dim * y + x) * 32) + z;\n}\n\nfunction fromID(id) {\n var z = id % 32,\n dim = 2 * (1 << z),\n xy = ((id - z) / 32),\n x = xy % dim,\n y = ((xy - x) / dim) % dim;\n return [x, y, z];\n}\n","import {tiles} from '@mapbox/tile-cover';\nimport {worldToLngLat} from '@math.gl/web-mercator';\nimport type {Polygon} from 'geojson';\n\nconst B = [\n 0x5555555555555555n,\n 0x3333333333333333n,\n 0x0f0f0f0f0f0f0f0fn,\n 0x00ff00ff00ff00ffn,\n 0x0000ffff0000ffffn,\n 0x00000000ffffffffn\n];\nconst S = [0n, 1n, 2n, 4n, 8n, 16n];\n\ntype Quadbin = bigint;\ntype Tile = {x: number; y: number; z: number};\n\nconst TILE_SIZE = 512;\n\nexport function cellToOffset(quadbin: Quadbin): [number, number, number] {\n const {x, y, z} = cellToTile(quadbin);\n const scale = TILE_SIZE / (1 << z);\n return [x * scale, TILE_SIZE - y * scale, scale];\n}\n\nexport function cellToWorldBounds(quadbin: Quadbin, coverage: number): [number[], number[]] {\n const [xOffset, yOffset, scale] = cellToOffset(quadbin);\n return [\n [xOffset, yOffset],\n [xOffset + coverage * scale, yOffset - coverage * scale]\n ];\n}\n\nexport function getCellPolygon(quadbin: Quadbin, coverage = 1): number[] {\n const [topLeft, bottomRight] = cellToWorldBounds(quadbin, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n\nexport function hexToBigInt(hex: string): bigint {\n return BigInt(`0x${hex}`);\n}\n\nexport function bigIntToHex(index: bigint): string {\n return index.toString(16);\n}\n\nexport function tileToCell(tile: Tile): Quadbin {\n if (tile.z < 0 || tile.z > 26) {\n throw new Error('Wrong zoom');\n }\n const z = BigInt(tile.z);\n let x = BigInt(tile.x) << (32n - z);\n let y = BigInt(tile.y) << (32n - z);\n\n for (let i = 0; i < 5; i++) {\n const s = S[5 - i];\n const b = B[4 - i];\n x = (x | (x << s)) & b;\n y = (y | (y << s)) & b;\n }\n\n const quadbin =\n 0x4000000000000000n |\n (1n << 59n) | // | (mode << 59) | (mode_dep << 57)\n (z << 52n) |\n ((x | (y << 1n)) >> 12n) |\n (0xfffffffffffffn >> (z * 2n));\n return quadbin;\n}\n\nexport function cellToTile(quadbin: Quadbin): Tile {\n const mode = (quadbin >> 59n) & 7n;\n const modeDep = (quadbin >> 57n) & 3n;\n const z = (quadbin >> 52n) & 0x1fn;\n const q = (quadbin & 0xfffffffffffffn) << 12n;\n\n if (mode !== 1n && modeDep !== 0n) {\n throw new Error('Wrong mode');\n }\n\n let x = q;\n let y = q >> 1n;\n\n for (let i = 0; i < 6; i++) {\n const s = S[i];\n const b = B[i];\n x = (x | (x >> s)) & b;\n y = (y | (y >> s)) & b;\n }\n\n x = x >> (32n - z);\n y = y >> (32n - z);\n\n return {z: Number(z), x: Number(x), y: Number(y)};\n}\n\nexport function getResolution(quadbin: Quadbin): bigint {\n return (quadbin >> 52n) & 0x1fn;\n}\n\nexport function cellToParent(quadbin: Quadbin): Quadbin {\n const zparent = getResolution(quadbin) - 1n;\n const parent =\n (quadbin & ~(0x1fn << 52n)) | (zparent << 52n) | (0xfffffffffffffn >> (zparent * 2n));\n return parent;\n}\n\n/**\n * Returns the children of a cell.\n *\n * @privateRemarks Order of the child cells would, preferably, be\n * row-major starting from NW and ending at SE.\n */\nexport function cellToChildren(quadbin: Quadbin, resolution: bigint): Quadbin[] {\n if (resolution < 0 || resolution > 26 || resolution < getResolution(quadbin)) {\n throw new Error('Invalid resolution');\n }\n\n const zoomLevelMask = ~(0x1fn << 52n);\n const blockRange = 1n << ((resolution - ((quadbin >> 52n) & 0x1fn)) << 1n);\n const sqrtBlockRange = 1n << (resolution - ((quadbin >> 52n) & 0x1fn));\n const blockShift = 52n - (resolution << 1n);\n\n const childBase =\n ((quadbin & zoomLevelMask) | (resolution << 52n)) & ~((blockRange - 1n) << blockShift);\n\n const children: Quadbin[] = [];\n for (let blockRow = 0n; blockRow < sqrtBlockRange; blockRow++) {\n for (let blockColumn = 0n; blockColumn < sqrtBlockRange; blockColumn++) {\n children.push(childBase | ((blockRow * sqrtBlockRange + blockColumn) << blockShift));\n }\n }\n\n return children;\n}\n\nexport function geometryToCells(geometry, resolution: bigint): Quadbin[] {\n const zoom = Number(resolution);\n return tiles(geometry, {\n min_zoom: zoom,\n max_zoom: zoom\n }).map(([x, y, z]) => tileToCell({x, y, z}));\n}\n\nexport function cellToBoundary(cell: Quadbin): Polygon {\n const bbox = getCellPolygon(cell);\n const boundary = [\n [bbox[0], bbox[1]],\n [bbox[2], bbox[3]],\n [bbox[4], bbox[5]],\n [bbox[6], bbox[7]],\n [bbox[0], bbox[1]]\n ];\n\n return {type: 'Polygon', coordinates: [boundary]};\n}\n","import {\n BBox,\n Feature,\n LineString,\n MultiLineString,\n MultiPolygon,\n GeoJsonProperties,\n Polygon,\n} from \"geojson\";\n\nimport {\n lineString,\n multiLineString,\n multiPolygon,\n polygon,\n} from \"@turf/helpers\";\nimport { getGeom } from \"@turf/invariant\";\nimport { lineclip, polygonclip } from \"./lib/lineclip.js\";\n\n/**\n * Takes a {@link Feature} and a bbox and clips the feature to the bbox using\n * [lineclip](https://github.com/mapbox/lineclip).\n * May result in degenerate edges when clipping Polygons.\n *\n * @function\n * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox\n * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature\n * @example\n * var bbox = [0, 0, 10, 10];\n * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);\n *\n * var clipped = turf.bboxClip(poly, bbox);\n *\n * //addToMap\n * var addToMap = [bbox, poly, clipped]\n */\nfunction bboxClip<\n G extends Polygon | MultiPolygon | LineString | MultiLineString,\n P extends GeoJsonProperties = GeoJsonProperties,\n>(feature: Feature<G, P> | G, bbox: BBox) {\n const geom = getGeom(feature);\n const type = geom.type;\n const properties = feature.type === \"Feature\" ? feature.properties : {};\n let coords: any[] = geom.coordinates;\n\n switch (type) {\n case \"LineString\":\n case \"MultiLineString\": {\n const lines: any[] = [];\n if (type === \"LineString\") {\n coords = [coords];\n }\n coords.forEach((line) => {\n lineclip(line, bbox, lines);\n });\n if (lines.length === 1) {\n return lineString(lines[0], properties);\n }\n return multiLineString(lines, properties);\n }\n case \"Polygon\":\n return polygon(clipPolygon(coords, bbox), properties);\n case \"MultiPolygon\":\n return multiPolygon(\n coords.map((poly) => {\n return clipPolygon(poly, bbox);\n }),\n properties\n );\n default:\n throw new Error(\"geometry \" + type + \" not supported\");\n }\n}\n\nfunction clipPolygon(rings: number[][][], bbox: BBox) {\n const outRings = [];\n for (const ring of rings) {\n const clipped = polygonclip(ring, bbox);\n if (clipped.length > 0) {\n if (\n clipped[0][0] !== clipped[clipped.length - 1][0] ||\n clipped[0][1] !== clipped[clipped.length - 1][1]\n ) {\n clipped.push(clipped[0]);\n }\n if (clipped.length >= 4) {\n outRings.push(clipped);\n }\n }\n }\n return outRings;\n}\n\nexport { bboxClip };\nexport default bboxClip;\n","// Cohen-Sutherland line clipping algorithm, adapted to efficiently\n// handle polylines rather than just segments\nimport { BBox } from \"geojson\";\n\nexport function lineclip(\n points: number[][],\n bbox: BBox,\n result?: number[][][]\n): number[][][] {\n var len = points.length,\n codeA = bitCode(points[0], bbox),\n part = [] as number[][],\n i,\n codeB,\n lastCode;\n let a: number[];\n let b: number[];\n\n if (!result) result = [];\n\n for (i = 1; i < len; i++) {\n a = points[i - 1];\n b = points[i];\n codeB = lastCode = bitCode(b, bbox);\n\n while (true) {\n if (!(codeA | codeB)) {\n // accept\n part.push(a);\n\n if (codeB !== lastCode) {\n // segment went outside\n part.push(b);\n\n if (i < len - 1) {\n // start a new line\n result.push(part);\n part = [];\n }\n } else if (i === len - 1) {\n part.push(b);\n }\n break;\n } else if (codeA & codeB) {\n // trivial reject\n break;\n } else if (codeA) {\n // a outside, intersect with clip edge\n a = intersect(a, b, codeA, bbox)!;\n codeA = bitCode(a, bbox);\n } else {\n // b outside\n b = intersect(a, b, codeB, bbox)!;\n codeB = bitCode(b, bbox);\n }\n }\n\n codeA = lastCode;\n }\n\n if (part.length) result.push(part);\n\n return result;\n}\n\n// Sutherland-Hodgeman polygon clipping algorithm\n\nexport function polygonclip(points: number[][], bbox: BBox): number[][] {\n var result: number[][], edge, prev, prevInside, i, p, inside;\n\n // clip against each side of the clip rectangle\n for (edge = 1; edge <= 8; edge *= 2) {\n result = [];\n prev = points[points.length - 1];\n prevInside = !(bitCode(prev, bbox) & edge);\n\n for (i = 0; i < points.length; i++) {\n p = points[i];\n inside = !(bitCode(p, bbox) & edge);\n\n // if segment goes through the clip window, add an intersection\n if (inside !== prevInside) result.push(intersect(prev, p, edge, bbox)!);\n\n if (inside) result.push(p); // add a point if it's inside\n\n prev = p;\n prevInside = inside;\n }\n\n points = result;\n\n if (!points.length) break;\n }\n\n return result!;\n}\n\n// intersect a segment against one of the 4 lines that make up the bbox\n\nfunction intersect(\n a: number[],\n b: number[],\n edge: number,\n bbox: BBox\n): number[] | null {\n return edge & 8\n ? [a[0] + ((b[0] - a[0]) * (bbox[3] - a[1])) / (b[1] - a[1]), bbox[3]] // top\n : edge & 4\n ? [a[0] + ((b[0] - a[0]) * (bbox[1] - a[1])) / (b[1] - a[1]), bbox[1]] // bottom\n : edge & 2\n ? [bbox[2], a[1] + ((b[1] - a[1]) * (bbox[2] - a[0])) / (b[0] - a[0])] // right\n : edge & 1\n ? [bbox[0], a[1] + ((b[1] - a[1]) * (bbox[0] - a[0])) / (b[0] - a[0])] // left\n : null;\n}\n\n// bit code reflects the point position relative to the bbox:\n\n// left mid right\n// top 1001 1000 1010\n// mid 0001 0000 0010\n// bottom 0101 0100 0110\n\nfunction bitCode(p: number[], bbox: BBox) {\n var code = 0;\n\n if (p[0] < bbox[0]) code |= 1;\n // left\n else if (p[0] > bbox[2]) code |= 2; // right\n\n if (p[1] < bbox[1]) code |= 4;\n // bottom\n else if (p[1] > bbox[3]) code |= 8; // top\n\n return code;\n}\n","// @ts-nocheck\n\nvar libh3 = (\nfunction(libh3) {\n libh3 = libh3 || {};\n\nvar Module=typeof libh3!==\"undefined\"?libh3:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram=\"./this.program\";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_HAS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_HAS_NODE=typeof process===\"object\"&&typeof process.versions===\"object\"&&typeof process.versions.node===\"string\";ENVIRONMENT_IS_NODE=ENVIRONMENT_HAS_NODE&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;read_=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename)}return binary?ret:ret.toString()};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process[\"argv\"].length>1){thisProgram=process[\"argv\"][1].replace(/\\\\/g,\"/\")}arguments_=process[\"argv\"].slice(2);quit_=function(status){process[\"exit\"](status)};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f))}data=read(f,\"binary\");assert(typeof data===\"object\");return data};if(typeof scriptArgs!=\"undefined\"){arguments_=scriptArgs}else if(typeof arguments!=\"undefined\"){arguments_=arguments}if(typeof quit===\"function\"){quit_=function(status){quit(status)}}if(typeof print!==\"undefined\"){if(typeof console===\"undefined\")console={};console.log=print;console.warn=console.error=typeof printErr!==\"undefined\"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!==\"undefined\" && document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf(\"/\")+1)}else{scriptDirectory=\"\"}read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};setWindowTitle=function(title){document.title=title}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];if(Module[\"quit\"])quit_=Module[\"quit\"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end>_emscripten_get_heap_size()){abort()}HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0,\"getNativeTypeSize invalid bits \"+bits+\", type \"+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args))}else{return Module[\"dynCall_\"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var wasmBinary;if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];var noExitRuntime;if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type)}}function getValue(ptr,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":return HEAP8[ptr>>0];case\"i8\":return HEAP8[ptr>>0];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP32[ptr>>2];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];default:abort(\"invalid type for getValue: \"+type)}return null}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text)}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={\"string\":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},\"array\":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\")return UTF8ToString(ret);if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)stackRestore(stack);return ret}function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var numericArgs=argTypes.every(function(type){return type===\"number\"});var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var ALLOC_NONE=3;var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str=\"\";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\"}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module[\"HEAP8\"]=HEAP8=new Int8Array(buf);Module[\"HEAP16\"]=HEAP16=new Int16Array(buf);Module[\"HEAP32\"]=HEAP32=new Int32Array(buf);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buf);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buf);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buf);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buf);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=24160,DYNAMIC_BASE=5267040,DYNAMICTOP_PTR=24128;var INITIAL_TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||33554432;if(Module[\"buffer\"]){buffer=Module[\"buffer\"]}else{buffer=new ArrayBuffer(INITIAL_TOTAL_MEMORY)}INITIAL_TOTAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func)}else{Module[\"dynCall_vi\"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}var tempDouble;var tempI64;memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAAQAAAAQAAAADAAAABgAAAAUAAAACAAAAAAAAAAIAAAADAAAAAQAAAAQAAAAGAAAAAAAAAAUAAAADAAAABgAAAAQAAAAFAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAAAAAAAAIAAAADAAAAAQAAAAUAAAACAAAAAAAAAAEAAAADAAAABgAAAAQAAAAGAAAAAAAAAAUAAAACAAAAAQAAAAQAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAAAAAAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAYAAAAAAAAABQAAAAAAAAAAAAAABAAAAAUAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAMAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAAEAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABQAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAYAAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAYAAAAAAAAAAwAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFAAAABAAAAAAAAAABAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAgAAAAQAAAADAAAACAAAAAEAAAAHAAAABgAAAAkAAAAAAAAAAwAAAAIAAAACAAAA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AAAAAAAAAAAFAAAAAQAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAAAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAABQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAEAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAFAAAABQAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAAAAAD/////AwAAAAAAAAAFAAAAAgAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAADAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAADAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAA/////wMAAAAAAAAABQAAAAIAAAAAAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAwAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAwAAAAUAAAABAAAAAAAAAP////8DAAAAAAAAAAUAAAACAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABAAAAAUAAAABAAAAAAAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAIAAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAADAAAAAQAAAAAAAAABAAAAAAAAAAUAAAAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAD/////AQAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAUAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAEAAAD//////////wEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAAAAAAAAAAABAAAAAgAAAAYAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAAFAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAACAAAAAAAAAAAAAAABAAAAAwAAAAcAAAAGAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADgAAAAIAAAAAAAAAAAAAAAEAAAAAAAAACQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAMAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAIAAAAAAAAAAAAAAAEAAAAEAAAACAAAAAoAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAAAAAAAAAAAAQAAAAsAAAAPAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAgAAAAAAAAAAAAAAAQAAAAwAAAAQAAAADAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAADwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAAAAAAAAAAAABAAAACgAAABMAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAAAAAAAAAAAAAEAAAANAAAAEQAAAA0AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAABAAAADgAAABIAAAAPAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATAAAAAgAAAAAAAAAAAAAAAQAAAP//////////EwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAEgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAASAAAAAAAAABgAAAAAAAAAIQAAAAAAAAAeAAAAAAAAACAAAAADAAAAMQAAAAEAAAAwAAAAAwAAADIAAAADAAAACAAAAAAAAAAFAAAABQAAAAoAAAAFAAAAFgAAAAAAAAAQAAAAAAAAABIAAAAAAAAAKQAAAAEAAAAhAAAAAAAAAB4AAAAAAAAABAAAAAAAAAAAAAAABQAAAAIAAAAFAAAADwAAAAEAAAAIAAAAAAAAAAUAAAAFAAAAHwAAAAEAAAAWAAAAAAAAABAAAAAAAAAAAgAAAAAAAAAGAAAAAAAAAA4AAAAAAAAACgAAAAAAAAALAAAAAAAAABEAAAADAAAAGAAAAAEAAAAXAAAAAwAAABkAAAADAAAAAAAAAAAAAAABAAAABQAAAAkAAAAFAAAABQAAAAAAAAACAAAAAAAAAAYAAAAAAAAAEgAAAAEAAAAKAAAAAAAAAAsAAAAAAAAABAAAAAEAAAADAAAABQAAAAcAAAAFAAAACAAAAAEAAAAAAAAAAAAAAAEAAAAFAAAAEAAAAAEAAAAFAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAVAAAAAAAAACYAAAAAAAAACQAAAAAAAAATAAAAAAAAACIAAAADAAAADgAAAAEAAAAUAAAAAwAAACQAAAADAAAAAwAAAAAAAAANAAAABQAAAB0AAAAFAAAAAQAAAAAAAAAHAAAAAAAAABUAAAAAAAAABgAAAAEAAAAJAAAAAAAAABMAAAAAAAAABAAAAAIAAAAMAAAA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Zhu25b633D8c1YgmzowSQNM25BRKWARArGS08/lNxD+LFssHwmMRQLC5aNcxBgJABL9HT0WRF0CjCmJmOGEOQHsuaVzMP/s/TWJCaGGwBUCeu1PAPLzjP9nqN9DZOBNAKE4JcydbCkCGtbd1qjPzP8dgm9U8jhVAtPeKTkVwDkCeCLss5l37P401XMPLmBdAFd29VMVQDUBg0yA55h75Pz6odcYLCRdApBM4rBrkAkDyAVWgQxbRP4XDMnK20hFAymLlF7EmzD8GUgo9XBHlP3lbK7T9COc/k+OhPthhy7+YGEpnrOvCPzBFhLs15u4/epbqB6H4uz9IuuLF5svev6lzLKY31es/CaQ0envF5z8ZY0xlUADXv7zaz7HYEuI/CfbK1sn16T8uAQfWwxLWPzKn/YuFN94/5KdbC1AFu793fyCSnlfvPzK2y4doAMY/NRg5t1/X6b/shq4QJaHDP5yNIAKPOeI/vpn7BSE30r/X4YQrO6nrv78Ziv/Thto/DqJ1Y6+y5z9l51NaxFrlv8QlA65HOLS/86dxiEc96z+Hj0+LFjneP6LzBZ8LTc2/DaJ1Y6+y579l51NaxFrlP8QlA65HOLQ/8qdxiEc967+Jj0+LFjnev6LzBZ8LTc0/1qdbC1AFuz93fyCSnlfvvzK2y4doAMa/NRg5t1/X6T/vhq4QJaHDv5yNIAKPOeK/wJn7BSE30j/W4YQrO6nrP78Ziv/Thtq/CaQ0envF578XY0xlUADXP7zaz7HYEuK/CvbK1sn16b8rAQfWwxLWvzKn/YuFN96/zWLlF7EmzL8GUgo9XBHlv3lbK7T9COe/kOOhPthhyz+cGEpnrOvCvzBFhLs15u6/c5bqB6H4u79IuuLF5sveP6lzLKY31eu/AQAAAP////8HAAAA/////zEAAAD/////VwEAAP////9hCQAA/////6dBAAD/////kcsBAP/////3kAwA/////8H2VwAAAAAAAAAAAAAAAAACAAAA/////w4AAAD/////YgAAAP////+uAgAA/////8ISAAD/////ToMAAP////8ilwMA/////+4hGQD/////gu2vAAAAAAAAAAAAAAAAAAAAAAACAAAA//////////8BAAAAAwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////////////////////AQAAAAAAAAACAAAA////////////////AwAAAP//////////////////////////////////////////////////////////AgAAAP//////////AQAAAAAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD/////////////////////AQAAAP///////////////wIAAAD///////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAD///////////////8CAAAAAQAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8BAAAAAgAAAP///////////////wAAAAD/////////////////////AwAAAP///////////////////////////////wIAAAD///////////////8BAAAA/////////////////////wAAAAD/////////////////////AwAAAP////////////////////////////////////////////////////8DAAAA/////////////////////wAAAAABAAAA//////////8CAAAA//////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAA////////////////AgAAAAAAAAABAAAA//////////////////////////////////////////////////////////////////////////8DAAAAAQAAAP//////////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAAAAAAIAAAABAAAAAQAAAAIAAAACAAAAAAAAAAUAAAAFAAAAAAAAAAIAAAACAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAEAAAACAAAAAgAAAAIAAAAAAAAABQAAAAYAAAAAAAAAAgAAAAIAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAACAAAAAQAAAAMAAAACAAAAAgAAAAAAAAAFAAAABwAAAAAAAAACAAAAAgAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAAAAAAIAAAABAAAABAAAAAIAAAACAAAAAAAAAAUAAAAIAAAAAAAAAAIAAAACAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAAAAAAAgAAAAEAAAAAAAAAAgAAAAIAAAAAAAAABQAAAAkAAAAAAAAAAgAAAAIAAAADAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAgAAAAIAAAAAAAAAAwAAAA4AAAACAAAAAAAAAAIAAAADAAAAAAAAAAAAAAACAAAAAgAAAAMAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAACAAAAAgAAAAAAAAADAAAACgAAAAIAAAAAAAAAAgAAAAMAAAABAAAAAAAAAAIAAAACAAAAAwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAACAAAAAAAAAAMAAAALAAAAAgAAAAAAAAACAAAAAwAAAAIAAAAAAAAAAgAAAAIAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAgAAAAIAAAAAAAAAAwAAAAwAAAACAAAAAAAAAAIAAAADAAAAAwAAAAAAAAACAAAAAgAAAAMAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAACAAAAAgAAAAAAAAADAAAADQAAAAIAAAAAAAAAAgAAAAMAAAAEAAAAAAAAAAIAAAACAAAAAwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAIAAAACAAAAAAAAAAMAAAAGAAAAAgAAAAAAAAACAAAAAwAAAA8AAAAAAAAAAgAAAAIAAAADAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAgAAAAIAAAAAAAAAAwAAAAcAAAACAAAAAAAAAAIAAAADAAAAEAAAAAAAAAACAAAAAgAAAAMAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAACAAAAAgAAAAAAAAADAAAACAAAAAIAAAAAAAAAAgAAAAMAAAARAAAAAAAAAAIAAAACAAAAAwAAAA0AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAIAAAACAAAAAAAAAAMAAAAJAAAAAgAAAAAAAAACAAAAAwAAABIAAAAAAAAAAgAAAAIAAAADAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAgAAAAIAAAAAAAAAAwAAAAUAAAACAAAAAAAAAAIAAAADAAAAEwAAAAAAAAACAAAAAgAAAAMAAAAPAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACAAAAAAAAAAIAAAABAAAAEwAAAAIAAAACAAAAAAAAAAUAAAAKAAAAAAAAAAIAAAACAAAAAwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAIAAAAAAAAAAgAAAAEAAAAPAAAAAgAAAAIAAAAAAAAABQAAAAsAAAAAAAAAAgAAAAIAAAADAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAgAAAAAAAAACAAAAAQAAABAAAAACAAAAAgAAAAAAAAAFAAAADAAAAAAAAAACAAAAAgAAAAMAAAASAAAAAAAAAAAAAAAAAAAAAAAAABMAAAACAAAAAAAAAAIAAAABAAAAEQAAAAIAAAACAAAAAAAAAAUAAAANAAAAAAAAAAIAAAACAAAAAwAAABMAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAIAAAAAAAAAAgAAAAEAAAASAAAAAgAAAAIAAAAAAAAABQAAAA4AAAAAAAAAAgAAAAIAAAADAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAAAAAAAAAAAAAIAAAABAAAAAAAAAAEAAAACAAAAAQAAAAAAAAACAAAAAAAAAAUAAAAEAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAQAAAAAAAAABQAAAAAAAAACAAAAAQAAAAAAAAABAAAAAgAAAAAAAAAAAAAAAgAAAAEAAAAAAAAAAQAAAAIAAAABAAAAAAAAAAIAAAACAAAAAAAAAAEAAAAAAAAAAAAAAAUAAAAEAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAFAAAABAAAAAAAAAABAAAABQAAAAQAAAAAAAAABQAAAAUAAAAAAAAAAQAAAAAAAAAAAAAAOgehWlKfUEEz1zLi+JsiQa2og3wcMfVAWCbHorc0yEDi+Yn/Y6mbQJ11/mfsnG9At6bnG4UQQkBvMCQWKqUUQJVmwwswmOc/3hVgVBL3uj//qqOEOdGOPw/WDN4gnGE/H3ANkCUgND+AA8btKgAHPwTXBqJVSdo+XfRQAqsKrj4fc+zLYbSPQklEmCZHv2FCUP+uDso1NEKYtPhwphUHQptxnyFXYdpB7CddZAMmrkGAt1AxSTqBQUibBVdTsFNBSuX3MV+AJkFocv82SLf5QAqmgj7AY81A23VDSEnLoEDGEJVSeDFzQDYrqvBk70VA8U157pcRGUBWfEF+ZKbsP7KBdLHZTpFAqKYk69AqekDbeGY41MdjQD8AZzHK501A1vcrrjubNkD5LnquvBYhQCbiRRD71QlAqt72EbOH8z8Eu+jL1YbdP4uaox/xUcY/abedg1XfsD+BsUdzJ4KZP5wE9YFySIM/rW1kAKMpbT+rZFthVRhWPy4PKlXIs0A/qMZLlwDnMEHByqEF0I0ZQQYSFD8lUQNBPpY+dFs07UAH8BZImBPWQN9RY0I0sMBA2T7kLfc6qUByFYvfhBKTQMq+0Mis1XxA0XQbeQXMZUBJJ5aEGXpQQP7/SY0a6ThAaMD92b/UIkAs8s8yqXoMQNIegOvCk/U/aOi7NZJP4D8AAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAD/////AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA/////wAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAP////8AAAAABQAAAAAAAAAAAAAAAAAAAAAAAAD/////BQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////////8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAABAAAAAAAAAAUAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAEAAQAAAQEAAAAAAAEAAAABAAAAAQABAAAAAAAAAAAAAAAAAAAAAAcAAAAHAAAAAQAAAAIAAAAEAAAAAwAAAAAAAAAAAAAABwAAAAMAAAABAAAAAgAAAAUAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAAAAQAAAAMAAAAOAAAABgAAAAsAAAACAAAABwAAAAEAAAAYAAAABQAAAAoAAAABAAAABgAAAAAAAAAmAAAABwAAAAwAAAADAAAACAAAAAIAAAAxAAAACQAAAA4AAAAAAAAABQAAAAQAAAA6AAAACAAAAA0AAAAEAAAACQAAAAMAAAA/AAAACwAAAAYAAAAPAAAACgAAABAAAABIAAAADAAAAAcAAAAQAAAACwAAABEAAABTAAAACgAAAAUAAAATAAAADgAAAA8AAABhAAAADQAAAAgAAAARAAAADAAAABIAAABrAAAADgAAAAkAAAASAAAADQAAABMAAAB1AAAADwAAABMAAAARAAAAEgAAABAAAAAGAAAAAgAAAAMAAAAFAAAABAAAAAAAAAAAAAAAAAAAAAYAAAACAAAAAwAAAAEAAAAFAAAABAAAAAAAAAAAAAAABwAAAAUAAAADAAAABAAAAAEAAAAAAAAAAgAAAAAAAAACAAAAAwAAAAEAAAAFAAAABAAAAAYAAAAAAAAAAAAAAGFsZ29zLmMAaDNOZWlnaGJvclJvdGF0aW9ucwBjb29yZGlqay5jAF91cEFwN0NoZWNrZWQAX3VwQXA3ckNoZWNrZWQAZGlyZWN0ZWRFZGdlLmMAZGlyZWN0ZWRFZGdlVG9Cb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbdG1wRmlqay5mYWNlXVtmaWprLmZhY2VdID09IEtJAGZhY2VpamsuYwBfZmFjZUlqa1BlbnRUb0NlbGxCb3VuZGFyeQBhZGphY2VudEZhY2VEaXJbY2VudGVySUpLLmZhY2VdW2ZhY2UyXSA9PSBLSQBfZmFjZUlqa1RvQ2VsbEJvdW5kYXJ5AGgzSW5kZXguYwBjb21wYWN0Q2VsbHMAbGF0TG5nVG9DZWxsAGNlbGxUb0NoaWxkUG9zAHZhbGlkYXRlQ2hpbGRQb3MAbGF0TG5nLmMAY2VsbEFyZWFSYWRzMgBwb2x5Z29uLT5uZXh0ID09IE5VTEwAbGlua2VkR2VvLmMAYWRkTmV3TGlua2VkUG9seWdvbgBuZXh0ICE9IE5VTEwAbG9vcCAhPSBOVUxMAGFkZE5ld0xpbmtlZExvb3AAcG9seWdvbi0+Zmlyc3QgPT0gTlVMTABhZGRMaW5rZWRMb29wAGNvb3JkICE9IE5VTEwAYWRkTGlua2VkQ29vcmQAbG9vcC0+Zmlyc3QgPT0gTlVMTABpbm5lckxvb3BzICE9IE5VTEwAbm9ybWFsaXplTXVsdGlQb2x5Z29uAGJib3hlcyAhPSBOVUxMAGNhbmRpZGF0ZXMgIT0gTlVMTABmaW5kUG9seWdvbkZvckhvbGUAY2FuZGlkYXRlQkJveGVzICE9IE5VTEwAcmV2RGlyICE9IElOVkFMSURfRElHSVQAbG9jYWxpai5jAGNlbGxUb0xvY2FsSWprAGJhc2VDZWxsICE9IG9yaWdpbkJhc2VDZWxsACEob3JpZ2luT25QZW50ICYmIGluZGV4T25QZW50KQBiYXNlQ2VsbCA9PSBvcmlnaW5CYXNlQ2VsbABiYXNlQ2VsbCAhPSBJTlZBTElEX0JBU0VfQ0VMTABsb2NhbElqa1RvQ2VsbAAhX2lzQmFzZUNlbGxQZW50YWdvbihiYXNlQ2VsbCkAYmFzZUNlbGxSb3RhdGlvbnMgPj0gMABncmlkUGF0aENlbGxzADAAdmVydGV4LmMAY2VsbFRvVmVydGV4AGdyYXBoLT5idWNrZXRzICE9IE5VTEwAdmVydGV4R3JhcGguYwBpbml0VmVydGV4R3JhcGgAbm9kZSAhPSBOVUxMAGFkZFZlcnRleE5vZGU=\";var tempDoublePtr=24144;function demangle(func){return func}function demangleAll(text){var regex=/\\b__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+\" [\"+x+\"]\"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return\"(no stack trace available)\"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort(\"Assertion failed: \"+UTF8ToString(condition)+\", at: \"+[filename?UTF8ToString(filename):\"unknown filename\",line,func?UTF8ToString(func):\"unknown function\"])}function _emscripten_get_heap_size(){return HEAP8.length}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value}function abortOnCannotGrowMemory(requestedSize){abort(\"OOM\")}function emscripten_realloc_buffer(size){try{var newBuffer=new ArrayBuffer(size);if(newBuffer.byteLength!=size)return;new Int8Array(newBuffer).set(HEAP8);_emscripten_replace_memory(newBuffer);updateGlobalBufferAndViews(newBuffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=16777216;var LIMIT=2147483648-PAGE_MULTIPLE;if(requestedSize>LIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize<requestedSize){if(newSize<=536870912){newSize=alignUp(2*newSize,PAGE_MULTIPLE)}else{newSize=Math.min(alignUp((3*newSize+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=emscripten_realloc_buffer(newSize);if(!replacement){return false}return true}var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\") at offset \"+i+\" not in 0x00-0xFF.\")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join(\"\")}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\")}catch(_){buf=new Buffer(s,\"base64\")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error(\"Converting base64 string to bytes failed.\")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmGlobalArg={\"Math\":Math,\"Int8Array\":Int8Array,\"Int32Array\":Int32Array,\"Uint8Array\":Uint8Array,\"Float32Array\":Float32Array,\"Float64Array\":Float64Array};var asmLibraryArg={\"a\":abort,\"b\":setTempRet0,\"c\":getTempRet0,\"d\":___assert_fail,\"e\":___setErrNo,\"f\":_emscripten_get_heap_size,\"g\":_emscripten_memcpy_big,\"h\":_emscripten_resize_heap,\"i\":abortOnCannotGrowMemory,\"j\":demangle,\"k\":demangleAll,\"l\":emscripten_realloc_buffer,\"m\":jsStackTrace,\"n\":stackTrace,\"o\":tempDoublePtr,\"p\":DYNAMICTOP_PTR};// EMSCRIPTEN_START_ASM\nvar asm=(/** @suppress {uselessCode} */ function(global,env,buffer) {\n\"almost asm\";var a=new global.Int8Array(buffer),b=new global.Int32Array(buffer),c=new global.Uint8Array(buffer),d=new global.Float32Array(buffer),e=new global.Float64Array(buffer),f=env.o|0,g=env.p|0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=global.Math.floor,q=global.Math.abs,r=global.Math.sqrt,s=global.Math.pow,t=global.Math.cos,u=global.Math.sin,v=global.Math.tan,w=global.Math.acos,x=global.Math.asin,y=global.Math.atan,z=global.Math.atan2,A=global.Math.ceil,B=global.Math.imul,C=global.Math.min,D=global.Math.max,E=global.Math.clz32,F=env.a,G=env.b,H=env.c,I=env.d,J=env.e,K=env.f,L=env.g,M=env.h,N=env.i,O=env.j,P=env.k,Q=env.l,R=env.m,S=env.n,T=24160,U=5267040,V=0.0;function W(newBuffer){a=new Int8Array(newBuffer);c=new Uint8Array(newBuffer);b=new Int32Array(newBuffer);d=new Float32Array(newBuffer);e=new Float64Array(newBuffer);buffer=newBuffer;return true}\n// EMSCRIPTEN_START_FUNCS\nfunction X(a){a=a|0;var b=0;b=T;T=T+a|0;T=T+15&-16;return b|0}function Y(){return T|0}function Z(a){a=a|0;T=a}function _(a,b){a=a|0;b=b|0;T=a;U=b}function $(a,c){a=a|0;c=c|0;var d=0,e=0,f=0;if((a|0)<0){c=2;return c|0}if((a|0)>13780509){c=ic(15,c)|0;return c|0}else{d=((a|0)<0)<<31>>31;f=rd(a|0,d|0,3,0)|0;e=H()|0;d=ld(a|0,d|0,1,0)|0;d=rd(f|0,e|0,d|0,H()|0)|0;d=ld(d|0,H()|0,1,0)|0;a=H()|0;b[c>>2]=d;b[c+4>>2]=a;c=0;return c|0}return 0}function aa(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ba(a,b,c,d,0)|0}function ba(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=T;T=T+16|0;h=j;if(!(ca(a,c,d,e,f)|0)){e=0;T=j;return e|0}do if((d|0)>=0){if((d|0)>13780509){g=ic(15,h)|0;if(g|0)break;i=h;h=b[i>>2]|0;i=b[i+4>>2]|0}else{g=((d|0)<0)<<31>>31;k=rd(d|0,g|0,3,0)|0;i=H()|0;g=ld(d|0,g|0,1,0)|0;g=rd(k|0,i|0,g|0,H()|0)|0;g=ld(g|0,H()|0,1,0)|0;i=H()|0;b[h>>2]=g;b[h+4>>2]=i;h=g}Bd(e|0,0,h<<3|0)|0;if(f|0){Bd(f|0,0,h<<2|0)|0;g=da(a,c,d,e,f,h,i,0)|0;break}g=kd(h,4)|0;if(!g)g=13;else{k=da(a,c,d,e,g,h,i,0)|0;jd(g);g=k}}else g=2;while(0);k=g;T=j;return k|0}function ca(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=T;T=T+16|0;o=q;p=q+8|0;n=o;b[n>>2]=a;b[n+4>>2]=c;if((d|0)<0){p=2;T=q;return p|0}g=e;b[g>>2]=a;b[g+4>>2]=c;g=(f|0)!=0;if(g)b[f>>2]=0;if(xb(a,c)|0){p=9;T=q;return p|0}b[p>>2]=0;a:do if((d|0)>=1)if(g){l=1;k=0;m=0;n=1;g=a;while(1){if(!(k|m)){g=ea(g,c,4,p,o)|0;if(g|0)break a;c=o;g=b[c>>2]|0;c=b[c+4>>2]|0;if(xb(g,c)|0){g=9;break a}}g=ea(g,c,b[22384+(m<<2)>>2]|0,p,o)|0;if(g|0)break a;c=o;g=b[c>>2]|0;c=b[c+4>>2]|0;a=e+(l<<3)|0;b[a>>2]=g;b[a+4>>2]=c;b[f+(l<<2)>>2]=n;a=k+1|0;h=(a|0)==(n|0);i=m+1|0;j=(i|0)==6;if(xb(g,c)|0){g=9;break a}n=n+(j&h&1)|0;if((n|0)>(d|0)){g=0;break}else{l=l+1|0;k=h?0:a;m=h?(j?0:i):m}}}else{l=1;k=0;m=0;n=1;g=a;while(1){if(!(k|m)){g=ea(g,c,4,p,o)|0;if(g|0)break a;c=o;g=b[c>>2]|0;c=b[c+4>>2]|0;if(xb(g,c)|0){g=9;break a}}g=ea(g,c,b[22384+(m<<2)>>2]|0,p,o)|0;if(g|0)break a;c=o;g=b[c>>2]|0;c=b[c+4>>2]|0;a=e+(l<<3)|0;b[a>>2]=g;b[a+4>>2]=c;a=k+1|0;h=(a|0)==(n|0);i=m+1|0;j=(i|0)==6;if(xb(g,c)|0){g=9;break a}n=n+(j&h&1)|0;if((n|0)>(d|0)){g=0;break}else{l=l+1|0;k=h?0:a;m=h?(j?0:i):m}}}else g=0;while(0);p=g;T=q;return p|0}function da(a,c,d,e,f,g,h,i){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=T;T=T+16|0;o=q+8|0;p=q;j=td(a|0,c|0,g|0,h|0)|0;l=H()|0;m=e+(j<<3)|0;r=m;s=b[r>>2]|0;r=b[r+4>>2]|0;k=(s|0)==(a|0)&(r|0)==(c|0);if(!((s|0)==0&(r|0)==0|k))do{j=ld(j|0,l|0,1,0)|0;j=sd(j|0,H()|0,g|0,h|0)|0;l=H()|0;m=e+(j<<3)|0;s=m;r=b[s>>2]|0;s=b[s+4>>2]|0;k=(r|0)==(a|0)&(s|0)==(c|0)}while(!((r|0)==0&(s|0)==0|k));j=f+(j<<2)|0;if(k?(b[j>>2]|0)<=(i|0):0){s=0;T=q;return s|0}s=m;b[s>>2]=a;b[s+4>>2]=c;b[j>>2]=i;if((i|0)>=(d|0)){s=0;T=q;return s|0}k=i+1|0;b[o>>2]=0;j=ea(a,c,2,o,p)|0;switch(j|0){case 9:{n=9;break}case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(!j)n=9;break}default:{}}a:do if((n|0)==9){b[o>>2]=0;j=ea(a,c,3,o,p)|0;switch(j|0){case 9:break;case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(j|0)break a;break}default:break a}b[o>>2]=0;j=ea(a,c,1,o,p)|0;switch(j|0){case 9:break;case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(j|0)break a;break}default:break a}b[o>>2]=0;j=ea(a,c,5,o,p)|0;switch(j|0){case 9:break;case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(j|0)break a;break}default:break a}b[o>>2]=0;j=ea(a,c,4,o,p)|0;switch(j|0){case 9:break;case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(j|0)break a;break}default:break a}b[o>>2]=0;j=ea(a,c,6,o,p)|0;switch(j|0){case 9:break;case 0:{j=p;j=da(b[j>>2]|0,b[j+4>>2]|0,d,e,f,g,h,k)|0;if(j|0)break a;break}default:break a}s=0;T=q;return s|0}while(0);s=j;T=q;return s|0}function ea(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(d>>>0>6){f=1;return f|0}m=(b[e>>2]|0)%6|0;b[e>>2]=m;if((m|0)>0){g=0;do{d=Sa(d)|0;g=g+1|0}while((g|0)<(b[e>>2]|0))}m=vd(a|0,c|0,45)|0;H()|0;l=m&127;if(l>>>0>121){f=5;return f|0}j=Fb(a,c)|0;g=vd(a|0,c|0,52)|0;H()|0;g=g&15;a:do if(!g)k=8;else{while(1){h=(15-g|0)*3|0;i=vd(a|0,c|0,h|0)|0;H()|0;i=i&7;if((i|0)==7){c=5;break}p=(Lb(g)|0)==0;g=g+-1|0;n=wd(7,0,h|0)|0;c=c&~(H()|0);o=wd(b[(p?432:16)+(i*28|0)+(d<<2)>>2]|0,0,h|0)|0;h=H()|0;d=b[(p?640:224)+(i*28|0)+(d<<2)>>2]|0;a=o|a&~n;c=h|c;if(!d){d=0;break a}if(!g){k=8;break a}}return c|0}while(0);if((k|0)==8){p=b[848+(l*28|0)+(d<<2)>>2]|0;o=wd(p|0,0,45)|0;a=o|a;c=H()|0|c&-1040385;d=b[4272+(l*28|0)+(d<<2)>>2]|0;if((p&127|0)==127){p=wd(b[848+(l*28|0)+20>>2]|0,0,45)|0;c=H()|0|c&-1040385;d=b[4272+(l*28|0)+20>>2]|0;a=Hb(p|a,c)|0;c=H()|0;b[e>>2]=(b[e>>2]|0)+1}}i=vd(a|0,c|0,45)|0;H()|0;i=i&127;b:do if(!(ma(i)|0)){if((d|0)>0){g=0;do{a=Hb(a,c)|0;c=H()|0;g=g+1|0}while((g|0)!=(d|0))}}else{c:do if((Fb(a,c)|0)==1){if((l|0)!=(i|0))if(sa(i,b[7696+(l*28|0)>>2]|0)|0){a=Jb(a,c)|0;h=1;c=H()|0;break}else I(23313,22416,436,22424);switch(j|0){case 3:{a=Hb(a,c)|0;c=H()|0;b[e>>2]=(b[e>>2]|0)+1;h=0;break c}case 5:{a=Jb(a,c)|0;c=H()|0;b[e>>2]=(b[e>>2]|0)+5;h=0;break c}case 0:{p=9;return p|0}default:{p=1;return p|0}}}else h=0;while(0);if((d|0)>0){g=0;do{a=Gb(a,c)|0;c=H()|0;g=g+1|0}while((g|0)!=(d|0))}if((l|0)!=(i|0)){if(!(na(i)|0)){if((h|0)!=0|(Fb(a,c)|0)!=5)break;b[e>>2]=(b[e>>2]|0)+1;break}switch(m&127){case 8:case 118:break b;default:{}}if((Fb(a,c)|0)!=3)b[e>>2]=(b[e>>2]|0)+1}}while(0);b[e>>2]=((b[e>>2]|0)+d|0)%6|0;p=f;b[p>>2]=a;b[p+4>>2]=c;p=0;return p|0}function fa(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=T;T=T+16|0;g=i;h=i+8|0;f=(xb(a,c)|0)==0;f=f?1:2;while(1){b[h>>2]=0;k=(ea(a,c,f,h,g)|0)==0;j=g;if(k&((b[j>>2]|0)==(d|0)?(b[j+4>>2]|0)==(e|0):0)){a=4;break}f=f+1|0;if(f>>>0>=7){f=7;a=4;break}}if((a|0)==4){T=i;return f|0}return 0}function ga(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=T;T=T+16|0;n=p;o=p+8|0;m=n;b[m>>2]=a;b[m+4>>2]=c;if(!d){o=e;b[o>>2]=a;b[o+4>>2]=c;o=0;T=p;return o|0}b[o>>2]=0;a:do if(!(xb(a,c)|0)){g=(d|0)>0;if(g){f=0;m=a;do{a=ea(m,c,4,o,n)|0;if(a|0)break a;c=n;m=b[c>>2]|0;c=b[c+4>>2]|0;f=f+1|0;if(xb(m,c)|0){a=9;break a}}while((f|0)<(d|0));l=e;b[l>>2]=m;b[l+4>>2]=c;l=d+-1|0;if(g){k=0;a=1;do{f=22384+(k<<2)|0;if((k|0)==5){h=b[f>>2]|0;g=0;f=a;while(1){a=n;a=ea(b[a>>2]|0,b[a+4>>2]|0,h,o,n)|0;if(a|0)break a;if((g|0)!=(l|0)){j=n;i=b[j>>2]|0;j=b[j+4>>2]|0;a=e+(f<<3)|0;b[a>>2]=i;b[a+4>>2]=j;if(!(xb(i,j)|0))a=f+1|0;else{a=9;break a}}else a=f;g=g+1|0;if((g|0)>=(d|0))break;else f=a}}else{h=n;j=b[f>>2]|0;i=0;f=a;g=b[h>>2]|0;h=b[h+4>>2]|0;while(1){a=ea(g,h,j,o,n)|0;if(a|0)break a;h=n;g=b[h>>2]|0;h=b[h+4>>2]|0;a=e+(f<<3)|0;b[a>>2]=g;b[a+4>>2]=h;a=f+1|0;if(xb(g,h)|0){a=9;break a}i=i+1|0;if((i|0)>=(d|0))break;else f=a}}k=k+1|0}while(k>>>0<6);a=n;h=m;f=b[a>>2]|0;g=c;a=b[a+4>>2]|0}else{h=m;f=m;g=c;a=c}}else{h=e;b[h>>2]=a;b[h+4>>2]=c;h=a;f=a;g=c;a=c}a=(h|0)==(f|0)&(g|0)==(a|0)?0:9}else a=9;while(0);o=a;T=p;return o|0}function ha(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=T;T=T+48|0;f=i+16|0;g=i+8|0;h=i;if(d|0){h=15;T=i;return h|0}k=a;j=b[k+4>>2]|0;d=g;b[d>>2]=b[k>>2];b[d+4>>2]=j;Ec(g,f);c=za(f,c,h)|0;if(!c){d=b[g>>2]|0;g=b[a+8>>2]|0;if((g|0)>0){f=b[a+12>>2]|0;c=0;do{d=(b[f+(c<<3)>>2]|0)+d|0;c=c+1|0}while((c|0)<(g|0))}c=h;f=b[c>>2]|0;c=b[c+4>>2]|0;g=((d|0)<0)<<31>>31;if((c|0)<(g|0)|(c|0)==(g|0)&f>>>0<d>>>0){c=h;b[c>>2]=d;b[c+4>>2]=g;c=g}else d=f;j=ld(d|0,c|0,12,0)|0;k=H()|0;c=h;b[c>>2]=j;b[c+4>>2]=k;c=e;b[c>>2]=j;b[c+4>>2]=k;c=0}k=c;T=i;return k|0}function ia(a,c,d,f,g,h,i){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0;I=T;T=T+64|0;D=I+48|0;E=I+32|0;F=I+24|0;x=I+8|0;y=I;k=b[a>>2]|0;if((k|0)<=0){G=0;T=I;return G|0}z=a+4|0;A=D+8|0;B=E+8|0;C=x+8|0;j=0;v=0;while(1){l=b[z>>2]|0;u=l+(v<<4)|0;b[D>>2]=b[u>>2];b[D+4>>2]=b[u+4>>2];b[D+8>>2]=b[u+8>>2];b[D+12>>2]=b[u+12>>2];if((v|0)==(k+-1|0)){b[E>>2]=b[l>>2];b[E+4>>2]=b[l+4>>2];b[E+8>>2]=b[l+8>>2];b[E+12>>2]=b[l+12>>2]}else{u=l+(v+1<<4)|0;b[E>>2]=b[u>>2];b[E+4>>2]=b[u+4>>2];b[E+8>>2]=b[u+8>>2];b[E+12>>2]=b[u+12>>2]}k=Aa(D,E,f,F)|0;a:do if(!k){l=F;k=b[l>>2]|0;l=b[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){t=0;u=0;b:while(1){M=+e[D>>3];s=md(k|0,l|0,t|0,u|0)|0;L=+(s>>>0)+4294967296.0*+(H()|0);J=+(k>>>0)+4294967296.0*+(l|0);K=+(t>>>0)+4294967296.0*+(u|0);e[x>>3]=M*L/J+ +e[E>>3]*K/J;e[C>>3]=+e[A>>3]*L/J+ +e[B>>3]*K/J;k=Mb(x,f,y)|0;if(k|0){j=k;break}s=y;r=b[s>>2]|0;s=b[s+4>>2]|0;o=td(r|0,s|0,c|0,d|0)|0;m=H()|0;k=i+(o<<3)|0;n=k;l=b[n>>2]|0;n=b[n+4>>2]|0;c:do if((l|0)==0&(n|0)==0){w=k;G=16}else{p=0;q=0;while(1){if((p|0)>(d|0)|(p|0)==(d|0)&q>>>0>c>>>0){j=1;break b}if((l|0)==(r|0)&(n|0)==(s|0))break c;k=ld(o|0,m|0,1,0)|0;o=sd(k|0,H()|0,c|0,d|0)|0;m=H()|0;q=ld(q|0,p|0,1,0)|0;p=H()|0;k=i+(o<<3)|0;n=k;l=b[n>>2]|0;n=b[n+4>>2]|0;if((l|0)==0&(n|0)==0){w=k;G=16;break}}}while(0);if((G|0)==16?(G=0,!((r|0)==0&(s|0)==0)):0){q=w;b[q>>2]=r;b[q+4>>2]=s;q=h+(b[g>>2]<<3)|0;b[q>>2]=r;b[q+4>>2]=s;q=g;q=ld(b[q>>2]|0,b[q+4>>2]|0,1,0)|0;r=H()|0;s=g;b[s>>2]=q;b[s+4>>2]=r}t=ld(t|0,u|0,1,0)|0;u=H()|0;l=F;k=b[l>>2]|0;l=b[l+4>>2]|0;if(!((l|0)>(u|0)|(l|0)==(u|0)&k>>>0>t>>>0)){l=1;break a}}l=0}else l=1}else{l=0;j=k}while(0);v=v+1|0;if(!l){G=21;break}k=b[a>>2]|0;if((v|0)>=(k|0)){j=0;G=21;break}}if((G|0)==21){T=I;return j|0}return 0}function ja(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0;K=T;T=T+112|0;F=K+80|0;j=K+72|0;G=K;I=K+56|0;if(d|0){J=15;T=K;return J|0}k=a+8|0;J=id((b[k>>2]<<5)+32|0)|0;if(!J){J=13;T=K;return J|0}Fc(a,J);D=a;E=b[D+4>>2]|0;d=j;b[d>>2]=b[D>>2];b[d+4>>2]=E;Ec(j,F);d=za(F,c,G)|0;if(!d){d=b[j>>2]|0;g=b[k>>2]|0;if((g|0)>0){h=b[a+12>>2]|0;f=0;do{d=(b[h+(f<<3)>>2]|0)+d|0;f=f+1|0}while((f|0)!=(g|0));f=d}else f=d;d=G;g=b[d>>2]|0;d=b[d+4>>2]|0;h=((f|0)<0)<<31>>31;if((d|0)<(h|0)|(d|0)==(h|0)&g>>>0<f>>>0){d=G;b[d>>2]=f;b[d+4>>2]=h;d=h}else f=g;D=ld(f|0,d|0,12,0)|0;E=H()|0;d=G;b[d>>2]=D;b[d+4>>2]=E;d=0}else{D=0;E=0}if(d|0){jd(J);J=d;T=K;return J|0}f=kd(D,8)|0;if(!f){jd(J);J=13;T=K;return J|0}i=kd(D,8)|0;if(!i){jd(J);jd(f);J=13;T=K;return J|0}B=F;b[B>>2]=0;b[B+4>>2]=0;B=a;C=b[B+4>>2]|0;d=j;b[d>>2]=b[B>>2];b[d+4>>2]=C;d=ia(j,D,E,c,F,f,i)|0;a:do if(!d){b:do if((b[k>>2]|0)>0){h=a+12|0;g=0;while(1){d=ia((b[h>>2]|0)+(g<<3)|0,D,E,c,F,f,i)|0;g=g+1|0;if(d|0)break;if((g|0)>=(b[k>>2]|0))break b}jd(f);jd(i);jd(J);break a}while(0);if((E|0)>0|(E|0)==0&D>>>0>0)Bd(i|0,0,D<<3|0)|0;C=F;B=b[C+4>>2]|0;c:do if((B|0)>0|(B|0)==0&(b[C>>2]|0)>>>0>0){y=f;z=i;A=f;B=i;C=f;d=f;v=f;w=i;x=i;f=i;d:while(1){r=0;s=0;t=0;u=0;g=0;h=0;while(1){i=G;j=i+56|0;do{b[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c=y+(r<<3)|0;k=b[c>>2]|0;c=b[c+4>>2]|0;if(ca(k,c,1,G,0)|0){i=G;j=i+56|0;do{b[i>>2]=0;i=i+4|0}while((i|0)<(j|0));i=kd(7,4)|0;if(i|0){da(k,c,1,G,i,7,0,0)|0;jd(i)}}q=0;while(1){p=G+(q<<3)|0;o=b[p>>2]|0;p=b[p+4>>2]|0;e:do if(!((o|0)==0&(p|0)==0)){l=td(o|0,p|0,D|0,E|0)|0;k=H()|0;i=e+(l<<3)|0;c=i;j=b[c>>2]|0;c=b[c+4>>2]|0;if(!((j|0)==0&(c|0)==0)){m=0;n=0;do{if((m|0)>(E|0)|(m|0)==(E|0)&n>>>0>D>>>0)break d;if((j|0)==(o|0)&(c|0)==(p|0)){i=g;j=h;break e}i=ld(l|0,k|0,1,0)|0;l=sd(i|0,H()|0,D|0,E|0)|0;k=H()|0;n=ld(n|0,m|0,1,0)|0;m=H()|0;i=e+(l<<3)|0;c=i;j=b[c>>2]|0;c=b[c+4>>2]|0}while(!((j|0)==0&(c|0)==0))}if(!((o|0)==0&(p|0)==0)){Pb(o,p,I)|0;if(Gc(a,J,I)|0){n=ld(g|0,h|0,1,0)|0;h=H()|0;m=i;b[m>>2]=o;b[m+4>>2]=p;g=z+(g<<3)|0;b[g>>2]=o;b[g+4>>2]=p;g=n}i=g;j=h}else{i=g;j=h}}else{i=g;j=h}while(0);q=q+1|0;if(q>>>0>=7)break;else{g=i;h=j}}r=ld(r|0,s|0,1,0)|0;s=H()|0;t=ld(t|0,u|0,1,0)|0;u=H()|0;h=F;g=b[h>>2]|0;h=b[h+4>>2]|0;if(!((u|0)<(h|0)|(u|0)==(h|0)&t>>>0<g>>>0))break;else{g=i;h=j}}if((h|0)>0|(h|0)==0&g>>>0>0){g=0;h=0;do{u=y+(g<<3)|0;b[u>>2]=0;b[u+4>>2]=0;g=ld(g|0,h|0,1,0)|0;h=H()|0;u=F;t=b[u+4>>2]|0}while((h|0)<(t|0)|((h|0)==(t|0)?g>>>0<(b[u>>2]|0)>>>0:0))}u=F;b[u>>2]=i;b[u+4>>2]=j;if((j|0)>0|(j|0)==0&i>>>0>0){q=f;r=x;s=C;t=w;u=z;f=v;x=d;w=A;v=q;d=r;C=B;B=s;A=t;z=y;y=u}else break c}jd(A);jd(B);jd(J);d=1;break a}else d=i;while(0);jd(J);jd(f);jd(d);d=0}else{jd(f);jd(i);jd(J)}while(0);J=d;T=K;return J|0}function ka(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=T;T=T+176|0;j=l;if((c|0)<1){_c(d,0,0);k=0;T=l;return k|0}i=a;i=vd(b[i>>2]|0,b[i+4>>2]|0,52)|0;H()|0;_c(d,(c|0)>6?c:6,i&15);i=0;while(1){e=a+(i<<3)|0;e=Qb(b[e>>2]|0,b[e+4>>2]|0,j)|0;if(e|0)break;e=b[j>>2]|0;if((e|0)>0){h=0;do{g=j+8+(h<<4)|0;h=h+1|0;e=j+8+(((h|0)%(e|0)|0)<<4)|0;f=dd(d,e,g)|0;if(!f)cd(d,g,e)|0;else bd(d,f)|0;e=b[j>>2]|0}while((h|0)<(e|0))}i=i+1|0;if((i|0)>=(c|0)){e=0;k=13;break}}if((k|0)==13){T=l;return e|0}$c(d);k=e;T=l;return k|0}function la(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;g=T;T=T+32|0;e=g;f=g+16|0;a=ka(a,c,f)|0;if(a|0){d=a;T=g;return d|0}b[d>>2]=0;b[d+4>>2]=0;b[d+8>>2]=0;a=ad(f)|0;if(a|0)do{c=qc(d)|0;do{rc(c,a)|0;h=a+16|0;b[e>>2]=b[h>>2];b[e+4>>2]=b[h+4>>2];b[e+8>>2]=b[h+8>>2];b[e+12>>2]=b[h+12>>2];bd(f,a)|0;a=ed(f,e)|0}while((a|0)!=0);a=ad(f)|0}while((a|0)!=0);$c(f);a=tc(d)|0;if(!a){h=0;T=g;return h|0}sc(d);h=a;T=g;return h|0}function ma(a){a=a|0;if(a>>>0>121){a=0;return a|0}a=b[7696+(a*28|0)+16>>2]|0;return a|0}function na(a){a=a|0;return (a|0)==4|(a|0)==117|0}function oa(a){a=a|0;return b[11120+((b[a>>2]|0)*216|0)+((b[a+4>>2]|0)*72|0)+((b[a+8>>2]|0)*24|0)+(b[a+12>>2]<<3)>>2]|0}function pa(a){a=a|0;return b[11120+((b[a>>2]|0)*216|0)+((b[a+4>>2]|0)*72|0)+((b[a+8>>2]|0)*24|0)+(b[a+12>>2]<<3)+4>>2]|0}function qa(a,c){a=a|0;c=c|0;a=7696+(a*28|0)|0;b[c>>2]=b[a>>2];b[c+4>>2]=b[a+4>>2];b[c+8>>2]=b[a+8>>2];b[c+12>>2]=b[a+12>>2];return}function ra(a,c){a=a|0;c=c|0;var d=0,e=0;if(c>>>0>20){c=-1;return c|0}do if((b[11120+(c*216|0)>>2]|0)!=(a|0))if((b[11120+(c*216|0)+8>>2]|0)!=(a|0))if((b[11120+(c*216|0)+16>>2]|0)!=(a|0))if((b[11120+(c*216|0)+24>>2]|0)!=(a|0))if((b[11120+(c*216|0)+32>>2]|0)!=(a|0))if((b[11120+(c*216|0)+40>>2]|0)!=(a|0))if((b[11120+(c*216|0)+48>>2]|0)!=(a|0))if((b[11120+(c*216|0)+56>>2]|0)!=(a|0))if((b[11120+(c*216|0)+64>>2]|0)!=(a|0))if((b[11120+(c*216|0)+72>>2]|0)!=(a|0))if((b[11120+(c*216|0)+80>>2]|0)!=(a|0))if((b[11120+(c*216|0)+88>>2]|0)!=(a|0))if((b[11120+(c*216|0)+96>>2]|0)!=(a|0))if((b[11120+(c*216|0)+104>>2]|0)!=(a|0))if((b[11120+(c*216|0)+112>>2]|0)!=(a|0))if((b[11120+(c*216|0)+120>>2]|0)!=(a|0))if((b[11120+(c*216|0)+128>>2]|0)!=(a|0))if((b[11120+(c*216|0)+136>>2]|0)==(a|0)){a=2;d=1;e=2}else{if((b[11120+(c*216|0)+144>>2]|0)==(a|0)){a=0;d=2;e=0;break}if((b[11120+(c*216|0)+152>>2]|0)==(a|0)){a=0;d=2;e=1;break}if((b[11120+(c*216|0)+160>>2]|0)==(a|0)){a=0;d=2;e=2;break}if((b[11120+(c*216|0)+168>>2]|0)==(a|0)){a=1;d=2;e=0;break}if((b[11120+(c*216|0)+176>>2]|0)==(a|0)){a=1;d=2;e=1;break}if((b[11120+(c*216|0)+184>>2]|0)==(a|0)){a=1;d=2;e=2;break}if((b[11120+(c*216|0)+192>>2]|0)==(a|0)){a=2;d=2;e=0;break}if((b[11120+(c*216|0)+200>>2]|0)==(a|0)){a=2;d=2;e=1;break}if((b[11120+(c*216|0)+208>>2]|0)==(a|0)){a=2;d=2;e=2;break}else a=-1;return a|0}else{a=2;d=1;e=1}else{a=2;d=1;e=0}else{a=1;d=1;e=2}else{a=1;d=1;e=1}else{a=1;d=1;e=0}else{a=0;d=1;e=2}else{a=0;d=1;e=1}else{a=0;d=1;e=0}else{a=2;d=0;e=2}else{a=2;d=0;e=1}else{a=2;d=0;e=0}else{a=1;d=0;e=2}else{a=1;d=0;e=1}else{a=1;d=0;e=0}else{a=0;d=0;e=2}else{a=0;d=0;e=1}else{a=0;d=0;e=0}while(0);c=b[11120+(c*216|0)+(d*72|0)+(a*24|0)+(e<<3)+4>>2]|0;return c|0}function sa(a,c){a=a|0;c=c|0;if((b[7696+(a*28|0)+20>>2]|0)==(c|0)){c=1;return c|0}c=(b[7696+(a*28|0)+24>>2]|0)==(c|0);return c|0}function ta(a,c){a=a|0;c=c|0;return b[848+(a*28|0)+(c<<2)>>2]|0}function ua(a,c){a=a|0;c=c|0;if((b[848+(a*28|0)>>2]|0)==(c|0)){c=0;return c|0}if((b[848+(a*28|0)+4>>2]|0)==(c|0)){c=1;return c|0}if((b[848+(a*28|0)+8>>2]|0)==(c|0)){c=2;return c|0}if((b[848+(a*28|0)+12>>2]|0)==(c|0)){c=3;return c|0}if((b[848+(a*28|0)+16>>2]|0)==(c|0)){c=4;return c|0}if((b[848+(a*28|0)+20>>2]|0)==(c|0)){c=5;return c|0}else return ((b[848+(a*28|0)+24>>2]|0)==(c|0)?6:7)|0;return 0}function va(){return 122}function wa(a){a=a|0;var c=0,d=0,e=0;c=0;do{wd(c|0,0,45)|0;e=H()|0|134225919;d=a+(c<<3)|0;b[d>>2]=-1;b[d+4>>2]=e;c=c+1|0}while((c|0)!=122);return 0}function xa(a){a=a|0;return +e[a+16>>3]<+e[a+24>>3]|0}function ya(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;c=+e[b>>3];if(!(c>=+e[a+8>>3])){b=0;return b|0}if(!(c<=+e[a>>3])){b=0;return b|0}d=+e[a+16>>3];c=+e[a+24>>3];f=+e[b+8>>3];b=f>=c;a=f<=d&1;if(d<c){if(b)a=1}else if(!b)a=0;b=(a|0)!=0;return b|0}function za(a,c,d){a=a|0;c=c|0;d=d|0;var g=0.0,h=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0.0,v=0.0;t=T;T=T+288|0;n=t+264|0;o=t+96|0;m=t;k=m;l=k+96|0;do{b[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c=Ub(c,m)|0;if(c|0){s=c;T=t;return s|0}l=m;m=b[l>>2]|0;l=b[l+4>>2]|0;Pb(m,l,n)|0;Qb(m,l,o)|0;j=+ac(n,o+8|0);e[n>>3]=+e[a>>3];l=n+8|0;e[l>>3]=+e[a+16>>3];e[o>>3]=+e[a+8>>3];m=o+8|0;e[m>>3]=+e[a+24>>3];h=+ac(n,o);v=+e[l>>3]-+e[m>>3];i=+q(+v);u=+e[n>>3]-+e[o>>3];g=+q(+u);if(!(v==0.0|u==0.0)?(v=+xd(+i,+g),v=+A(+(h*h/+yd(+(v/+yd(+i,+g)),3.0)/(j*(j*2.59807621135)*.8))),e[f>>3]=v,r=~~v>>>0,s=+q(v)>=1.0?(v>0.0?~~+C(+p(v/4294967296.0),4294967295.0)>>>0:~~+A((v-+(~~v>>>0))/4294967296.0)>>>0):0,!(0==0?(b[f+4>>2]&2146435072|0)==2146435072:0)):0){o=(r|0)==0&(s|0)==0;c=d;b[c>>2]=o?1:r;b[c+4>>2]=o?0:s;c=0}else c=1;s=c;T=t;return s|0}function Aa(a,c,d,g){a=a|0;c=c|0;d=d|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0.0;m=T;T=T+288|0;j=m+264|0;k=m+96|0;l=m;h=l;i=h+96|0;do{b[h>>2]=0;h=h+4|0}while((h|0)<(i|0));d=Ub(d,l)|0;if(d|0){g=d;T=m;return g|0}d=l;h=b[d>>2]|0;d=b[d+4>>2]|0;Pb(h,d,j)|0;Qb(h,d,k)|0;n=+ac(j,k+8|0);n=+A(+(+ac(a,c)/(n*2.0)));e[f>>3]=n;d=~~n>>>0;h=+q(n)>=1.0?(n>0.0?~~+C(+p(n/4294967296.0),4294967295.0)>>>0:~~+A((n-+(~~n>>>0))/4294967296.0)>>>0):0;if(0==0?(b[f+4>>2]&2146435072|0)==2146435072:0){g=1;T=m;return g|0}l=(d|0)==0&(h|0)==0;b[g>>2]=l?1:d;b[g+4>>2]=l?0:h;g=0;T=m;return g|0}function Ba(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;b[a>>2]=c;b[a+4>>2]=d;b[a+8>>2]=e;return}function Ca(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0.0;n=c+8|0;b[n>>2]=0;k=+e[a>>3];i=+q(+k);l=+e[a+8>>3];j=+q(+l)/.8660254037844386;i=i+j*.5;d=~~i;a=~~j;i=i-+(d|0);j=j-+(a|0);do if(i<.5)if(i<.3333333333333333){b[c>>2]=d;if(j<(i+1.0)*.5){b[c+4>>2]=a;break}else{a=a+1|0;b[c+4>>2]=a;break}}else{o=1.0-i;a=(!(j<o)&1)+a|0;b[c+4>>2]=a;if(o<=j&j<i*2.0){d=d+1|0;b[c>>2]=d;break}else{b[c>>2]=d;break}}else{if(!(i<.6666666666666666)){d=d+1|0;b[c>>2]=d;if(j<i*.5){b[c+4>>2]=a;break}else{a=a+1|0;b[c+4>>2]=a;break}}if(j<1.0-i){b[c+4>>2]=a;if(i*2.0+-1.0<j){b[c>>2]=d;break}}else{a=a+1|0;b[c+4>>2]=a}d=d+1|0;b[c>>2]=d}while(0);do if(k<0.0)if(!(a&1)){m=(a|0)/2|0;m=md(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;d=~~(+(d|0)-(+(m>>>0)+4294967296.0*+(H()|0))*2.0);b[c>>2]=d;break}else{m=(a+1|0)/2|0;m=md(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;d=~~(+(d|0)-((+(m>>>0)+4294967296.0*+(H()|0))*2.0+1.0));b[c>>2]=d;break}while(0);m=c+4|0;if(l<0.0){d=d-((a<<1|1|0)/2|0)|0;b[c>>2]=d;a=0-a|0;b[m>>2]=a}f=a-d|0;if((d|0)<0){g=0-d|0;b[m>>2]=f;b[n>>2]=g;b[c>>2]=0;a=f;d=0}else g=0;if((a|0)<0){d=d-a|0;b[c>>2]=d;g=g-a|0;b[n>>2]=g;b[m>>2]=0;a=0}h=d-g|0;f=a-g|0;if((g|0)<0){b[c>>2]=h;b[m>>2]=f;b[n>>2]=0;a=f;d=h;g=0}f=(a|0)<(d|0)?a:d;f=(g|0)<(f|0)?g:f;if((f|0)<=0)return;b[c>>2]=d-f;b[m>>2]=a-f;b[n>>2]=g-f;return}function Da(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;if((c|0)<0){d=d-c|0;b[h>>2]=d;g=a+8|0;b[g>>2]=(b[g>>2]|0)-c;b[a>>2]=0;c=0}if((d|0)<0){c=c-d|0;b[a>>2]=c;g=a+8|0;f=(b[g>>2]|0)-d|0;b[g>>2]=f;b[h>>2]=0;d=0}else{f=a+8|0;g=f;f=b[f>>2]|0}if((f|0)<0){c=c-f|0;b[a>>2]=c;d=d-f|0;b[h>>2]=d;b[g>>2]=0;f=0}e=(d|0)<(c|0)?d:c;e=(f|0)<(e|0)?f:e;if((e|0)<=0)return;b[a>>2]=c-e;b[h>>2]=d-e;b[g>>2]=f-e;return}function Ea(a,c){a=a|0;c=c|0;var d=0.0,f=0;f=b[a+8>>2]|0;d=+((b[a+4>>2]|0)-f|0);e[c>>3]=+((b[a>>2]|0)-f|0)-d*.5;e[c+8>>3]=d*.8660254037844386;return}function Fa(a,c,d){a=a|0;c=c|0;d=d|0;b[d>>2]=(b[c>>2]|0)+(b[a>>2]|0);b[d+4>>2]=(b[c+4>>2]|0)+(b[a+4>>2]|0);b[d+8>>2]=(b[c+8>>2]|0)+(b[a+8>>2]|0);return}function Ga(a,c,d){a=a|0;c=c|0;d=d|0;b[d>>2]=(b[a>>2]|0)-(b[c>>2]|0);b[d+4>>2]=(b[a+4>>2]|0)-(b[c+4>>2]|0);b[d+8>>2]=(b[a+8>>2]|0)-(b[c+8>>2]|0);return}function Ha(a,c){a=a|0;c=c|0;var d=0,e=0;d=B(b[a>>2]|0,c)|0;b[a>>2]=d;d=a+4|0;e=B(b[d>>2]|0,c)|0;b[d>>2]=e;a=a+8|0;c=B(b[a>>2]|0,c)|0;b[a>>2]=c;return}function Ia(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=b[a>>2]|0;i=(h|0)<0;e=(b[a+4>>2]|0)-(i?h:0)|0;g=(e|0)<0;f=(g?0-e|0:0)+((b[a+8>>2]|0)-(i?h:0))|0;d=(f|0)<0;a=d?0:f;c=(g?0:e)-(d?f:0)|0;f=(i?0:h)-(g?e:0)-(d?f:0)|0;d=(c|0)<(f|0)?c:f;d=(a|0)<(d|0)?a:d;e=(d|0)>0;a=a-(e?d:0)|0;c=c-(e?d:0)|0;a:do switch(f-(e?d:0)|0){case 0:switch(c|0){case 0:{i=(a|0)==0?0:(a|0)==1?1:7;return i|0}case 1:{i=(a|0)==0?2:(a|0)==1?3:7;return i|0}default:break a}case 1:switch(c|0){case 0:{i=(a|0)==0?4:(a|0)==1?5:7;return i|0}case 1:{if(!a)a=6;else break a;return a|0}default:break a}default:{}}while(0);i=7;return i|0}function Ja(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=b[h>>2]|0;g=(b[a>>2]|0)-f|0;i=a+4|0;f=(b[i>>2]|0)-f|0;do if(g>>>0>715827881|f>>>0>715827881){d=(g|0)>0;if(d){if((2147483647-g|0)<(g|0)){i=1;return i|0}if((2147483647-(g<<1)|0)<(g|0)){i=1;return i|0}}else{if((-2147483648-g|0)>(g|0)){i=1;return i|0}if((-2147483648-(g<<1)|0)>(g|0)){i=1;return i|0}}c=g*3|0;if((f|0)>0){if((2147483647-f|0)<(f|0)){i=1;return i|0}}else if((-2147483648-f|0)>(f|0)){i=1;return i|0}e=f<<1;if((g|0)>-1){if((c|-2147483648|0)>=(f|0)){i=1;return i|0}}else if((c^-2147483648|0)<(f|0)){i=1;return i|0}if(d){if((2147483647-g|0)<(e|0))c=1;else{d=e;break}return c|0}else{if((-2147483648-g|0)>(e|0))c=1;else{d=e;break}return c|0}}else{d=f<<1;c=g*3|0}while(0);e=hd(+(c-f|0)/7.0)|0;b[a>>2]=e;f=hd(+(d+g|0)/7.0)|0;b[i>>2]=f;b[h>>2]=0;d=(f|0)<(e|0);c=d?e:f;d=d?f:e;do if((d|0)<0){if((c|0)>0){if((c|-2147483648|0)<(d|0)&((d|0)!=-2147483648&(2147483647-c|0)>=(d|0)))break;I(23313,22444,355,22455)}if((d|0)==-2147483648|(-2147483648-c|0)>(d|0))I(23313,22444,355,22455);if((c|0)>-1){if((c|-2147483648|0)<(d|0))break;I(23313,22444,355,22455)}else{if((c^-2147483648|0)>=(d|0))break;I(23313,22444,355,22455)}}while(0);c=f-e|0;if((e|0)<0){d=0-e|0;b[i>>2]=c;b[h>>2]=d;b[a>>2]=0;e=0}else{c=f;d=0}if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0){i=0;return i|0}b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;i=0;return i|0}function Ka(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;f=b[h>>2]|0;g=(b[a>>2]|0)-f|0;i=a+4|0;f=(b[i>>2]|0)-f|0;do if(g>>>0>715827881|f>>>0>715827881){d=(g|0)>0;if(d){if((2147483647-g|0)<(g|0)){i=1;return i|0}}else if((-2147483648-g|0)>(g|0)){i=1;return i|0}c=g<<1;if((f|0)>0){if((2147483647-f|0)<(f|0)){i=1;return i|0}if((2147483647-(f<<1)|0)<(f|0)){i=1;return i|0}}else{if((-2147483648-f|0)>(f|0)){i=1;return i|0}if((-2147483648-(f<<1)|0)>(f|0)){i=1;return i|0}}e=f*3|0;if(d){if((2147483647-c|0)<(f|0)){i=1;return i|0}}else if((-2147483648-c|0)>(f|0)){i=1;return i|0}if((f|0)>-1){if((e|-2147483648|0)<(g|0)){d=e;break}else c=1;return c|0}else{if((e^-2147483648|0)<(g|0))c=1;else{d=e;break}return c|0}}else{d=f*3|0;c=g<<1}while(0);e=hd(+(c+f|0)/7.0)|0;b[a>>2]=e;f=hd(+(d-g|0)/7.0)|0;b[i>>2]=f;b[h>>2]=0;d=(f|0)<(e|0);c=d?e:f;d=d?f:e;do if((d|0)<0){if((c|0)>0){if((c|-2147483648|0)<(d|0)&((d|0)!=-2147483648&(2147483647-c|0)>=(d|0)))break;I(23313,22444,404,22469)}if((d|0)==-2147483648|(-2147483648-c|0)>(d|0))I(23313,22444,404,22469);if((c|0)>-1){if((c|-2147483648|0)<(d|0))break;I(23313,22444,404,22469)}else{if((c^-2147483648|0)>=(d|0))break;I(23313,22444,404,22469)}}while(0);c=f-e|0;if((e|0)<0){d=0-e|0;b[i>>2]=c;b[h>>2]=d;b[a>>2]=0;e=0}else{c=f;d=0}if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0){i=0;return i|0}b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;i=0;return i|0}function La(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=b[h>>2]|0;c=(b[a>>2]|0)-d|0;i=a+4|0;d=(b[i>>2]|0)-d|0;e=hd(+((c*3|0)-d|0)/7.0)|0;b[a>>2]=e;c=hd(+((d<<1)+c|0)/7.0)|0;b[i>>2]=c;b[h>>2]=0;d=c-e|0;if((e|0)<0){g=0-e|0;b[i>>2]=d;b[h>>2]=g;b[a>>2]=0;c=d;e=0;d=g}else d=0;if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0)return;b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;return}function Ma(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;h=a+8|0;d=b[h>>2]|0;c=(b[a>>2]|0)-d|0;i=a+4|0;d=(b[i>>2]|0)-d|0;e=hd(+((c<<1)+d|0)/7.0)|0;b[a>>2]=e;c=hd(+((d*3|0)-c|0)/7.0)|0;b[i>>2]=c;b[h>>2]=0;d=c-e|0;if((e|0)<0){g=0-e|0;b[i>>2]=d;b[h>>2]=g;b[a>>2]=0;c=d;e=0;d=g}else d=0;if((c|0)<0){e=e-c|0;b[a>>2]=e;d=d-c|0;b[h>>2]=d;b[i>>2]=0;c=0}g=e-d|0;f=c-d|0;if((d|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;c=f;f=g;d=0}else f=e;e=(c|0)<(f|0)?c:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0)return;b[a>>2]=f-e;b[i>>2]=c-e;b[h>>2]=d-e;return}function Na(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;i=a+8|0;e=b[i>>2]|0;f=d+(c*3|0)|0;b[a>>2]=f;d=e+(d*3|0)|0;b[h>>2]=d;c=(e*3|0)+c|0;b[i>>2]=c;e=d-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=e;b[i>>2]=c;b[a>>2]=0;d=e;e=0}else e=f;if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Oa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=(c*3|0)+f|0;f=d+(f*3|0)|0;b[a>>2]=f;b[h>>2]=e;c=(d*3|0)+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;f=0}else d=e;if((d|0)<0){f=f-d|0;b[a>>2]=f;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=f-c|0;e=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=e;b[i>>2]=0;f=g;c=0}else e=d;d=(e|0)<(f|0)?e:f;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=f-d;b[h>>2]=e-d;b[i>>2]=c-d;return}function Pa(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;if((c+-1|0)>>>0>=6)return;f=(b[15440+(c*12|0)>>2]|0)+(b[a>>2]|0)|0;b[a>>2]=f;i=a+4|0;e=(b[15440+(c*12|0)+4>>2]|0)+(b[i>>2]|0)|0;b[i>>2]=e;h=a+8|0;c=(b[15440+(c*12|0)+8>>2]|0)+(b[h>>2]|0)|0;b[h>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[i>>2]=d;b[h>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[h>>2]=c;b[i>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[i>>2]=f;b[h>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[i>>2]=f-d;b[h>>2]=c-d;return}function Qa(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=c+f|0;f=d+f|0;b[a>>2]=f;b[h>>2]=e;c=d+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Ra(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;e=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;f=e+c|0;b[a>>2]=f;e=d+e|0;b[h>>2]=e;c=d+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;e=0}else{d=e;e=f}if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Sa(a){a=a|0;switch(a|0){case 1:{a=5;break}case 5:{a=4;break}case 4:{a=6;break}case 6:{a=2;break}case 2:{a=3;break}case 3:{a=1;break}default:{}}return a|0}function Ta(a){a=a|0;switch(a|0){case 1:{a=3;break}case 3:{a=2;break}case 2:{a=6;break}case 6:{a=4;break}case 4:{a=5;break}case 5:{a=1;break}default:{}}return a|0}function Ua(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;c=b[a>>2]|0;h=a+4|0;d=b[h>>2]|0;i=a+8|0;e=b[i>>2]|0;f=d+(c<<1)|0;b[a>>2]=f;d=e+(d<<1)|0;b[h>>2]=d;c=(e<<1)+c|0;b[i>>2]=c;e=d-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=e;b[i>>2]=c;b[a>>2]=0;d=e;e=0}else e=f;if((d|0)<0){e=e-d|0;b[a>>2]=e;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=e-c|0;f=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=f;b[i>>2]=0;e=g;c=0}else f=d;d=(f|0)<(e|0)?f:e;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=e-d;b[h>>2]=f-d;b[i>>2]=c-d;return}function Va(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;f=b[a>>2]|0;h=a+4|0;c=b[h>>2]|0;i=a+8|0;d=b[i>>2]|0;e=(c<<1)+f|0;f=d+(f<<1)|0;b[a>>2]=f;b[h>>2]=e;c=(d<<1)+c|0;b[i>>2]=c;d=e-f|0;if((f|0)<0){c=c-f|0;b[h>>2]=d;b[i>>2]=c;b[a>>2]=0;f=0}else d=e;if((d|0)<0){f=f-d|0;b[a>>2]=f;c=c-d|0;b[i>>2]=c;b[h>>2]=0;d=0}g=f-c|0;e=d-c|0;if((c|0)<0){b[a>>2]=g;b[h>>2]=e;b[i>>2]=0;f=g;c=0}else e=d;d=(e|0)<(f|0)?e:f;d=(c|0)<(d|0)?c:d;if((d|0)<=0)return;b[a>>2]=f-d;b[h>>2]=e-d;b[i>>2]=c-d;return}function Wa(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=(b[a>>2]|0)-(b[c>>2]|0)|0;i=(h|0)<0;e=(b[a+4>>2]|0)-(b[c+4>>2]|0)-(i?h:0)|0;g=(e|0)<0;f=(i?0-h|0:0)+(b[a+8>>2]|0)-(b[c+8>>2]|0)+(g?0-e|0:0)|0;a=(f|0)<0;c=a?0:f;d=(g?0:e)-(a?f:0)|0;f=(i?0:h)-(g?e:0)-(a?f:0)|0;a=(d|0)<(f|0)?d:f;a=(c|0)<(a|0)?c:a;e=(a|0)>0;c=c-(e?a:0)|0;d=d-(e?a:0)|0;a=f-(e?a:0)|0;a=(a|0)>-1?a:0-a|0;d=(d|0)>-1?d:0-d|0;c=(c|0)>-1?c:0-c|0;c=(d|0)>(c|0)?d:c;return ((a|0)>(c|0)?a:c)|0}function Xa(a,c){a=a|0;c=c|0;var d=0;d=b[a+8>>2]|0;b[c>>2]=(b[a>>2]|0)-d;b[c+4>>2]=(b[a+4>>2]|0)-d;return}function Ya(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;e=b[a>>2]|0;b[c>>2]=e;f=b[a+4>>2]|0;h=c+4|0;b[h>>2]=f;i=c+8|0;b[i>>2]=0;d=(f|0)<(e|0);a=d?e:f;d=d?f:e;do if((d|0)<0){if((a|0)>0){if((a|-2147483648|0)<(d|0)&((d|0)!=-2147483648&(2147483647-a|0)>=(d|0)))break;else a=1;return a|0}if((d|0)==-2147483648|(-2147483648-a|0)>(d|0)){c=1;return c|0}if((a|0)>-1){if((a|-2147483648|0)<(d|0))break;else a=1;return a|0}else{if((a^-2147483648|0)<(d|0))a=1;else break;return a|0}}while(0);a=f-e|0;if((e|0)<0){d=0-e|0;b[h>>2]=a;b[i>>2]=d;b[c>>2]=0;e=0}else{a=f;d=0}if((a|0)<0){e=e-a|0;b[c>>2]=e;d=d-a|0;b[i>>2]=d;b[h>>2]=0;a=0}g=e-d|0;f=a-d|0;if((d|0)<0){b[c>>2]=g;b[h>>2]=f;b[i>>2]=0;a=f;f=g;d=0}else f=e;e=(a|0)<(f|0)?a:f;e=(d|0)<(e|0)?d:e;if((e|0)<=0){c=0;return c|0}b[c>>2]=f-e;b[h>>2]=a-e;b[i>>2]=d-e;c=0;return c|0}function Za(a){a=a|0;var c=0,d=0,e=0,f=0;c=a+8|0;f=b[c>>2]|0;d=f-(b[a>>2]|0)|0;b[a>>2]=d;e=a+4|0;a=(b[e>>2]|0)-f|0;b[e>>2]=a;b[c>>2]=0-(a+d);return}function _a(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;d=b[a>>2]|0;c=0-d|0;b[a>>2]=c;h=a+8|0;b[h>>2]=0;i=a+4|0;e=b[i>>2]|0;f=e+d|0;if((d|0)>0){b[i>>2]=f;b[h>>2]=d;b[a>>2]=0;c=0;e=f}else d=0;if((e|0)<0){g=c-e|0;b[a>>2]=g;d=d-e|0;b[h>>2]=d;b[i>>2]=0;f=g-d|0;c=0-d|0;if((d|0)<0){b[a>>2]=f;b[i>>2]=c;b[h>>2]=0;e=c;d=0}else{e=0;f=g}}else f=c;c=(e|0)<(f|0)?e:f;c=(d|0)<(c|0)?d:c;if((c|0)<=0)return;b[a>>2]=f-c;b[i>>2]=e-c;b[h>>2]=d-c;return}function $a(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=T;T=T+64|0;l=m;i=m+56|0;if(!(0==0&(c&2013265920|0)==134217728&(0==0&(e&2013265920|0)==134217728))){f=5;T=m;return f|0}if((a|0)==(d|0)&(c|0)==(e|0)){b[f>>2]=0;f=0;T=m;return f|0}h=vd(a|0,c|0,52)|0;H()|0;h=h&15;k=vd(d|0,e|0,52)|0;H()|0;if((h|0)!=(k&15|0)){f=12;T=m;return f|0}g=h+-1|0;if(h>>>0>1){vb(a,c,g,l)|0;vb(d,e,g,i)|0;k=l;j=b[k>>2]|0;k=b[k+4>>2]|0;a:do if((j|0)==(b[i>>2]|0)?(k|0)==(b[i+4>>2]|0):0){h=(h^15)*3|0;g=vd(a|0,c|0,h|0)|0;H()|0;g=g&7;h=vd(d|0,e|0,h|0)|0;H()|0;h=h&7;do if(!((g|0)==0|(h|0)==0))if((g|0)==7)g=5;else{if((g|0)==1|(h|0)==1?xb(j,k)|0:0){g=5;break}if((b[15536+(g<<2)>>2]|0)!=(h|0)?(b[15568+(g<<2)>>2]|0)!=(h|0):0)break a;b[f>>2]=1;g=0}else{b[f>>2]=1;g=0}while(0);f=g;T=m;return f|0}while(0)}g=l;h=g+56|0;do{b[g>>2]=0;g=g+4|0}while((g|0)<(h|0));aa(a,c,1,l)|0;c=l;if(((((!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)?(c=l+8|0,!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)):0)?(c=l+16|0,!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)):0)?(c=l+24|0,!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)):0)?(c=l+32|0,!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)):0)?(c=l+40|0,!((b[c>>2]|0)==(d|0)?(b[c+4>>2]|0)==(e|0):0)):0){g=l+48|0;g=((b[g>>2]|0)==(d|0)?(b[g+4>>2]|0)==(e|0):0)&1}else g=1;b[f>>2]=g;f=0;T=m;return f|0}function ab(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;d=fa(a,c,d,e)|0;if((d|0)==7){f=11;return f|0}e=wd(d|0,0,56)|0;c=c&-2130706433|(H()|0)|268435456;b[f>>2]=a|e;b[f+4>>2]=c;f=0;return f|0}function bb(a,c,d){a=a|0;c=c|0;d=d|0;if(!(0==0&(c&2013265920|0)==268435456)){d=6;return d|0}b[d>>2]=a;b[d+4>>2]=c&-2130706433|134217728;d=0;return d|0}function cb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;f=T;T=T+16|0;e=f;b[e>>2]=0;if(!(0==0&(c&2013265920|0)==268435456)){e=6;T=f;return e|0}g=vd(a|0,c|0,56)|0;H()|0;e=ea(a,c&-2130706433|134217728,g&7,e,d)|0;T=f;return e|0}function db(a,b){a=a|0;b=b|0;var c=0;c=vd(a|0,b|0,56)|0;H()|0;switch(c&7){case 0:case 7:{c=0;return c|0}default:{}}c=b&-2130706433|134217728;if(!(0==0&(b&2013265920|0)==268435456)){c=0;return c|0}if(0==0&(b&117440512|0)==16777216&(xb(a,c)|0)!=0){c=0;return c|0}c=ub(a,c)|0;return c|0}function eb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=T;T=T+16|0;e=f;if(!(0==0&(c&2013265920|0)==268435456)){e=6;T=f;return e|0}g=c&-2130706433|134217728;h=d;b[h>>2]=a;b[h+4>>2]=g;b[e>>2]=0;c=vd(a|0,c|0,56)|0;H()|0;e=ea(a,g,c&7,e,d+8|0)|0;T=f;return e|0}function fb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=(xb(a,c)|0)==0;c=c&-2130706433;e=d;b[e>>2]=f?a:0;b[e+4>>2]=f?c|285212672:0;e=d+8|0;b[e>>2]=a;b[e+4>>2]=c|301989888;e=d+16|0;b[e>>2]=a;b[e+4>>2]=c|318767104;e=d+24|0;b[e>>2]=a;b[e+4>>2]=c|335544320;e=d+32|0;b[e>>2]=a;b[e+4>>2]=c|352321536;d=d+40|0;b[d>>2]=a;b[d+4>>2]=c|369098752;return 0}function gb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=T;T=T+16|0;f=h;g=c&-2130706433|134217728;if(!(0==0&(c&2013265920|0)==268435456)){g=6;T=h;return g|0}e=vd(a|0,c|0,56)|0;H()|0;e=Uc(a,g,e&7)|0;if((e|0)==-1){b[d>>2]=0;g=6;T=h;return g|0}if(Ob(a,g,f)|0)I(23313,22484,282,22499);c=vd(a|0,c|0,52)|0;H()|0;c=c&15;if(!(xb(a,g)|0))qb(f,c,e,2,d);else mb(f,c,e,2,d);g=0;T=h;return g|0}function hb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=T;T=T+16|0;e=d;ib(a,b,c,e);Ca(e,c+4|0);T=d;return}function ib(a,c,d,f){a=a|0;c=c|0;d=d|0;f=f|0;var g=0.0,h=0.0,i=0.0,j=0,k=0;j=T;T=T+16|0;k=j;jb(a,d,k);h=+w(+(1.0-+e[k>>3]*.5));if(h<1.0e-16){b[f>>2]=0;b[f+4>>2]=0;b[f+8>>2]=0;b[f+12>>2]=0;T=j;return}k=b[d>>2]|0;g=+e[15920+(k*24|0)>>3];g=+Zb(g-+Zb(+cc(15600+(k<<4)|0,a)));if(!(Lb(c)|0))i=g;else i=+Zb(g+-.3334731722518321);g=+v(+h)/.381966011250105;if((c|0)>0){a=0;do{g=g*2.6457513110645907;a=a+1|0}while((a|0)!=(c|0))}h=+t(+i)*g;e[f>>3]=h;i=+u(+i)*g;e[f+8>>3]=i;T=j;return}function jb(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0,h=0;h=T;T=T+32|0;g=h;Tc(a,g);b[c>>2]=0;e[d>>3]=5.0;f=+Sc(16400,g);if(f<+e[d>>3]){b[c>>2]=0;e[d>>3]=f}f=+Sc(16424,g);if(f<+e[d>>3]){b[c>>2]=1;e[d>>3]=f}f=+Sc(16448,g);if(f<+e[d>>3]){b[c>>2]=2;e[d>>3]=f}f=+Sc(16472,g);if(f<+e[d>>3]){b[c>>2]=3;e[d>>3]=f}f=+Sc(16496,g);if(f<+e[d>>3]){b[c>>2]=4;e[d>>3]=f}f=+Sc(16520,g);if(f<+e[d>>3]){b[c>>2]=5;e[d>>3]=f}f=+Sc(16544,g);if(f<+e[d>>3]){b[c>>2]=6;e[d>>3]=f}f=+Sc(16568,g);if(f<+e[d>>3]){b[c>>2]=7;e[d>>3]=f}f=+Sc(16592,g);if(f<+e[d>>3]){b[c>>2]=8;e[d>>3]=f}f=+Sc(16616,g);if(f<+e[d>>3]){b[c>>2]=9;e[d>>3]=f}f=+Sc(16640,g);if(f<+e[d>>3]){b[c>>2]=10;e[d>>3]=f}f=+Sc(16664,g);if(f<+e[d>>3]){b[c>>2]=11;e[d>>3]=f}f=+Sc(16688,g);if(f<+e[d>>3]){b[c>>2]=12;e[d>>3]=f}f=+Sc(16712,g);if(f<+e[d>>3]){b[c>>2]=13;e[d>>3]=f}f=+Sc(16736,g);if(f<+e[d>>3]){b[c>>2]=14;e[d>>3]=f}f=+Sc(16760,g);if(f<+e[d>>3]){b[c>>2]=15;e[d>>3]=f}f=+Sc(16784,g);if(f<+e[d>>3]){b[c>>2]=16;e[d>>3]=f}f=+Sc(16808,g);if(f<+e[d>>3]){b[c>>2]=17;e[d>>3]=f}f=+Sc(16832,g);if(f<+e[d>>3]){b[c>>2]=18;e[d>>3]=f}f=+Sc(16856,g);if(!(f<+e[d>>3])){T=h;return}b[c>>2]=19;e[d>>3]=f;T=h;return}function kb(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0.0,i=0.0;h=+Pc(a);if(h<1.0e-16){c=15600+(c<<4)|0;b[g>>2]=b[c>>2];b[g+4>>2]=b[c+4>>2];b[g+8>>2]=b[c+8>>2];b[g+12>>2]=b[c+12>>2];return}i=+z(+(+e[a+8>>3]),+(+e[a>>3]));if((d|0)>0){a=0;do{h=h/2.6457513110645907;a=a+1|0}while((a|0)!=(d|0))}if(!f){h=+y(+(h*.381966011250105));if(Lb(d)|0)i=+Zb(i+.3334731722518321)}else{h=h/3.0;d=(Lb(d)|0)==0;h=+y(+((d?h:h/2.6457513110645907)*.381966011250105))}dc(15600+(c<<4)|0,+Zb(+e[15920+(c*24|0)>>3]-i),h,g);return}function lb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;e=T;T=T+16|0;f=e;Ea(a+4|0,f);kb(f,b[a>>2]|0,c,0,d);T=e;return}function mb(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,J=0.0;G=T;T=T+272|0;h=G+256|0;u=G+240|0;D=G;E=G+224|0;F=G+208|0;v=G+176|0;w=G+160|0;x=G+192|0;y=G+144|0;z=G+128|0;A=G+112|0;B=G+96|0;C=G+80|0;b[h>>2]=c;b[u>>2]=b[a>>2];b[u+4>>2]=b[a+4>>2];b[u+8>>2]=b[a+8>>2];b[u+12>>2]=b[a+12>>2];nb(u,h,D);b[g>>2]=0;u=f+d+((f|0)==5&1)|0;if((u|0)<=(d|0)){T=G;return}k=b[h>>2]|0;l=E+4|0;m=v+4|0;n=d+5|0;o=16880+(k<<2)|0;p=16960+(k<<2)|0;q=z+8|0;r=A+8|0;s=B+8|0;t=F+4|0;j=d;a:while(1){i=D+(((j|0)%5|0)<<4)|0;b[F>>2]=b[i>>2];b[F+4>>2]=b[i+4>>2];b[F+8>>2]=b[i+8>>2];b[F+12>>2]=b[i+12>>2];do{}while((ob(F,k,0,1)|0)==2);if((j|0)>(d|0)&(Lb(c)|0)!=0){b[v>>2]=b[F>>2];b[v+4>>2]=b[F+4>>2];b[v+8>>2]=b[F+8>>2];b[v+12>>2]=b[F+12>>2];Ea(l,w);f=b[v>>2]|0;h=b[17040+(f*80|0)+(b[E>>2]<<2)>>2]|0;b[v>>2]=b[18640+(f*80|0)+(h*20|0)>>2];i=b[18640+(f*80|0)+(h*20|0)+16>>2]|0;if((i|0)>0){a=0;do{Qa(m);a=a+1|0}while((a|0)<(i|0))}i=18640+(f*80|0)+(h*20|0)+4|0;b[x>>2]=b[i>>2];b[x+4>>2]=b[i+4>>2];b[x+8>>2]=b[i+8>>2];Ha(x,(b[o>>2]|0)*3|0);Fa(m,x,m);Da(m);Ea(m,y);H=+(b[p>>2]|0);e[z>>3]=H*3.0;e[q>>3]=0.0;J=H*-1.5;e[A>>3]=J;e[r>>3]=H*2.598076211353316;e[B>>3]=J;e[s>>3]=H*-2.598076211353316;switch(b[17040+((b[v>>2]|0)*80|0)+(b[F>>2]<<2)>>2]|0){case 1:{a=A;f=z;break}case 3:{a=B;f=A;break}case 2:{a=z;f=B;break}default:{a=12;break a}}Qc(w,y,f,a,C);kb(C,b[v>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}if((j|0)<(n|0)){Ea(t,v);kb(v,b[F>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1};b[E>>2]=b[F>>2];b[E+4>>2]=b[F+4>>2];b[E+8>>2]=b[F+8>>2];b[E+12>>2]=b[F+12>>2];j=j+1|0;if((j|0)>=(u|0)){a=3;break}}if((a|0)==3){T=G;return}else if((a|0)==12)I(22522,22569,571,22579)}function nb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=T;T=T+128|0;e=j+64|0;f=j;g=e;h=20240;i=g+60|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=f;h=20304;i=g+60|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));i=(Lb(b[c>>2]|0)|0)==0;e=i?e:f;f=a+4|0;Ua(f);Va(f);if(Lb(b[c>>2]|0)|0){Oa(f);b[c>>2]=(b[c>>2]|0)+1}b[d>>2]=b[a>>2];c=d+4|0;Fa(f,e,c);Da(c);b[d+16>>2]=b[a>>2];c=d+20|0;Fa(f,e+12|0,c);Da(c);b[d+32>>2]=b[a>>2];c=d+36|0;Fa(f,e+24|0,c);Da(c);b[d+48>>2]=b[a>>2];c=d+52|0;Fa(f,e+36|0,c);Da(c);b[d+64>>2]=b[a>>2];d=d+68|0;Fa(f,e+48|0,d);Da(d);T=j;return}function ob(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=T;T=T+32|0;n=p+12|0;i=p;o=a+4|0;m=b[16960+(c<<2)>>2]|0;l=(e|0)!=0;m=l?m*3|0:m;f=b[o>>2]|0;k=a+8|0;h=b[k>>2]|0;if(l){g=a+12|0;e=b[g>>2]|0;f=h+f+e|0;if((f|0)==(m|0)){o=1;T=p;return o|0}else j=g}else{j=a+12|0;e=b[j>>2]|0;f=h+f+e|0}if((f|0)<=(m|0)){o=0;T=p;return o|0}do if((e|0)>0){e=b[a>>2]|0;if((h|0)>0){g=18640+(e*80|0)+60|0;e=a;break}e=18640+(e*80|0)+40|0;if(!d){g=e;e=a}else{Ba(n,m,0,0);Ga(o,n,i);Ra(i);Fa(i,n,o);g=e;e=a}}else{g=18640+((b[a>>2]|0)*80|0)+20|0;e=a}while(0);b[e>>2]=b[g>>2];f=g+16|0;if((b[f>>2]|0)>0){e=0;do{Qa(o);e=e+1|0}while((e|0)<(b[f>>2]|0))}a=g+4|0;b[n>>2]=b[a>>2];b[n+4>>2]=b[a+4>>2];b[n+8>>2]=b[a+8>>2];c=b[16880+(c<<2)>>2]|0;Ha(n,l?c*3|0:c);Fa(o,n,o);Da(o);if(l)e=((b[k>>2]|0)+(b[o>>2]|0)+(b[j>>2]|0)|0)==(m|0)?1:2;else e=2;o=e;T=p;return o|0}function pb(a,b){a=a|0;b=b|0;var c=0;do c=ob(a,b,0,1)|0;while((c|0)==2);return c|0}function qb(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0;B=T;T=T+240|0;h=B+224|0;x=B+208|0;y=B;z=B+192|0;A=B+176|0;s=B+160|0;t=B+144|0;u=B+128|0;v=B+112|0;w=B+96|0;b[h>>2]=c;b[x>>2]=b[a>>2];b[x+4>>2]=b[a+4>>2];b[x+8>>2]=b[a+8>>2];b[x+12>>2]=b[a+12>>2];rb(x,h,y);b[g>>2]=0;r=f+d+((f|0)==6&1)|0;if((r|0)<=(d|0)){T=B;return}k=b[h>>2]|0;l=d+6|0;m=16960+(k<<2)|0;n=t+8|0;o=u+8|0;p=v+8|0;q=z+4|0;i=0;j=d;f=-1;a:while(1){h=(j|0)%6|0;a=y+(h<<4)|0;b[z>>2]=b[a>>2];b[z+4>>2]=b[a+4>>2];b[z+8>>2]=b[a+8>>2];b[z+12>>2]=b[a+12>>2];a=i;i=ob(z,k,0,1)|0;if((j|0)>(d|0)&(Lb(c)|0)!=0?((a|0)!=1?(b[z>>2]|0)!=(f|0):0):0){Ea(y+(((h+5|0)%6|0)<<4)+4|0,A);Ea(y+(h<<4)+4|0,s);C=+(b[m>>2]|0);e[t>>3]=C*3.0;e[n>>3]=0.0;D=C*-1.5;e[u>>3]=D;e[o>>3]=C*2.598076211353316;e[v>>3]=D;e[p>>3]=C*-2.598076211353316;h=b[x>>2]|0;switch(b[17040+(h*80|0)+(((f|0)==(h|0)?b[z>>2]|0:f)<<2)>>2]|0){case 1:{a=u;f=t;break}case 3:{a=v;f=u;break}case 2:{a=t;f=v;break}default:{a=8;break a}}Qc(A,s,f,a,w);if(!(Rc(A,w)|0)?!(Rc(s,w)|0):0){kb(w,b[x>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}}if((j|0)<(l|0)){Ea(q,A);kb(A,b[z>>2]|0,k,1,g+8+(b[g>>2]<<4)|0);b[g>>2]=(b[g>>2]|0)+1}j=j+1|0;if((j|0)>=(r|0)){a=3;break}else f=b[z>>2]|0}if((a|0)==3){T=B;return}else if((a|0)==8)I(22606,22569,736,22651)}function rb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=T;T=T+160|0;e=j+80|0;f=j;g=e;h=20368;i=g+72|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=f;h=20448;i=g+72|0;do{b[g>>2]=b[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));i=(Lb(b[c>>2]|0)|0)==0;e=i?e:f;f=a+4|0;Ua(f);Va(f);if(Lb(b[c>>2]|0)|0){Oa(f);b[c>>2]=(b[c>>2]|0)+1}b[d>>2]=b[a>>2];c=d+4|0;Fa(f,e,c);Da(c);b[d+16>>2]=b[a>>2];c=d+20|0;Fa(f,e+12|0,c);Da(c);b[d+32>>2]=b[a>>2];c=d+36|0;Fa(f,e+24|0,c);Da(c);b[d+48>>2]=b[a>>2];c=d+52|0;Fa(f,e+36|0,c);Da(c);b[d+64>>2]=b[a>>2];c=d+68|0;Fa(f,e+48|0,c);Da(c);b[d+80>>2]=b[a>>2];d=d+84|0;Fa(f,e+60|0,d);Da(d);T=j;return}function sb(a,b){a=a|0;b=b|0;b=vd(a|0,b|0,52)|0;H()|0;return b&15|0}function tb(a,b){a=a|0;b=b|0;b=vd(a|0,b|0,45)|0;H()|0;return b&127|0}function ub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0;if(!(0==0&(b&-16777216|0)==134217728)){b=0;return b|0}g=vd(a|0,b|0,45)|0;H()|0;g=g&127;if(g>>>0>121){b=0;return b|0}c=vd(a|0,b|0,52)|0;H()|0;c=c&15;do if(c|0){e=1;d=0;while(1){f=vd(a|0,b|0,(15-e|0)*3|0)|0;H()|0;f=f&7;if((f|0)!=0&(d^1))if((f|0)==1&(ma(g)|0)!=0){h=0;d=13;break}else d=1;if((f|0)==7){h=0;d=13;break}if(e>>>0<c>>>0)e=e+1|0;else{d=9;break}}if((d|0)==9){if((c|0)==15)h=1;else break;return h|0}else if((d|0)==13)return h|0}while(0);while(1){h=vd(a|0,b|0,(14-c|0)*3|0)|0;H()|0;if(!((h&7|0)==7&0==0)){h=0;d=13;break}if(c>>>0<14)c=c+1|0;else{h=1;d=13;break}}if((d|0)==13)return h|0;return 0}function vb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=vd(a|0,c|0,52)|0;H()|0;g=g&15;if(d>>>0>15){e=4;return e|0}if((g|0)<(d|0)){e=12;return e|0}if((g|0)==(d|0)){b[e>>2]=a;b[e+4>>2]=c;e=0;return e|0}f=wd(d|0,0,52)|0;f=f|a;a=H()|0|c&-15728641;if((g|0)>(d|0))do{c=wd(7,0,(14-d|0)*3|0)|0;d=d+1|0;f=c|f;a=H()|0|a}while((d|0)<(g|0));b[e>>2]=f;b[e+4>>2]=a;e=0;return e|0}function wb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=vd(a|0,c|0,52)|0;H()|0;g=g&15;if(!((d|0)<16&(g|0)<=(d|0))){e=4;return e|0}f=d-g|0;d=vd(a|0,c|0,45)|0;H()|0;a:do if(!(ma(d&127)|0)){d=Cc(7,0,f,((f|0)<0)<<31>>31)|0;f=H()|0}else{b:do if(g|0){d=1;while(1){h=wd(7,0,(15-d|0)*3|0)|0;if(!((h&a|0)==0&((H()|0)&c|0)==0))break;if(d>>>0<g>>>0)d=d+1|0;else break b}d=Cc(7,0,f,((f|0)<0)<<31>>31)|0;f=H()|0;break a}while(0);d=Cc(7,0,f,((f|0)<0)<<31>>31)|0;d=rd(d|0,H()|0,5,0)|0;d=ld(d|0,H()|0,-5,-1)|0;d=pd(d|0,H()|0,6,0)|0;d=ld(d|0,H()|0,1,0)|0;f=H()|0}while(0);h=e;b[h>>2]=d;b[h+4>>2]=f;h=0;return h|0}function xb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=vd(a|0,b|0,45)|0;H()|0;if(!(ma(e&127)|0)){e=0;return e|0}e=vd(a|0,b|0,52)|0;H()|0;e=e&15;a:do if(!e)c=0;else{d=1;while(1){c=vd(a|0,b|0,(15-d|0)*3|0)|0;H()|0;c=c&7;if(c|0)break a;if(d>>>0<e>>>0)d=d+1|0;else{c=0;break}}}while(0);e=(c|0)==0&1;return e|0}function yb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=T;T=T+16|0;g=h;Xb(g,a,c,d);c=g;a=b[c>>2]|0;c=b[c+4>>2]|0;if((a|0)==0&(c|0)==0){T=h;return 0}f=0;d=0;do{i=e+(f<<3)|0;b[i>>2]=a;b[i+4>>2]=c;f=ld(f|0,d|0,1,0)|0;d=H()|0;Yb(g);i=g;a=b[i>>2]|0;c=b[i+4>>2]|0}while(!((a|0)==0&(c|0)==0));T=h;return 0}function zb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((d|0)<(c|0)){c=b;d=a;G(c|0);return d|0}c=wd(-1,-1,((d-c|0)*3|0)+3|0)|0;d=wd(~c|0,~(H()|0)|0,(15-d|0)*3|0)|0;c=~(H()|0)&b;d=~d&a;G(c|0);return d|0}function Ab(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0;f=vd(a|0,c|0,52)|0;H()|0;f=f&15;if(!((d|0)<16&(f|0)<=(d|0))){e=4;return e|0}if((f|0)<(d|0)){f=wd(-1,-1,((d+-1-f|0)*3|0)+3|0)|0;f=wd(~f|0,~(H()|0)|0,(15-d|0)*3|0)|0;c=~(H()|0)&c;a=~f&a}f=wd(d|0,0,52)|0;d=c&-15728641|(H()|0);b[e>>2]=a|f;b[e+4>>2]=d;e=0;return e|0}function Bb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;if((d|0)==0&(e|0)==0){y=0;return y|0}f=a;g=b[f>>2]|0;f=b[f+4>>2]|0;if(0==0&(f&15728640|0)==0){if(!((e|0)>0|(e|0)==0&d>>>0>0)){y=0;return y|0}y=c;b[y>>2]=g;b[y+4>>2]=f;if((d|0)==1&(e|0)==0){y=0;return y|0}f=1;do{w=a+(f<<3)|0;x=b[w+4>>2]|0;y=c+(f<<3)|0;b[y>>2]=b[w>>2];b[y+4>>2]=x;f=f+1|0}while(0<(e|0)|0==(e|0)&f>>>0<d>>>0);f=0;return f|0}v=d<<3;x=id(v)|0;if(!x){y=13;return y|0}Ad(x|0,a|0,v|0)|0;w=kd(d,8)|0;if(!w){jd(x);y=13;return y|0}a:do if(d|0){b:while(1){f=x;s=b[f>>2]|0;f=b[f+4>>2]|0;t=vd(s|0,f|0,52)|0;H()|0;t=t&15;u=t+-1|0;r=(d|0)>0;c:do if((t|0)!=0&r){o=((d|0)<0)<<31>>31;p=wd(u|0,0,52)|0;q=H()|0;if(u>>>0>15){if(!((s|0)==0&(f|0)==0)){y=17;break b}g=0;while(1){g=g+1|0;if((g|0)>=(d|0))break c;e=x+(g<<3)|0;q=b[e>>2]|0;e=b[e+4>>2]|0;if(!((q|0)==0&(e|0)==0)){f=e;y=17;break b}}}g=0;a=s;e=f;while(1){if(!((a|0)==0&(e|0)==0)){if(!(0==0&(e&117440512|0)==0)){y=22;break b}i=vd(a|0,e|0,52)|0;H()|0;i=i&15;if((i|0)<(u|0)){f=12;y=28;break b}if((i|0)!=(u|0)){a=a|p;e=e&-15728641|q;if(i>>>0>=t>>>0){h=u;do{n=wd(7,0,(14-h|0)*3|0)|0;h=h+1|0;a=n|a;e=H()|0|e}while(h>>>0<i>>>0)}}h=td(a|0,e|0,d|0,o|0)|0;H()|0;k=w+(h<<3)|0;i=k;j=b[i>>2]|0;i=b[i+4>>2]|0;if((j|0)==0&(i|0)==0)h=k;else{n=0;while(1){if((n|0)>(d|0)){y=32;break b}if((j|0)==(a|0)&(i&-117440513|0)==(e|0)){l=vd(j|0,i|0,56)|0;H()|0;l=l&7;m=l+1|0;z=vd(j|0,i|0,45)|0;H()|0;d:do if(!(ma(z&127)|0))i=7;else{j=vd(j|0,i|0,52)|0;H()|0;j=j&15;if(!j){i=6;break}i=1;while(1){z=wd(7,0,(15-i|0)*3|0)|0;if(!((z&a|0)==0&((H()|0)&e|0)==0)){i=7;break d}if(i>>>0<j>>>0)i=i+1|0;else{i=6;break}}}while(0);if((l+2|0)>>>0>i>>>0){y=42;break b}z=wd(m|0,0,56)|0;e=H()|0|e&-117440513;m=k;b[m>>2]=0;b[m+4>>2]=0;a=z|a}else h=(h+1|0)%(d|0)|0;k=w+(h<<3)|0;i=k;j=b[i>>2]|0;i=b[i+4>>2]|0;if((j|0)==0&(i|0)==0){h=k;break}else n=n+1|0}}z=h;b[z>>2]=a;b[z+4>>2]=e}g=g+1|0;if((g|0)>=(d|0))break c;e=x+(g<<3)|0;a=b[e>>2]|0;e=b[e+4>>2]|0}}while(0);if((d+5|0)>>>0<11){y=85;break}q=kd((d|0)/6|0,8)|0;if(!q){y=49;break}e:do if(r){n=0;m=0;do{i=w+(n<<3)|0;e=i;g=b[e>>2]|0;e=b[e+4>>2]|0;if(!((g|0)==0&(e|0)==0)){j=vd(g|0,e|0,56)|0;H()|0;j=j&7;a=j+1|0;k=e&-117440513;z=vd(g|0,e|0,45)|0;H()|0;f:do if(ma(z&127)|0){l=vd(g|0,e|0,52)|0;H()|0;l=l&15;if(l|0){h=1;while(1){z=wd(7,0,(15-h|0)*3|0)|0;if(!((g&z|0)==0&(k&(H()|0)|0)==0))break f;if(h>>>0<l>>>0)h=h+1|0;else break}}e=wd(a|0,0,56)|0;g=e|g;e=H()|0|k;a=i;b[a>>2]=g;b[a+4>>2]=e;a=j+2|0}while(0);if((a|0)==7){z=q+(m<<3)|0;b[z>>2]=g;b[z+4>>2]=e&-117440513;m=m+1|0}}n=n+1|0}while((n|0)!=(d|0));if(r){n=((d|0)<0)<<31>>31;o=wd(u|0,0,52)|0;p=H()|0;if(u>>>0>15){if(!((s|0)==0&(f|0)==0)){f=4;y=84;break b}f=0;while(1){f=f+1|0;if((f|0)>=(d|0)){g=0;f=m;break e}z=x+(f<<3)|0;if(!((b[z>>2]|0)==0&(b[z+4>>2]|0)==0)){f=4;y=84;break b}}}l=0;g=0;k=s;while(1){do if(!((k|0)==0&(f|0)==0)){i=vd(k|0,f|0,52)|0;H()|0;i=i&15;if((i|0)<(u|0)){f=12;y=84;break b}do if((i|0)==(u|0)){e=k;i=f}else{e=k|o;a=f&-15728641|p;if(i>>>0<t>>>0){i=a;break}h=u;do{z=wd(7,0,(14-h|0)*3|0)|0;h=h+1|0;e=z|e;a=H()|0|a}while(h>>>0<i>>>0);i=a}while(0);h=td(e|0,i|0,d|0,n|0)|0;H()|0;a=0;while(1){if((a|0)>(d|0)){y=77;break b}z=w+(h<<3)|0;j=b[z+4>>2]|0;if((j&-117440513|0)==(i|0)?(b[z>>2]|0)==(e|0):0){y=79;break}h=(h+1|0)%(d|0)|0;z=w+(h<<3)|0;if((b[z>>2]|0)==(e|0)?(b[z+4>>2]|0)==(i|0):0)break;else a=a+1|0}if((y|0)==79?(y=0,0==0&(j&117440512|0)==100663296):0)break;z=c+(g<<3)|0;b[z>>2]=k;b[z+4>>2]=f;g=g+1|0}while(0);f=l+1|0;if((f|0)>=(d|0)){f=m;break e}z=x+(f<<3)|0;l=f;k=b[z>>2]|0;f=b[z+4>>2]|0}}else{g=0;f=m}}else{g=0;f=0}while(0);Bd(w|0,0,v|0)|0;Ad(x|0,q|0,f<<3|0)|0;jd(q);if(!f)break a;else{c=c+(g<<3)|0;d=f}}if((y|0)==17)if(0==0&(f&117440512|0)==0){f=4;y=28}else y=22;else if((y|0)==32)I(23313,22674,362,22684);else if((y|0)==42){jd(x);jd(w);z=10;return z|0}else if((y|0)==49){jd(x);jd(w);z=13;return z|0}else if((y|0)==77)I(23313,22674,462,22684);else if((y|0)==84){jd(q);jd(x);jd(w);z=f;return z|0}else if((y|0)==85){Ad(c|0,x|0,d<<3|0)|0;break}if((y|0)==22){jd(x);jd(w);z=5;return z|0}else if((y|0)==28){jd(x);jd(w);z=f;return z|0}}while(0);jd(x);jd(w);z=0;return z|0}function Cb(a,c,d,e,f,g,h){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=T;T=T+16|0;p=q;if(!((d|0)>0|(d|0)==0&c>>>0>0)){p=0;T=q;return p|0}if((h|0)>=16){p=12;T=q;return p|0}n=0;o=0;m=0;i=0;a:while(1){k=a+(n<<3)|0;j=b[k>>2]|0;k=b[k+4>>2]|0;l=vd(j|0,k|0,52)|0;H()|0;if((l&15|0)>(h|0)){i=12;j=11;break}Xb(p,j,k,h);l=p;k=b[l>>2]|0;l=b[l+4>>2]|0;if((k|0)==0&(l|0)==0)j=m;else{j=m;do{if(!((i|0)<(g|0)|(i|0)==(g|0)&j>>>0<f>>>0)){j=10;break a}m=e+(j<<3)|0;b[m>>2]=k;b[m+4>>2]=l;j=ld(j|0,i|0,1,0)|0;i=H()|0;Yb(p);m=p;k=b[m>>2]|0;l=b[m+4>>2]|0}while(!((k|0)==0&(l|0)==0))}n=ld(n|0,o|0,1,0)|0;o=H()|0;if(!((o|0)<(d|0)|(o|0)==(d|0)&n>>>0<c>>>0)){i=0;j=11;break}else m=j}if((j|0)==10){p=14;T=q;return p|0}else if((j|0)==11){T=q;return i|0}return 0}function Db(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=T;T=T+16|0;m=n;a:do if((d|0)>0|(d|0)==0&c>>>0>0){k=0;h=0;g=0;l=0;while(1){j=a+(k<<3)|0;i=b[j>>2]|0;j=b[j+4>>2]|0;if(!((i|0)==0&(j|0)==0)){j=(wb(i,j,e,m)|0)==0;i=m;h=ld(b[i>>2]|0,b[i+4>>2]|0,h|0,g|0)|0;g=H()|0;if(!j){g=12;break}}k=ld(k|0,l|0,1,0)|0;l=H()|0;if(!((l|0)<(d|0)|(l|0)==(d|0)&k>>>0<c>>>0))break a}T=n;return g|0}else{h=0;g=0}while(0);b[f>>2]=h;b[f+4>>2]=g;f=0;T=n;return f|0}function Eb(a,b){a=a|0;b=b|0;b=vd(a|0,b|0,52)|0;H()|0;return b&1|0}function Fb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;e=vd(a|0,b|0,52)|0;H()|0;e=e&15;if(!e){e=0;return e|0}d=1;while(1){c=vd(a|0,b|0,(15-d|0)*3|0)|0;H()|0;c=c&7;if(c|0){d=5;break}if(d>>>0<e>>>0)d=d+1|0;else{c=0;d=5;break}}if((d|0)==5)return c|0;return 0}function Gb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;i=vd(a|0,b|0,52)|0;H()|0;i=i&15;if(!i){h=b;i=a;G(h|0);return i|0}h=1;c=0;while(1){f=(15-h|0)*3|0;d=wd(7,0,f|0)|0;e=H()|0;g=vd(a|0,b|0,f|0)|0;H()|0;f=wd(Sa(g&7)|0,0,f|0)|0;g=H()|0;a=f|a&~d;b=g|b&~e;a:do if(!c)if(!((f&d|0)==0&(g&e|0)==0)){d=vd(a|0,b|0,52)|0;H()|0;d=d&15;if(!d)c=1;else{c=1;b:while(1){g=vd(a|0,b|0,(15-c|0)*3|0)|0;H()|0;switch(g&7){case 1:break b;case 0:break;default:{c=1;break a}}if(c>>>0<d>>>0)c=c+1|0;else{c=1;break a}}c=1;while(1){g=(15-c|0)*3|0;e=vd(a|0,b|0,g|0)|0;H()|0;f=wd(7,0,g|0)|0;b=b&~(H()|0);g=wd(Sa(e&7)|0,0,g|0)|0;a=a&~f|g;b=b|(H()|0);if(c>>>0<d>>>0)c=c+1|0;else{c=1;break}}}}else c=0;while(0);if(h>>>0<i>>>0)h=h+1|0;else break}G(b|0);return a|0}function Hb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=vd(a|0,b|0,52)|0;H()|0;d=d&15;if(!d){c=b;d=a;G(c|0);return d|0}c=1;while(1){f=(15-c|0)*3|0;g=vd(a|0,b|0,f|0)|0;H()|0;e=wd(7,0,f|0)|0;b=b&~(H()|0);f=wd(Sa(g&7)|0,0,f|0)|0;a=f|a&~e;b=H()|0|b;if(c>>>0<d>>>0)c=c+1|0;else break}G(b|0);return a|0}function Ib(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0;i=vd(a|0,b|0,52)|0;H()|0;i=i&15;if(!i){h=b;i=a;G(h|0);return i|0}h=1;c=0;while(1){f=(15-h|0)*3|0;d=wd(7,0,f|0)|0;e=H()|0;g=vd(a|0,b|0,f|0)|0;H()|0;f=wd(Ta(g&7)|0,0,f|0)|0;g=H()|0;a=f|a&~d;b=g|b&~e;a:do if(!c)if(!((f&d|0)==0&(g&e|0)==0)){d=vd(a|0,b|0,52)|0;H()|0;d=d&15;if(!d)c=1;else{c=1;b:while(1){g=vd(a|0,b|0,(15-c|0)*3|0)|0;H()|0;switch(g&7){case 1:break b;case 0:break;default:{c=1;break a}}if(c>>>0<d>>>0)c=c+1|0;else{c=1;break a}}c=1;while(1){e=(15-c|0)*3|0;f=wd(7,0,e|0)|0;g=b&~(H()|0);b=vd(a|0,b|0,e|0)|0;H()|0;b=wd(Ta(b&7)|0,0,e|0)|0;a=a&~f|b;b=g|(H()|0);if(c>>>0<d>>>0)c=c+1|0;else{c=1;break}}}}else c=0;while(0);if(h>>>0<i>>>0)h=h+1|0;else break}G(b|0);return a|0}function Jb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;d=vd(a|0,b|0,52)|0;H()|0;d=d&15;if(!d){c=b;d=a;G(c|0);return d|0}c=1;while(1){g=(15-c|0)*3|0;f=wd(7,0,g|0)|0;e=b&~(H()|0);b=vd(a|0,b|0,g|0)|0;H()|0;b=wd(Ta(b&7)|0,0,g|0)|0;a=b|a&~f;b=H()|0|e;if(c>>>0<d>>>0)c=c+1|0;else break}G(b|0);return a|0}function Kb(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=T;T=T+64|0;i=j+40|0;e=j+24|0;f=j+12|0;g=j;wd(c|0,0,52)|0;d=H()|0|134225919;if(!c){if((b[a+4>>2]|0)>2){h=0;i=0;G(h|0);T=j;return i|0}if((b[a+8>>2]|0)>2){h=0;i=0;G(h|0);T=j;return i|0}if((b[a+12>>2]|0)>2){h=0;i=0;G(h|0);T=j;return i|0}wd(oa(a)|0,0,45)|0;h=H()|0|d;i=-1;G(h|0);T=j;return i|0};b[i>>2]=b[a>>2];b[i+4>>2]=b[a+4>>2];b[i+8>>2]=b[a+8>>2];b[i+12>>2]=b[a+12>>2];h=i+4|0;if((c|0)>0){a=-1;while(1){b[e>>2]=b[h>>2];b[e+4>>2]=b[h+4>>2];b[e+8>>2]=b[h+8>>2];if(!(c&1)){Ma(h);b[f>>2]=b[h>>2];b[f+4>>2]=b[h+4>>2];b[f+8>>2]=b[h+8>>2];Oa(f)}else{La(h);b[f>>2]=b[h>>2];b[f+4>>2]=b[h+4>>2];b[f+8>>2]=b[h+8>>2];Na(f)}Ga(e,f,g);Da(g);l=(15-c|0)*3|0;k=wd(7,0,l|0)|0;d=d&~(H()|0);l=wd(Ia(g)|0,0,l|0)|0;a=l|a&~k;d=H()|0|d;if((c|0)>1)c=c+-1|0;else break}}else a=-1;a:do if(((b[h>>2]|0)<=2?(b[i+8>>2]|0)<=2:0)?(b[i+12>>2]|0)<=2:0){e=oa(i)|0;c=wd(e|0,0,45)|0;c=c|a;a=H()|0|d&-1040385;g=pa(i)|0;if(!(ma(e)|0)){if((g|0)<=0)break;f=0;while(1){e=vd(c|0,a|0,52)|0;H()|0;e=e&15;if(e){d=1;while(1){l=(15-d|0)*3|0;i=vd(c|0,a|0,l|0)|0;H()|0;k=wd(7,0,l|0)|0;a=a&~(H()|0);l=wd(Sa(i&7)|0,0,l|0)|0;c=c&~k|l;a=a|(H()|0);if(d>>>0<e>>>0)d=d+1|0;else break}}f=f+1|0;if((f|0)==(g|0))break a}}f=vd(c|0,a|0,52)|0;H()|0;f=f&15;b:do if(f){d=1;c:while(1){l=vd(c|0,a|0,(15-d|0)*3|0)|0;H()|0;switch(l&7){case 1:break c;case 0:break;default:break b}if(d>>>0<f>>>0)d=d+1|0;else break b}if(sa(e,b[i>>2]|0)|0){d=1;while(1){i=(15-d|0)*3|0;k=wd(7,0,i|0)|0;l=a&~(H()|0);a=vd(c|0,a|0,i|0)|0;H()|0;a=wd(Ta(a&7)|0,0,i|0)|0;c=c&~k|a;a=l|(H()|0);if(d>>>0<f>>>0)d=d+1|0;else break}}else{d=1;while(1){l=(15-d|0)*3|0;i=vd(c|0,a|0,l|0)|0;H()|0;k=wd(7,0,l|0)|0;a=a&~(H()|0);l=wd(Sa(i&7)|0,0,l|0)|0;c=c&~k|l;a=a|(H()|0);if(d>>>0<f>>>0)d=d+1|0;else break}}}while(0);if((g|0)>0){d=0;do{c=Gb(c,a)|0;a=H()|0;d=d+1|0}while((d|0)!=(g|0))}}else{c=0;a=0}while(0);k=a;l=c;G(k|0);T=j;return l|0}function Lb(a){a=a|0;return (a|0)%2|0|0}function Mb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=T;T=T+16|0;e=f;if(c>>>0>15){e=4;T=f;return e|0}if(0==0?(b[a+4>>2]&2146435072|0)==2146435072:0){e=3;T=f;return e|0}if(0==0?(b[a+8+4>>2]&2146435072|0)==2146435072:0){e=3;T=f;return e|0}hb(a,c,e);c=Kb(e,c)|0;e=H()|0;b[d>>2]=c;b[d+4>>2]=e;if((c|0)==0&(e|0)==0)I(23313,22674,786,22697);e=0;T=f;return e|0}function Nb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;f=d+4|0;g=vd(a|0,c|0,52)|0;H()|0;g=g&15;h=vd(a|0,c|0,45)|0;H()|0;e=(g|0)==0;if(!(ma(h&127)|0)){if(e){h=0;return h|0}if((b[f>>2]|0)==0?(b[d+8>>2]|0)==0:0)e=(b[d+12>>2]|0)!=0&1;else e=1}else if(e){h=1;return h|0}else e=1;d=1;while(1){if(!(d&1))Oa(f);else Na(f);h=vd(a|0,c|0,(15-d|0)*3|0)|0;H()|0;Pa(f,h&7);if(d>>>0<g>>>0)d=d+1|0;else break}return e|0}function Ob(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=T;T=T+16|0;j=l;k=vd(a|0,c|0,45)|0;H()|0;k=k&127;if(k>>>0>121){b[d>>2]=0;b[d+4>>2]=0;b[d+8>>2]=0;b[d+12>>2]=0;k=5;T=l;return k|0}a:do if((ma(k)|0)!=0?(g=vd(a|0,c|0,52)|0,H()|0,g=g&15,(g|0)!=0):0){e=1;b:while(1){i=vd(a|0,c|0,(15-e|0)*3|0)|0;H()|0;switch(i&7){case 5:break b;case 0:break;default:{e=c;break a}}if(e>>>0<g>>>0)e=e+1|0;else{e=c;break a}}f=1;e=c;while(1){c=(15-f|0)*3|0;h=wd(7,0,c|0)|0;i=e&~(H()|0);e=vd(a|0,e|0,c|0)|0;H()|0;e=wd(Ta(e&7)|0,0,c|0)|0;a=a&~h|e;e=i|(H()|0);if(f>>>0<g>>>0)f=f+1|0;else break}}else e=c;while(0);i=7696+(k*28|0)|0;b[d>>2]=b[i>>2];b[d+4>>2]=b[i+4>>2];b[d+8>>2]=b[i+8>>2];b[d+12>>2]=b[i+12>>2];if(!(Nb(a,e,d)|0)){k=0;T=l;return k|0}h=d+4|0;b[j>>2]=b[h>>2];b[j+4>>2]=b[h+4>>2];b[j+8>>2]=b[h+8>>2];g=vd(a|0,e|0,52)|0;H()|0;i=g&15;if(!(g&1))g=i;else{Oa(h);g=i+1|0}if(!(ma(k)|0))e=0;else{c:do if(!i)e=0;else{c=1;while(1){f=vd(a|0,e|0,(15-c|0)*3|0)|0;H()|0;f=f&7;if(f|0){e=f;break c}if(c>>>0<i>>>0)c=c+1|0;else{e=0;break}}}while(0);e=(e|0)==4&1}if(!(ob(d,g,e,0)|0)){if((g|0)!=(i|0)){b[h>>2]=b[j>>2];b[h+4>>2]=b[j+4>>2];b[h+8>>2]=b[j+8>>2]}}else{if(ma(k)|0)do{}while((ob(d,g,0,0)|0)!=0);if((g|0)!=(i|0))Ma(h)}k=0;T=l;return k|0}function Pb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0;f=T;T=T+16|0;d=f;e=Ob(a,b,d)|0;if(e|0){T=f;return e|0}e=vd(a|0,b|0,52)|0;H()|0;lb(d,e&15,c);e=0;T=f;return e|0}function Qb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;g=T;T=T+16|0;f=g;d=Ob(a,b,f)|0;if(d|0){f=d;T=g;return f|0}d=vd(a|0,b|0,45)|0;H()|0;d=(ma(d&127)|0)==0;e=vd(a|0,b|0,52)|0;H()|0;e=e&15;a:do if(!d){if(e|0){d=1;while(1){h=wd(7,0,(15-d|0)*3|0)|0;if(!((h&a|0)==0&((H()|0)&b|0)==0))break a;if(d>>>0<e>>>0)d=d+1|0;else break}}mb(f,e,0,5,c);h=0;T=g;return h|0}while(0);qb(f,e,0,6,c);h=0;T=g;return h|0}function Rb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;f=vd(a|0,c|0,45)|0;H()|0;if(!(ma(f&127)|0)){f=2;b[d>>2]=f;return 0}f=vd(a|0,c|0,52)|0;H()|0;f=f&15;if(!f){f=5;b[d>>2]=f;return 0}e=1;while(1){g=wd(7,0,(15-e|0)*3|0)|0;if(!((g&a|0)==0&((H()|0)&c|0)==0)){e=2;a=6;break}if(e>>>0<f>>>0)e=e+1|0;else{e=5;a=6;break}}if((a|0)==6){b[d>>2]=e;return 0}return 0}function Sb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=T;T=T+128|0;k=m+112|0;g=m+96|0;l=m;f=vd(a|0,c|0,52)|0;H()|0;i=f&15;b[k>>2]=i;h=vd(a|0,c|0,45)|0;H()|0;h=h&127;a:do if(ma(h)|0){if(i|0){e=1;while(1){j=wd(7,0,(15-e|0)*3|0)|0;if(!((j&a|0)==0&((H()|0)&c|0)==0)){f=0;break a}if(e>>>0<i>>>0)e=e+1|0;else break}}if(!(f&1)){j=wd(i+1|0,0,52)|0;l=H()|0|c&-15728641;k=wd(7,0,(14-i|0)*3|0)|0;l=Sb((j|a)&~k,l&~(H()|0),d)|0;T=m;return l|0}else f=1}else f=0;while(0);e=Ob(a,c,g)|0;if(!e){if(f){nb(g,k,l);j=5}else{rb(g,k,l);j=6}b:do if(ma(h)|0)if(!i)a=5;else{e=1;while(1){h=wd(7,0,(15-e|0)*3|0)|0;if(!((h&a|0)==0&((H()|0)&c|0)==0)){a=2;break b}if(e>>>0<i>>>0)e=e+1|0;else{a=5;break}}}else a=2;while(0);Bd(d|0,-1,a<<2|0)|0;c:do if(f){g=0;while(1){h=l+(g<<4)|0;pb(h,b[k>>2]|0)|0;h=b[h>>2]|0;i=b[d>>2]|0;if((i|0)==-1|(i|0)==(h|0))e=d;else{f=0;do{f=f+1|0;if(f>>>0>=a>>>0){e=1;break c}e=d+(f<<2)|0;i=b[e>>2]|0}while(!((i|0)==-1|(i|0)==(h|0)))}b[e>>2]=h;g=g+1|0;if(g>>>0>=j>>>0){e=0;break}}}else{g=0;while(1){h=l+(g<<4)|0;ob(h,b[k>>2]|0,0,1)|0;h=b[h>>2]|0;i=b[d>>2]|0;if((i|0)==-1|(i|0)==(h|0))e=d;else{f=0;do{f=f+1|0;if(f>>>0>=a>>>0){e=1;break c}e=d+(f<<2)|0;i=b[e>>2]|0}while(!((i|0)==-1|(i|0)==(h|0)))}b[e>>2]=h;g=g+1|0;if(g>>>0>=j>>>0){e=0;break}}}while(0)}l=e;T=m;return l|0}function Tb(){return 12}function Ub(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(a>>>0>15){i=4;return i|0}wd(a|0,0,52)|0;i=H()|0|134225919;if(!a){d=0;e=0;do{if(ma(e)|0){wd(e|0,0,45)|0;h=i|(H()|0);a=c+(d<<3)|0;b[a>>2]=-1;b[a+4>>2]=h;d=d+1|0}e=e+1|0}while((e|0)!=122);d=0;return d|0}d=0;h=0;do{if(ma(h)|0){wd(h|0,0,45)|0;e=1;f=-1;g=i|(H()|0);while(1){j=wd(7,0,(15-e|0)*3|0)|0;f=f&~j;g=g&~(H()|0);if((e|0)==(a|0))break;else e=e+1|0}j=c+(d<<3)|0;b[j>>2]=f;b[j+4>>2]=g;d=d+1|0}h=h+1|0}while((h|0)!=122);d=0;return d|0}function Vb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=T;T=T+16|0;r=t;s=vd(a|0,c|0,52)|0;H()|0;s=s&15;if(d>>>0>15){s=4;T=t;return s|0}if((s|0)<(d|0)){s=12;T=t;return s|0}if((s|0)!=(d|0)){g=wd(d|0,0,52)|0;g=g|a;i=H()|0|c&-15728641;if((s|0)>(d|0)){j=d;do{q=wd(7,0,(14-j|0)*3|0)|0;j=j+1|0;g=q|g;i=H()|0|i}while((j|0)<(s|0));q=g}else q=g}else{q=a;i=c}p=vd(q|0,i|0,45)|0;H()|0;a:do if(ma(p&127)|0){j=vd(q|0,i|0,52)|0;H()|0;j=j&15;if(j|0){g=1;while(1){p=wd(7,0,(15-g|0)*3|0)|0;if(!((p&q|0)==0&((H()|0)&i|0)==0)){k=33;break a}if(g>>>0<j>>>0)g=g+1|0;else break}}p=e;b[p>>2]=0;b[p+4>>2]=0;if((s|0)>(d|0)){p=c&-15728641;o=s;while(1){n=o;o=o+-1|0;if(o>>>0>15|(s|0)<(o|0)){k=19;break}if((s|0)!=(o|0)){g=wd(o|0,0,52)|0;g=g|a;j=H()|0|p;if((s|0)<(n|0))m=g;else{k=o;do{m=wd(7,0,(14-k|0)*3|0)|0;k=k+1|0;g=m|g;j=H()|0|j}while((k|0)<(s|0));m=g}}else{m=a;j=c}l=vd(m|0,j|0,45)|0;H()|0;if(!(ma(l&127)|0))g=0;else{l=vd(m|0,j|0,52)|0;H()|0;l=l&15;b:do if(!l)g=0;else{k=1;while(1){g=vd(m|0,j|0,(15-k|0)*3|0)|0;H()|0;g=g&7;if(g|0)break b;if(k>>>0<l>>>0)k=k+1|0;else{g=0;break}}}while(0);g=(g|0)==0&1}j=vd(a|0,c|0,(15-n|0)*3|0)|0;H()|0;j=j&7;if((j|0)==7){f=5;k=42;break}g=(g|0)!=0;if((j|0)==1&g){f=5;k=42;break}m=j+(((j|0)!=0&g)<<31>>31)|0;if(m|0){k=s-n|0;k=Cc(7,0,k,((k|0)<0)<<31>>31)|0;l=H()|0;if(g){g=rd(k|0,l|0,5,0)|0;g=ld(g|0,H()|0,-5,-1)|0;g=pd(g|0,H()|0,6,0)|0;g=ld(g|0,H()|0,1,0)|0;j=H()|0}else{g=k;j=l}n=m+-1|0;n=rd(k|0,l|0,n|0,((n|0)<0)<<31>>31|0)|0;n=ld(g|0,j|0,n|0,H()|0)|0;m=H()|0;l=e;l=ld(n|0,m|0,b[l>>2]|0,b[l+4>>2]|0)|0;m=H()|0;n=e;b[n>>2]=l;b[n+4>>2]=m}if((o|0)<=(d|0)){k=37;break}}if((k|0)==19)I(23313,22674,1099,22710);else if((k|0)==37){h=e;f=b[h+4>>2]|0;h=b[h>>2]|0;break}else if((k|0)==42){T=t;return f|0}}else{f=0;h=0}}else k=33;while(0);c:do if((k|0)==33){p=e;b[p>>2]=0;b[p+4>>2]=0;if((s|0)>(d|0)){g=s;while(1){f=vd(a|0,c|0,(15-g|0)*3|0)|0;H()|0;f=f&7;if((f|0)==7){f=5;break}h=s-g|0;h=Cc(7,0,h,((h|0)<0)<<31>>31)|0;f=rd(h|0,H()|0,f|0,0)|0;h=H()|0;p=e;h=ld(b[p>>2]|0,b[p+4>>2]|0,f|0,h|0)|0;f=H()|0;p=e;b[p>>2]=h;b[p+4>>2]=f;g=g+-1|0;if((g|0)<=(d|0))break c}T=t;return f|0}else{f=0;h=0}}while(0);if(wb(q,i,s,r)|0)I(23313,22674,1063,22725);s=r;r=b[s+4>>2]|0;if(((f|0)>-1|(f|0)==-1&h>>>0>4294967295)&((r|0)>(f|0)|((r|0)==(f|0)?(b[s>>2]|0)>>>0>h>>>0:0))){s=0;T=t;return s|0}else I(23313,22674,1139,22710);return 0}function Wb(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;m=T;T=T+16|0;h=m;if(f>>>0>15){g=4;T=m;return g|0}i=vd(d|0,e|0,52)|0;H()|0;i=i&15;if((i|0)>(f|0)){g=12;T=m;return g|0}if(wb(d,e,f,h)|0)I(23313,22674,1063,22725);l=h;k=b[l+4>>2]|0;if(!(((c|0)>-1|(c|0)==-1&a>>>0>4294967295)&((k|0)>(c|0)|((k|0)==(c|0)?(b[l>>2]|0)>>>0>a>>>0:0)))){g=2;T=m;return g|0}l=f-i|0;f=wd(f|0,0,52)|0;j=H()|0|e&-15728641;k=g;b[k>>2]=f|d;b[k+4>>2]=j;k=vd(d|0,e|0,45)|0;H()|0;a:do if(ma(k&127)|0){if(i|0){h=1;while(1){k=wd(7,0,(15-h|0)*3|0)|0;if(!((k&d|0)==0&((H()|0)&e|0)==0))break a;if(h>>>0<i>>>0)h=h+1|0;else break}}if((l|0)<1){g=0;T=m;return g|0}k=i^15;e=-1;j=1;h=1;while(1){i=l-j|0;i=Cc(7,0,i,((i|0)<0)<<31>>31)|0;d=H()|0;do if(h){h=rd(i|0,d|0,5,0)|0;h=ld(h|0,H()|0,-5,-1)|0;h=pd(h|0,H()|0,6,0)|0;f=H()|0;if((c|0)>(f|0)|(c|0)==(f|0)&a>>>0>h>>>0){c=ld(a|0,c|0,-1,-1)|0;c=md(c|0,H()|0,h|0,f|0)|0;h=H()|0;n=g;p=b[n>>2]|0;n=b[n+4>>2]|0;q=(k+e|0)*3|0;o=wd(7,0,q|0)|0;n=n&~(H()|0);e=pd(c|0,h|0,i|0,d|0)|0;a=H()|0;f=ld(e|0,a|0,2,0)|0;q=wd(f|0,H()|0,q|0)|0;n=H()|0|n;f=g;b[f>>2]=q|p&~o;b[f+4>>2]=n;a=rd(e|0,a|0,i|0,d|0)|0;a=md(c|0,h|0,a|0,H()|0)|0;h=0;c=H()|0;break}else{q=g;o=b[q>>2]|0;q=b[q+4>>2]|0;p=wd(7,0,(k+e|0)*3|0)|0;q=q&~(H()|0);h=g;b[h>>2]=o&~p;b[h+4>>2]=q;h=1;break}}else{o=g;f=b[o>>2]|0;o=b[o+4>>2]|0;e=(k+e|0)*3|0;n=wd(7,0,e|0)|0;o=o&~(H()|0);q=pd(a|0,c|0,i|0,d|0)|0;h=H()|0;e=wd(q|0,h|0,e|0)|0;o=H()|0|o;p=g;b[p>>2]=e|f&~n;b[p+4>>2]=o;h=rd(q|0,h|0,i|0,d|0)|0;a=md(a|0,c|0,h|0,H()|0)|0;h=0;c=H()|0}while(0);if((l|0)>(j|0)){e=~j;j=j+1|0}else{c=0;break}}T=m;return c|0}while(0);if((l|0)<1){q=0;T=m;return q|0}f=i^15;h=1;while(1){p=l-h|0;p=Cc(7,0,p,((p|0)<0)<<31>>31)|0;q=H()|0;j=g;d=b[j>>2]|0;j=b[j+4>>2]|0;i=(f-h|0)*3|0;e=wd(7,0,i|0)|0;j=j&~(H()|0);n=pd(a|0,c|0,p|0,q|0)|0;o=H()|0;i=wd(n|0,o|0,i|0)|0;j=H()|0|j;k=g;b[k>>2]=i|d&~e;b[k+4>>2]=j;q=rd(n|0,o|0,p|0,q|0)|0;a=md(a|0,c|0,q|0,H()|0)|0;c=H()|0;if((l|0)<=(h|0)){c=0;break}else h=h+1|0}T=m;return c|0}function Xb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=vd(c|0,d|0,52)|0;H()|0;f=f&15;if((c|0)==0&(d|0)==0|((e|0)>15|(f|0)>(e|0))){e=-1;f=-1;c=0;d=0}else{g=zb(c,d,f+1|0,e)|0;d=(H()|0)&-15728641;c=wd(e|0,0,52)|0;c=g|c;d=d|(H()|0);g=(xb(c,d)|0)==0;e=g?-1:e}g=a;b[g>>2]=c;b[g+4>>2]=d;b[a+8>>2]=f;b[a+12>>2]=e;return}function Yb(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a;c=b[d>>2]|0;d=b[d+4>>2]|0;if((c|0)==0&(d|0)==0)return;e=vd(c|0,d|0,52)|0;H()|0;e=e&15;i=wd(1,0,(e^15)*3|0)|0;c=ld(i|0,H()|0,c|0,d|0)|0;d=H()|0;i=a;b[i>>2]=c;b[i+4>>2]=d;i=a+8|0;h=b[i>>2]|0;if((e|0)<(h|0))return;j=a+12|0;g=e;while(1){if((g|0)==(h|0)){e=5;break}k=(g|0)==(b[j>>2]|0);f=(15-g|0)*3|0;e=vd(c|0,d|0,f|0)|0;H()|0;e=e&7;if(k&((e|0)==1&0==0)){e=7;break}if(!((e|0)==7&0==0)){e=10;break}k=wd(1,0,f|0)|0;c=ld(c|0,d|0,k|0,H()|0)|0;d=H()|0;k=a;b[k>>2]=c;b[k+4>>2]=d;if((g|0)>(h|0))g=g+-1|0;else{e=10;break}}if((e|0)==5){k=a;b[k>>2]=0;b[k+4>>2]=0;b[i>>2]=-1;b[j>>2]=-1;return}else if((e|0)==7){h=wd(1,0,f|0)|0;h=ld(c|0,d|0,h|0,H()|0)|0;i=H()|0;k=a;b[k>>2]=h;b[k+4>>2]=i;b[j>>2]=g+-1;return}else if((e|0)==10)return}function Zb(a){a=+a;var b=0.0;b=a<0.0?a+6.283185307179586:a;return +(!(a>=6.283185307179586)?b:b+-6.283185307179586)}function _b(a,b){a=a|0;b=b|0;if(!(+q(+(+e[a>>3]-+e[b>>3]))<1.7453292519943298e-11)){b=0;return b|0}b=+q(+(+e[a+8>>3]-+e[b+8>>3]))<1.7453292519943298e-11;return b|0}function $b(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0)}function ac(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0*6371.007180918475)}function bc(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0;f=+e[b>>3];d=+e[a>>3];g=+u(+((f-d)*.5));c=+u(+((+e[b+8>>3]-+e[a+8>>3])*.5));c=g*g+c*(+t(+f)*+t(+d)*c);return +(+z(+(+r(+c)),+(+r(+(1.0-c))))*2.0*6371.007180918475*1.0e3)}function cc(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0,g=0.0,h=0.0;g=+e[b>>3];d=+t(+g);f=+e[b+8>>3]-+e[a+8>>3];h=d*+u(+f);c=+e[a>>3];return +(+z(+h,+(+u(+g)*+t(+c)-+t(+f)*(d*+u(+c)))))}function dc(a,c,d,f){a=a|0;c=+c;d=+d;f=f|0;var g=0,h=0.0,i=0.0,j=0.0;if(d<1.0e-16){b[f>>2]=b[a>>2];b[f+4>>2]=b[a+4>>2];b[f+8>>2]=b[a+8>>2];b[f+12>>2]=b[a+12>>2];return}h=c<0.0?c+6.283185307179586:c;h=!(c>=6.283185307179586)?h:h+-6.283185307179586;do if(h<1.0e-16){c=+e[a>>3]+d;e[f>>3]=c;g=f}else{g=+q(+(h+-3.141592653589793))<1.0e-16;c=+e[a>>3];if(g){c=c-d;e[f>>3]=c;g=f;break}i=+t(+d);d=+u(+d);c=i*+u(+c)+ +t(+h)*(d*+t(+c));c=c>1.0?1.0:c;c=+x(+(c<-1.0?-1.0:c));e[f>>3]=c;if(+q(+(c+-1.5707963267948966))<1.0e-16){e[f>>3]=1.5707963267948966;e[f+8>>3]=0.0;return}if(+q(+(c+1.5707963267948966))<1.0e-16){e[f>>3]=-1.5707963267948966;e[f+8>>3]=0.0;return}j=+t(+c);h=d*+u(+h)/j;d=+e[a>>3];c=(i-+u(+c)*+u(+d))/+t(+d)/j;i=h>1.0?1.0:h;c=c>1.0?1.0:c;c=+e[a+8>>3]+ +z(+(i<-1.0?-1.0:i),+(c<-1.0?-1.0:c));if(c>3.141592653589793)do c=c+-6.283185307179586;while(c>3.141592653589793);if(c<-3.141592653589793)do c=c+6.283185307179586;while(c<-3.141592653589793);e[f+8>>3]=c;return}while(0);if(+q(+(c+-1.5707963267948966))<1.0e-16){e[g>>3]=1.5707963267948966;e[f+8>>3]=0.0;return}if(+q(+(c+1.5707963267948966))<1.0e-16){e[g>>3]=-1.5707963267948966;e[f+8>>3]=0.0;return}c=+e[a+8>>3];if(c>3.141592653589793)do c=c+-6.283185307179586;while(c>3.141592653589793);if(c<-3.141592653589793)do c=c+6.283185307179586;while(c<-3.141592653589793);e[f+8>>3]=c;return}function ec(a,b){a=a|0;b=b|0;if(a>>>0>15){b=4;return b|0}e[b>>3]=+e[20528+(a<<3)>>3];b=0;return b|0}function fc(a,b){a=a|0;b=b|0;if(a>>>0>15){b=4;return b|0}e[b>>3]=+e[20656+(a<<3)>>3];b=0;return b|0}function gc(a,b){a=a|0;b=b|0;if(a>>>0>15){b=4;return b|0}e[b>>3]=+e[20784+(a<<3)>>3];b=0;return b|0}function hc(a,b){a=a|0;b=b|0;if(a>>>0>15){b=4;return b|0}e[b>>3]=+e[20912+(a<<3)>>3];b=0;return b|0}function ic(a,c){a=a|0;c=c|0;var d=0;if(a>>>0>15){c=4;return c|0}d=Cc(7,0,a,((a|0)<0)<<31>>31)|0;d=rd(d|0,H()|0,120,0)|0;a=H()|0;b[c>>2]=d|2;b[c+4>>2]=a;c=0;return c|0}function jc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;n=+e[b>>3];l=+e[a>>3];j=+u(+((n-l)*.5));g=+e[b+8>>3];k=+e[a+8>>3];h=+u(+((g-k)*.5));i=+t(+l);m=+t(+n);h=j*j+h*(m*i*h);h=+z(+(+r(+h)),+(+r(+(1.0-h))))*2.0;j=+e[c>>3];n=+u(+((j-n)*.5));d=+e[c+8>>3];g=+u(+((d-g)*.5));f=+t(+j);g=n*n+g*(m*f*g);g=+z(+(+r(+g)),+(+r(+(1.0-g))))*2.0;j=+u(+((l-j)*.5));d=+u(+((k-d)*.5));d=j*j+d*(i*f*d);d=+z(+(+r(+d)),+(+r(+(1.0-d))))*2.0;f=(h+g+d)*.5;return +(+y(+(+r(+(+v(+(f*.5))*+v(+((f-h)*.5))*+v(+((f-g)*.5))*+v(+((f-d)*.5))))))*4.0)}function kc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0,h=0,i=0,j=0;j=T;T=T+192|0;h=j+168|0;i=j;g=Pb(a,c,h)|0;if(g|0){d=g;T=j;return d|0}if(Qb(a,c,i)|0)I(23313,22742,386,22751);c=b[i>>2]|0;if((c|0)>0){f=+jc(i+8|0,i+8+(((c|0)!=1&1)<<4)|0,h)+0.0;if((c|0)!=1){a=1;do{g=a;a=a+1|0;f=f+ +jc(i+8+(g<<4)|0,i+8+(((a|0)%(c|0)|0)<<4)|0,h)}while((a|0)<(c|0))}}else f=0.0;e[d>>3]=f;d=0;T=j;return d|0}function lc(a,b,c){a=a|0;b=b|0;c=c|0;a=kc(a,b,c)|0;if(a|0)return a|0;e[c>>3]=+e[c>>3]*6371.007180918475*6371.007180918475;return a|0}function mc(a,b,c){a=a|0;b=b|0;c=c|0;a=kc(a,b,c)|0;if(a|0)return a|0;e[c>>3]=+e[c>>3]*6371.007180918475*6371.007180918475*1.0e3*1.0e3;return a|0}function nc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0;j=T;T=T+176|0;i=j;a=gb(a,c,i)|0;if(a|0){i=a;T=j;return i|0}e[d>>3]=0.0;a=b[i>>2]|0;if((a|0)<=1){i=0;T=j;return i|0}c=a+-1|0;a=0;f=+e[i+8>>3];g=+e[i+16>>3];h=0.0;do{a=a+1|0;l=f;f=+e[i+8+(a<<4)>>3];m=+u(+((f-l)*.5));k=g;g=+e[i+8+(a<<4)+8>>3];k=+u(+((g-k)*.5));k=m*m+k*(+t(+f)*+t(+l)*k);h=h+ +z(+(+r(+k)),+(+r(+(1.0-k))))*2.0}while((a|0)<(c|0));e[d>>3]=h;i=0;T=j;return i|0}function oc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0;j=T;T=T+176|0;i=j;a=gb(a,c,i)|0;if(a|0){i=a;h=+e[d>>3];h=h*6371.007180918475;e[d>>3]=h;T=j;return i|0}e[d>>3]=0.0;a=b[i>>2]|0;if((a|0)<=1){i=0;h=0.0;h=h*6371.007180918475;e[d>>3]=h;T=j;return i|0}c=a+-1|0;a=0;f=+e[i+8>>3];g=+e[i+16>>3];h=0.0;do{a=a+1|0;l=f;f=+e[i+8+(a<<4)>>3];m=+u(+((f-l)*.5));k=g;g=+e[i+8+(a<<4)+8>>3];k=+u(+((g-k)*.5));k=m*m+k*(+t(+l)*+t(+f)*k);h=h+ +z(+(+r(+k)),+(+r(+(1.0-k))))*2.0}while((a|0)!=(c|0));e[d>>3]=h;i=0;m=h;m=m*6371.007180918475;e[d>>3]=m;T=j;return i|0}function pc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0;j=T;T=T+176|0;i=j;a=gb(a,c,i)|0;if(a|0){i=a;h=+e[d>>3];h=h*6371.007180918475;h=h*1.0e3;e[d>>3]=h;T=j;return i|0}e[d>>3]=0.0;a=b[i>>2]|0;if((a|0)<=1){i=0;h=0.0;h=h*6371.007180918475;h=h*1.0e3;e[d>>3]=h;T=j;return i|0}c=a+-1|0;a=0;f=+e[i+8>>3];g=+e[i+16>>3];h=0.0;do{a=a+1|0;l=f;f=+e[i+8+(a<<4)>>3];m=+u(+((f-l)*.5));k=g;g=+e[i+8+(a<<4)+8>>3];k=+u(+((g-k)*.5));k=m*m+k*(+t(+l)*+t(+f)*k);h=h+ +z(+(+r(+k)),+(+r(+(1.0-k))))*2.0}while((a|0)!=(c|0));e[d>>3]=h;i=0;m=h;m=m*6371.007180918475;m=m*1.0e3;e[d>>3]=m;T=j;return i|0}function qc(a){a=a|0;var c=0,d=0,e=0;c=kd(1,12)|0;if(!c)I(22832,22787,49,22845);d=a+4|0;e=b[d>>2]|0;if(e|0){e=e+8|0;b[e>>2]=c;b[d>>2]=c;return c|0}if(b[a>>2]|0)I(22862,22787,61,22885);e=a;b[e>>2]=c;b[d>>2]=c;return c|0}function rc(a,c){a=a|0;c=c|0;var d=0,e=0;e=id(24)|0;if(!e)I(22899,22787,78,22913);b[e>>2]=b[c>>2];b[e+4>>2]=b[c+4>>2];b[e+8>>2]=b[c+8>>2];b[e+12>>2]=b[c+12>>2];b[e+16>>2]=0;c=a+4|0;d=b[c>>2]|0;if(d|0){b[d+16>>2]=e;b[c>>2]=e;return e|0}if(b[a>>2]|0)I(22928,22787,82,22913);b[a>>2]=e;b[c>>2]=e;return e|0}function sc(a){a=a|0;var c=0,d=0,e=0,f=0;if(!a)return;e=1;while(1){c=b[a>>2]|0;if(c|0)do{d=b[c>>2]|0;if(d|0)do{f=d;d=b[d+16>>2]|0;jd(f)}while((d|0)!=0);f=c;c=b[c+8>>2]|0;jd(f)}while((c|0)!=0);c=a;a=b[a+8>>2]|0;if(!e)jd(c);if(!a)break;else e=0}return}function tc(a){a=a|0;var c=0,d=0,f=0,g=0,h=0.0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,J=0,K=0;g=a+8|0;if(b[g>>2]|0){K=1;return K|0}f=b[a>>2]|0;if(!f){K=0;return K|0}c=f;d=0;do{d=d+1|0;c=b[c+8>>2]|0}while((c|0)!=0);if(d>>>0<2){K=0;return K|0}H=id(d<<2)|0;if(!H)I(22948,22787,317,22967);G=id(d<<5)|0;if(!G)I(22989,22787,321,22967);b[a>>2]=0;z=a+4|0;b[z>>2]=0;b[g>>2]=0;d=0;F=0;y=0;n=0;a:while(1){m=b[f>>2]|0;if(m){h=0.0;i=m;do{k=+e[i+8>>3];c=i;i=b[i+16>>2]|0;l=(i|0)==0;g=l?m:i;j=+e[g+8>>3];if(+q(+(k-j))>3.141592653589793){K=14;break}h=h+(j-k)*(+e[c>>3]+ +e[g>>3])}while(!l);if((K|0)==14){K=0;h=0.0;c=m;do{x=+e[c+8>>3];E=c+16|0;D=b[E>>2]|0;D=(D|0)==0?m:D;w=+e[D+8>>3];h=h+(+e[c>>3]+ +e[D>>3])*((w<0.0?w+6.283185307179586:w)-(x<0.0?x+6.283185307179586:x));c=b[((c|0)==0?f:E)>>2]|0}while((c|0)!=0)}if(h>0.0){b[H+(F<<2)>>2]=f;F=F+1|0;g=y;c=n}else K=19}else K=19;if((K|0)==19){K=0;do if(!d)if(!n)if(!(b[a>>2]|0)){g=z;i=a;c=f;d=a;break}else{K=27;break a}else{g=z;i=n+8|0;c=f;d=a;break}else{c=d+8|0;if(b[c>>2]|0){K=21;break a}d=kd(1,12)|0;if(!d){K=23;break a}b[c>>2]=d;g=d+4|0;i=d;c=n}while(0);b[i>>2]=f;b[g>>2]=f;i=G+(y<<5)|0;l=b[f>>2]|0;if(l){m=G+(y<<5)+8|0;e[m>>3]=1797693134862315708145274.0e284;n=G+(y<<5)+24|0;e[n>>3]=1797693134862315708145274.0e284;e[i>>3]=-1797693134862315708145274.0e284;o=G+(y<<5)+16|0;e[o>>3]=-1797693134862315708145274.0e284;u=1797693134862315708145274.0e284;v=-1797693134862315708145274.0e284;g=0;p=l;k=1797693134862315708145274.0e284;s=1797693134862315708145274.0e284;t=-1797693134862315708145274.0e284;j=-1797693134862315708145274.0e284;while(1){h=+e[p>>3];x=+e[p+8>>3];p=b[p+16>>2]|0;r=(p|0)==0;w=+e[(r?l:p)+8>>3];if(h<k){e[m>>3]=h;k=h}if(x<s){e[n>>3]=x;s=x}if(h>t)e[i>>3]=h;else h=t;if(x>j){e[o>>3]=x;j=x}u=x>0.0&x<u?x:u;v=x<0.0&x>v?x:v;g=g|+q(+(x-w))>3.141592653589793;if(r)break;else t=h}if(g){e[o>>3]=v;e[n>>3]=u}}else{b[i>>2]=0;b[i+4>>2]=0;b[i+8>>2]=0;b[i+12>>2]=0;b[i+16>>2]=0;b[i+20>>2]=0;b[i+24>>2]=0;b[i+28>>2]=0}g=y+1|0}E=f+8|0;f=b[E>>2]|0;b[E>>2]=0;if(!f){K=45;break}else{y=g;n=c}}if((K|0)==21)I(22765,22787,35,22799);else if((K|0)==23)I(22819,22787,37,22799);else if((K|0)==27)I(22862,22787,61,22885);else if((K|0)==45){b:do if((F|0)>0){E=(g|0)==0;C=g<<2;D=(a|0)==0;B=0;c=0;while(1){A=b[H+(B<<2)>>2]|0;if(!E){y=id(C)|0;if(!y){K=50;break}z=id(C)|0;if(!z){K=52;break}c:do if(!D){g=0;d=0;i=a;while(1){f=G+(g<<5)|0;if(uc(b[i>>2]|0,f,b[A>>2]|0)|0){b[y+(d<<2)>>2]=i;b[z+(d<<2)>>2]=f;r=d+1|0}else r=d;i=b[i+8>>2]|0;if(!i)break;else{g=g+1|0;d=r}}if((r|0)>0){f=b[y>>2]|0;if((r|0)==1)d=f;else{o=0;p=-1;d=f;n=f;while(1){l=b[n>>2]|0;f=0;i=0;while(1){g=b[b[y+(i<<2)>>2]>>2]|0;if((g|0)==(l|0))m=f;else m=f+((uc(g,b[z+(i<<2)>>2]|0,b[l>>2]|0)|0)&1)|0;i=i+1|0;if((i|0)==(r|0))break;else f=m}g=(m|0)>(p|0);d=g?n:d;f=o+1|0;if((f|0)==(r|0))break c;o=f;p=g?m:p;n=b[y+(f<<2)>>2]|0}}}else d=0}else d=0;while(0);jd(y);jd(z);if(d){g=d+4|0;f=b[g>>2]|0;if(!f){if(b[d>>2]|0){K=70;break}}else d=f+8|0;b[d>>2]=A;b[g>>2]=A}else K=73}else K=73;if((K|0)==73){K=0;c=b[A>>2]|0;if(c|0)do{z=c;c=b[c+16>>2]|0;jd(z)}while((c|0)!=0);jd(A);c=1}B=B+1|0;if((B|0)>=(F|0)){J=c;break b}}if((K|0)==50)I(23004,22787,249,23023);else if((K|0)==52)I(23042,22787,252,23023);else if((K|0)==70)I(22862,22787,61,22885)}else J=0;while(0);jd(H);jd(G);K=J;return K|0}return 0}function uc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;if(!(ya(c,d)|0)){a=0;return a|0}c=xa(c)|0;f=+e[d>>3];g=+e[d+8>>3];g=c&g<0.0?g+6.283185307179586:g;a=b[a>>2]|0;if(!a){a=0;return a|0}if(c){c=0;l=g;d=a;a:while(1){while(1){i=+e[d>>3];g=+e[d+8>>3];d=d+16|0;m=b[d>>2]|0;m=(m|0)==0?a:m;h=+e[m>>3];j=+e[m+8>>3];if(i>h){k=i;i=j}else{k=h;h=i;i=g;g=j}f=f==h|f==k?f+2.220446049250313e-16:f;if(!(f<h|f>k))break;d=b[d>>2]|0;if(!d){d=22;break a}}j=i<0.0?i+6.283185307179586:i;i=g<0.0?g+6.283185307179586:g;l=j==l|i==l?l+-2.220446049250313e-16:l;k=j+(i-j)*((f-h)/(k-h));if((k<0.0?k+6.283185307179586:k)>l)c=c^1;d=b[d>>2]|0;if(!d){d=22;break}}if((d|0)==22)return c|0}else{c=0;l=g;d=a;b:while(1){while(1){i=+e[d>>3];g=+e[d+8>>3];d=d+16|0;m=b[d>>2]|0;m=(m|0)==0?a:m;h=+e[m>>3];j=+e[m+8>>3];if(i>h){k=i;i=j}else{k=h;h=i;i=g;g=j}f=f==h|f==k?f+2.220446049250313e-16:f;if(!(f<h|f>k))break;d=b[d>>2]|0;if(!d){d=22;break b}}l=i==l|g==l?l+-2.220446049250313e-16:l;if(i+(g-i)*((f-h)/(k-h))>l)c=c^1;d=b[d>>2]|0;if(!d){d=22;break}}if((d|0)==22)return c|0}return 0}function vc(c,d,e,f,g){c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=T;T=T+32|0;t=u+16|0;s=u;h=vd(c|0,d|0,52)|0;H()|0;h=h&15;p=vd(e|0,f|0,52)|0;H()|0;if((h|0)!=(p&15|0)){t=12;T=u;return t|0}l=vd(c|0,d|0,45)|0;H()|0;l=l&127;m=vd(e|0,f|0,45)|0;H()|0;m=m&127;if(l>>>0>121|m>>>0>121){t=5;T=u;return t|0}p=(l|0)!=(m|0);if(p){j=ua(l,m)|0;if((j|0)==7){t=1;T=u;return t|0}k=ua(m,l)|0;if((k|0)==7)I(23066,23090,161,23100);else{q=j;i=k}}else{q=0;i=0}n=ma(l)|0;o=ma(m)|0;b[t>>2]=0;b[t+4>>2]=0;b[t+8>>2]=0;b[t+12>>2]=0;do if(!q){Nb(e,f,t)|0;if((n|0)!=0&(o|0)!=0){if((m|0)!=(l|0))I(23173,23090,261,23100);i=Fb(c,d)|0;h=Fb(e,f)|0;if(!((i|0)==7|(h|0)==7))if(!(a[21872+(i*7|0)+h>>0]|0)){i=b[21040+(i*28|0)+(h<<2)>>2]|0;if((i|0)>0){j=t+4|0;h=0;do{Ra(j);h=h+1|0}while((h|0)!=(i|0));r=51}else r=51}else h=1;else h=5}else r=51}else{m=b[4272+(l*28|0)+(q<<2)>>2]|0;j=(m|0)>0;if(!o)if(j){l=0;k=e;j=f;do{k=Jb(k,j)|0;j=H()|0;i=Ta(i)|0;l=l+1|0}while((l|0)!=(m|0));m=i;l=k;k=j}else{m=i;l=e;k=f}else if(j){l=0;k=e;j=f;do{k=Ib(k,j)|0;j=H()|0;i=Ta(i)|0;if((i|0)==1)i=Ta(1)|0;l=l+1|0}while((l|0)!=(m|0));m=i;l=k;k=j}else{m=i;l=e;k=f}Nb(l,k,t)|0;if(!p)I(23115,23090,191,23100);j=(n|0)!=0;i=(o|0)!=0;if(j&i)I(23142,23090,192,23100);if(!j)if(i){i=Fb(l,k)|0;if((i|0)==7){h=5;break}if(a[21872+(i*7|0)+m>>0]|0){h=1;break}l=0;k=b[21040+(m*28|0)+(i<<2)>>2]|0}else{l=0;k=0}else{i=Fb(c,d)|0;if((i|0)==7){h=5;break}if(a[21872+(i*7|0)+q>>0]|0){h=1;break}k=b[21040+(i*28|0)+(q<<2)>>2]|0;l=k}if((l|k|0)<0)h=5;else{if((k|0)>0){j=t+4|0;i=0;do{Ra(j);i=i+1|0}while((i|0)!=(k|0))};b[s>>2]=0;b[s+4>>2]=0;b[s+8>>2]=0;Pa(s,q);if(h|0)while(1){if(!(Lb(h)|0))Oa(s);else Na(s);if((h|0)>1)h=h+-1|0;else break}if((l|0)>0){h=0;do{Ra(s);h=h+1|0}while((h|0)!=(l|0))}r=t+4|0;Fa(r,s,r);Da(r);r=51}}while(0);if((r|0)==51){h=t+4|0;b[g>>2]=b[h>>2];b[g+4>>2]=b[h+4>>2];b[g+8>>2]=b[h+8>>2];h=0}t=h;T=u;return t|0}function wc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=T;T=T+48|0;k=q+36|0;h=q+24|0;i=q+12|0;j=q;f=vd(a|0,c|0,52)|0;H()|0;f=f&15;n=vd(a|0,c|0,45)|0;H()|0;n=n&127;if(n>>>0>121){e=5;T=q;return e|0}l=ma(n)|0;wd(f|0,0,52)|0;r=H()|0|134225919;g=e;b[g>>2]=-1;b[g+4>>2]=r;if(!f){f=Ia(d)|0;if((f|0)==7){r=1;T=q;return r|0}f=ta(n,f)|0;if((f|0)==127){r=1;T=q;return r|0}o=wd(f|0,0,45)|0;p=H()|0;n=e;p=b[n+4>>2]&-1040385|p;r=e;b[r>>2]=b[n>>2]|o;b[r+4>>2]=p;r=0;T=q;return r|0};b[k>>2]=b[d>>2];b[k+4>>2]=b[d+4>>2];b[k+8>>2]=b[d+8>>2];d=f;while(1){g=d;d=d+-1|0;b[h>>2]=b[k>>2];b[h+4>>2]=b[k+4>>2];b[h+8>>2]=b[k+8>>2];if(!(Lb(g)|0)){f=Ka(k)|0;if(f|0){d=13;break};b[i>>2]=b[k>>2];b[i+4>>2]=b[k+4>>2];b[i+8>>2]=b[k+8>>2];Oa(i)}else{f=Ja(k)|0;if(f|0){d=13;break};b[i>>2]=b[k>>2];b[i+4>>2]=b[k+4>>2];b[i+8>>2]=b[k+8>>2];Na(i)}Ga(h,i,j);Da(j);f=e;t=b[f>>2]|0;f=b[f+4>>2]|0;u=(15-g|0)*3|0;s=wd(7,0,u|0)|0;f=f&~(H()|0);u=wd(Ia(j)|0,0,u|0)|0;f=H()|0|f;r=e;b[r>>2]=u|t&~s;b[r+4>>2]=f;if((g|0)<=1){d=14;break}}a:do if((d|0)!=13)if((d|0)==14)if(((b[k>>2]|0)<=1?(b[k+4>>2]|0)<=1:0)?(b[k+8>>2]|0)<=1:0){d=Ia(k)|0;f=ta(n,d)|0;if((f|0)==127)j=0;else j=ma(f)|0;b:do if(!d)if((l|0)!=0&(j|0)!=0){d=Fb(a,c)|0;g=e;g=Fb(b[g>>2]|0,b[g+4>>2]|0)|0;if((d|0)==7|(g|0)==7){f=5;break a}g=b[21248+(d*28|0)+(g<<2)>>2]|0;if((g|0)<0){f=5;break a}if(!g)d=59;else{i=e;d=0;h=b[i>>2]|0;i=b[i+4>>2]|0;do{h=Hb(h,i)|0;i=H()|0;u=e;b[u>>2]=h;b[u+4>>2]=i;d=d+1|0}while((d|0)<(g|0));d=58}}else d=58;else{if(l){f=Fb(a,c)|0;if((f|0)==7){f=5;break a}g=b[21248+(f*28|0)+(d<<2)>>2]|0;if((g|0)>0){f=d;d=0;do{f=Sa(f)|0;d=d+1|0}while((d|0)!=(g|0))}else f=d;if((f|0)==1){f=9;break a}d=ta(n,f)|0;if((d|0)==127)I(23200,23090,411,23230);if(!(ma(d)|0)){p=d;o=g;m=f}else I(23245,23090,412,23230)}else{p=f;o=0;m=d}i=b[4272+(n*28|0)+(m<<2)>>2]|0;if((i|0)<=-1)I(23276,23090,419,23230);if(!j){if((o|0)<0){f=5;break a}if(o|0){g=e;f=0;d=b[g>>2]|0;g=b[g+4>>2]|0;do{d=Hb(d,g)|0;g=H()|0;u=e;b[u>>2]=d;b[u+4>>2]=g;f=f+1|0}while((f|0)<(o|0))}if((i|0)<=0){f=p;d=58;break}g=e;f=0;d=b[g>>2]|0;g=b[g+4>>2]|0;while(1){d=Hb(d,g)|0;g=H()|0;u=e;b[u>>2]=d;b[u+4>>2]=g;f=f+1|0;if((f|0)==(i|0)){f=p;d=58;break b}}}h=ua(p,n)|0;if((h|0)==7)I(23066,23090,428,23230);f=e;d=b[f>>2]|0;f=b[f+4>>2]|0;if((i|0)>0){g=0;do{d=Hb(d,f)|0;f=H()|0;u=e;b[u>>2]=d;b[u+4>>2]=f;g=g+1|0}while((g|0)!=(i|0))}f=Fb(d,f)|0;if((f|0)==7)I(23313,23090,440,23230);d=na(p)|0;d=b[(d?21664:21456)+(h*28|0)+(f<<2)>>2]|0;if((d|0)<0)I(23313,23090,454,23230);if(!d){f=p;d=58}else{h=e;f=0;g=b[h>>2]|0;h=b[h+4>>2]|0;do{g=Gb(g,h)|0;h=H()|0;u=e;b[u>>2]=g;b[u+4>>2]=h;f=f+1|0}while((f|0)<(d|0));f=p;d=58}}while(0);if((d|0)==58)if(j)d=59;if((d|0)==59){u=e;if((Fb(b[u>>2]|0,b[u+4>>2]|0)|0)==1){f=9;break}}u=e;s=b[u>>2]|0;u=b[u+4>>2]&-1040385;t=wd(f|0,0,45)|0;u=u|(H()|0);f=e;b[f>>2]=s|t;b[f+4>>2]=u;f=0}else f=1;while(0);u=f;T=q;return u|0}function xc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=T;T=T+16|0;g=h;if(!e){a=vc(a,b,c,d,g)|0;if(!a){Xa(g,f);a=0}}else a=15;T=h;return a|0}function yc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=T;T=T+16|0;f=g;if(!d){c=Ya(c,f)|0;if(!c)c=wc(a,b,f,e)|0}else c=15;T=g;return c|0}function zc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=T;T=T+32|0;h=j+12|0;i=j;g=vc(a,c,a,c,h)|0;if(g|0){i=g;T=j;return i|0}a=vc(a,c,d,e,i)|0;if(a|0){i=a;T=j;return i|0}h=Wa(h,i)|0;i=f;b[i>>2]=h;b[i+4>>2]=((h|0)<0)<<31>>31;i=0;T=j;return i|0}function Ac(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=T;T=T+32|0;h=j+12|0;i=j;g=vc(a,c,a,c,h)|0;if(!g){g=vc(a,c,d,e,i)|0;if(!g){e=Wa(h,i)|0;e=ld(e|0,((e|0)<0)<<31>>31|0,1,0)|0;h=H()|0;i=f;b[i>>2]=e;b[i+4>>2]=h;i=0;T=j;return i|0}}i=g;T=j;return i|0}function Bc(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0;z=T;T=T+48|0;h=z+24|0;i=z+12|0;y=z;g=vc(a,c,a,c,h)|0;if(!g){g=vc(a,c,d,e,i)|0;if(!g){w=Wa(h,i)|0;x=((w|0)<0)<<31>>31;b[h>>2]=0;b[h+4>>2]=0;b[h+8>>2]=0;b[i>>2]=0;b[i+4>>2]=0;b[i+8>>2]=0;if(vc(a,c,a,c,h)|0)I(23313,23090,691,23299);if(vc(a,c,d,e,i)|0)I(23313,23090,696,23299);Za(h);Za(i);if(!w){g=h+4|0;d=h+8|0;t=g;u=d;v=h;e=b[h>>2]|0;g=b[g>>2]|0;d=b[d>>2]|0;r=0.0;s=0.0;p=0.0}else{m=b[h>>2]|0;p=+(w|0);t=h+4|0;n=b[t>>2]|0;u=h+8|0;o=b[u>>2]|0;v=h;e=m;g=n;d=o;r=+((b[i>>2]|0)-m|0)/p;s=+((b[i+4>>2]|0)-n|0)/p;p=+((b[i+8>>2]|0)-o|0)/p}b[y>>2]=e;o=y+4|0;b[o>>2]=g;n=y+8|0;b[n>>2]=d;a:do if((w|0)<0)g=0;else{l=0;m=0;g=e;while(1){k=+(m>>>0)+4294967296.0*+(l|0);A=r*k+ +(g|0);j=s*k+ +(b[t>>2]|0);k=p*k+ +(b[u>>2]|0);d=~~+zd(+A);h=~~+zd(+j);g=~~+zd(+k);A=+q(+(+(d|0)-A));j=+q(+(+(h|0)-j));k=+q(+(+(g|0)-k));do if(!(A>j&A>k)){i=0-d|0;if(j>k){e=i-g|0;break}else{e=h;g=i-h|0;break}}else{d=0-(h+g)|0;e=h}while(0);b[y>>2]=d;b[o>>2]=e;b[n>>2]=g;_a(y);g=wc(a,c,y,f+(m<<3)|0)|0;if(g|0)break a;if(!((l|0)<(x|0)|(l|0)==(x|0)&m>>>0<w>>>0)){g=0;break a}g=ld(m|0,l|0,1,0)|0;i=H()|0;l=i;m=g;g=b[v>>2]|0}}while(0);y=g;T=z;return y|0}}y=g;T=z;return y|0}function Cc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if((c|0)==0&(d|0)==0){e=0;f=1;G(e|0);return f|0}f=a;e=b;a=1;b=0;do{g=(c&1|0)==0&0==0;a=rd((g?1:f)|0,(g?0:e)|0,a|0,b|0)|0;b=H()|0;c=ud(c|0,d|0,1)|0;d=H()|0;f=rd(f|0,e|0,f|0,e|0)|0;e=H()|0}while(!((c|0)==0&(d|0)==0));G(b|0);return a|0}function Dc(a,c,d){a=a|0;c=c|0;d=d|0;var f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0.0,n=0,o=0;if(!(ya(c,d)|0)){o=0;return o|0}c=xa(c)|0;f=+e[d>>3];g=+e[d+8>>3];g=c&g<0.0?g+6.283185307179586:g;o=b[a>>2]|0;if((o|0)<=0){o=0;return o|0}n=b[a+4>>2]|0;if(c){c=0;m=g;d=-1;a=0;a:while(1){l=a;while(1){i=+e[n+(l<<4)>>3];g=+e[n+(l<<4)+8>>3];a=(d+2|0)%(o|0)|0;h=+e[n+(a<<4)>>3];j=+e[n+(a<<4)+8>>3];if(i>h){k=i;i=j}else{k=h;h=i;i=g;g=j}f=f==h|f==k?f+2.220446049250313e-16:f;if(!(f<h|f>k))break;d=l+1|0;if((d|0)>=(o|0)){d=22;break a}else{a=l;l=d;d=a}}j=i<0.0?i+6.283185307179586:i;i=g<0.0?g+6.283185307179586:g;m=j==m|i==m?m+-2.220446049250313e-16:m;k=j+(i-j)*((f-h)/(k-h));if((k<0.0?k+6.283185307179586:k)>m)c=c^1;a=l+1|0;if((a|0)>=(o|0)){d=22;break}else d=l}if((d|0)==22)return c|0}else{c=0;m=g;d=-1;a=0;b:while(1){l=a;while(1){i=+e[n+(l<<4)>>3];g=+e[n+(l<<4)+8>>3];a=(d+2|0)%(o|0)|0;h=+e[n+(a<<4)>>3];j=+e[n+(a<<4)+8>>3];if(i>h){k=i;i=j}else{k=h;h=i;i=g;g=j}f=f==h|f==k?f+2.220446049250313e-16:f;if(!(f<h|f>k))break;d=l+1|0;if((d|0)>=(o|0)){d=22;break b}else{a=l;l=d;d=a}}m=i==m|g==m?m+-2.220446049250313e-16:m;if(i+(g-i)*((f-h)/(k-h))>m)c=c^1;a=l+1|0;if((a|0)>=(o|0)){d=22;break}else d=l}if((d|0)==22)return c|0}return 0}function Ec(a,c){a=a|0;c=c|0;var d=0.0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,r=0,s=0,t=0,u=0,v=0;r=b[a>>2]|0;if(!r){b[c>>2]=0;b[c+4>>2]=0;b[c+8>>2]=0;b[c+12>>2]=0;b[c+16>>2]=0;b[c+20>>2]=0;b[c+24>>2]=0;b[c+28>>2]=0;return}s=c+8|0;e[s>>3]=1797693134862315708145274.0e284;t=c+24|0;e[t>>3]=1797693134862315708145274.0e284;e[c>>3]=-1797693134862315708145274.0e284;u=c+16|0;e[u>>3]=-1797693134862315708145274.0e284;if((r|0)<=0)return;o=b[a+4>>2]|0;l=1797693134862315708145274.0e284;m=-1797693134862315708145274.0e284;n=0;a=-1;h=1797693134862315708145274.0e284;i=1797693134862315708145274.0e284;k=-1797693134862315708145274.0e284;f=-1797693134862315708145274.0e284;p=0;while(1){d=+e[o+(p<<4)>>3];j=+e[o+(p<<4)+8>>3];a=a+2|0;g=+e[o+(((a|0)==(r|0)?0:a)<<4)+8>>3];if(d<h){e[s>>3]=d;h=d}if(j<i){e[t>>3]=j;i=j}if(d>k)e[c>>3]=d;else d=k;if(j>f){e[u>>3]=j;f=j}l=j>0.0&j<l?j:l;m=j<0.0&j>m?j:m;n=n|+q(+(j-g))>3.141592653589793;a=p+1|0;if((a|0)==(r|0))break;else{v=p;k=d;p=a;a=v}}if(!n)return;e[u>>3]=m;e[t>>3]=l;return}function Fc(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;r=b[a>>2]|0;if(r){s=c+8|0;e[s>>3]=1797693134862315708145274.0e284;t=c+24|0;e[t>>3]=1797693134862315708145274.0e284;e[c>>3]=-1797693134862315708145274.0e284;u=c+16|0;e[u>>3]=-1797693134862315708145274.0e284;if((r|0)>0){g=b[a+4>>2]|0;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;f=0;d=-1;k=1797693134862315708145274.0e284;l=1797693134862315708145274.0e284;n=-1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;v=0;while(1){h=+e[g+(v<<4)>>3];m=+e[g+(v<<4)+8>>3];z=d+2|0;j=+e[g+(((z|0)==(r|0)?0:z)<<4)+8>>3];if(h<k){e[s>>3]=h;k=h}if(m<l){e[t>>3]=m;l=m}if(h>n)e[c>>3]=h;else h=n;if(m>i){e[u>>3]=m;i=m}o=m>0.0&m<o?m:o;p=m<0.0&m>p?m:p;f=f|+q(+(m-j))>3.141592653589793;d=v+1|0;if((d|0)==(r|0))break;else{z=v;n=h;v=d;d=z}}if(f){e[u>>3]=p;e[t>>3]=o}}}else{b[c>>2]=0;b[c+4>>2]=0;b[c+8>>2]=0;b[c+12>>2]=0;b[c+16>>2]=0;b[c+20>>2]=0;b[c+24>>2]=0;b[c+28>>2]=0}z=a+8|0;d=b[z>>2]|0;if((d|0)<=0)return;y=a+12|0;x=0;do{g=b[y>>2]|0;f=x;x=x+1|0;t=c+(x<<5)|0;u=b[g+(f<<3)>>2]|0;if(u){v=c+(x<<5)+8|0;e[v>>3]=1797693134862315708145274.0e284;a=c+(x<<5)+24|0;e[a>>3]=1797693134862315708145274.0e284;e[t>>3]=-1797693134862315708145274.0e284;w=c+(x<<5)+16|0;e[w>>3]=-1797693134862315708145274.0e284;if((u|0)>0){r=b[g+(f<<3)+4>>2]|0;o=1797693134862315708145274.0e284;p=-1797693134862315708145274.0e284;g=0;f=-1;s=0;k=1797693134862315708145274.0e284;l=1797693134862315708145274.0e284;m=-1797693134862315708145274.0e284;i=-1797693134862315708145274.0e284;while(1){h=+e[r+(s<<4)>>3];n=+e[r+(s<<4)+8>>3];f=f+2|0;j=+e[r+(((f|0)==(u|0)?0:f)<<4)+8>>3];if(h<k){e[v>>3]=h;k=h}if(n<l){e[a>>3]=n;l=n}if(h>m)e[t>>3]=h;else h=m;if(n>i){e[w>>3]=n;i=n}o=n>0.0&n<o?n:o;p=n<0.0&n>p?n:p;g=g|+q(+(n-j))>3.141592653589793;f=s+1|0;if((f|0)==(u|0))break;else{A=s;s=f;m=h;f=A}}if(g){e[w>>3]=p;e[a>>3]=o}}}else{b[t>>2]=0;b[t+4>>2]=0;b[t+8>>2]=0;b[t+12>>2]=0;b[t+16>>2]=0;b[t+20>>2]=0;b[t+24>>2]=0;b[t+28>>2]=0;d=b[z>>2]|0}}while((x|0)<(d|0));return}function Gc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(!(Dc(a,c,d)|0)){f=0;return f|0}f=a+8|0;if((b[f>>2]|0)<=0){f=1;return f|0}e=a+12|0;a=0;while(1){g=a;a=a+1|0;if(Dc((b[e>>2]|0)+(g<<3)|0,c+(a<<5)|0,d)|0){a=0;e=6;break}if((a|0)>=(b[f>>2]|0)){a=1;e=6;break}}if((e|0)==6)return a|0;return 0}function Hc(){return 8}function Ic(){return 16}function Jc(){return 168}function Kc(){return 8}function Lc(){return 16}function Mc(){return 12}function Nc(){return 8}function Oc(a){a=a|0;return +(+((b[a>>2]|0)>>>0)+4294967296.0*+(b[a+4>>2]|0))}function Pc(a){a=a|0;var b=0.0,c=0.0;c=+e[a>>3];b=+e[a+8>>3];return +(+r(+(c*c+b*b)))}function Qc(a,b,c,d,f){a=a|0;b=b|0;c=c|0;d=d|0;f=f|0;var g=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;k=+e[a>>3];j=+e[b>>3]-k;i=+e[a+8>>3];h=+e[b+8>>3]-i;m=+e[c>>3];g=+e[d>>3]-m;n=+e[c+8>>3];l=+e[d+8>>3]-n;g=(g*(i-n)-(k-m)*l)/(j*l-h*g);e[f>>3]=k+j*g;e[f+8>>3]=i+h*g;return}function Rc(a,b){a=a|0;b=b|0;if(!(+q(+(+e[a>>3]-+e[b>>3]))<1.1920928955078125e-07)){b=0;return b|0}b=+q(+(+e[a+8>>3]-+e[b+8>>3]))<1.1920928955078125e-07;return b|0}function Sc(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;f=+e[a>>3]-+e[b>>3];d=+e[a+8>>3]-+e[b+8>>3];c=+e[a+16>>3]-+e[b+16>>3];return +(f*f+d*d+c*c)}function Tc(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,f=0.0;c=+e[a>>3];d=+t(+c);c=+u(+c);e[b+16>>3]=c;c=+e[a+8>>3];f=d*+t(+c);e[b>>3]=f;c=d*+u(+c);e[b+8>>3]=c;return}function Uc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=T;T=T+16|0;f=g;e=xb(a,c)|0;if((d+-1|0)>>>0>5){f=-1;T=g;return f|0}e=(e|0)!=0;if((d|0)==1&e){f=-1;T=g;return f|0}do if(!(Vc(a,c,f)|0))if(e){e=((b[21936+(d<<2)>>2]|0)+5-(b[f>>2]|0)|0)%5|0;break}else{e=((b[21968+(d<<2)>>2]|0)+6-(b[f>>2]|0)|0)%6|0;break}else e=-1;while(0);f=e;T=g;return f|0}function Vc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=T;T=T+32|0;h=k+16|0;i=k;e=Ob(a,c,h)|0;if(e|0){d=e;T=k;return d|0}g=tb(a,c)|0;j=Fb(a,c)|0;qa(g,i);e=ra(g,b[h>>2]|0)|0;a:do if(ma(g)|0){do switch(g|0){case 4:{a=0;break}case 14:{a=1;break}case 24:{a=2;break}case 38:{a=3;break}case 49:{a=4;break}case 58:{a=5;break}case 63:{a=6;break}case 72:{a=7;break}case 83:{a=8;break}case 97:{a=9;break}case 107:{a=10;break}case 117:{a=11;break}default:{e=1;break a}}while(0);f=b[22e3+(a*24|0)+8>>2]|0;c=b[22e3+(a*24|0)+16>>2]|0;a=b[h>>2]|0;if((a|0)!=(b[i>>2]|0)){i=na(g)|0;a=b[h>>2]|0;if(i|(a|0)==(c|0))e=(e+1|0)%6|0}if((j|0)==3&(a|0)==(c|0)){e=(e+5|0)%6|0;f=22;break}if((j|0)==5&(a|0)==(f|0)){e=(e+1|0)%6|0;f=22}else f=22}else f=22;while(0);if((f|0)==22){b[d>>2]=e;e=0}d=e;T=k;return d|0}function Wc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=T;T=T+32|0;t=u+24|0;r=u+20|0;p=u+8|0;o=u+16|0;n=u;j=(xb(a,c)|0)==0;j=j?6:5;l=vd(a|0,c|0,52)|0;H()|0;l=l&15;if(j>>>0<=d>>>0){e=2;T=u;return e|0}m=(l|0)==0;if(!m?(q=wd(7,0,(l^15)*3|0)|0,(q&a|0)==0&((H()|0)&c|0)==0):0)f=d;else g=4;a:do if((g|0)==4){f=(xb(a,c)|0)!=0;if(((f?4:5)|0)<(d|0)){e=1;T=u;return e|0}if(Vc(a,c,t)|0){e=1;T=u;return e|0}g=(b[t>>2]|0)+d|0;if(f)f=22288+(((g|0)%5|0)<<2)|0;else f=22320+(((g|0)%6|0)<<2)|0;q=b[f>>2]|0;if((q|0)==7){e=1;T=u;return e|0}b[r>>2]=0;f=ea(a,c,q,r,p)|0;do if(!f){i=p;k=b[i>>2]|0;i=b[i+4>>2]|0;h=i>>>0<c>>>0|(i|0)==(c|0)&k>>>0<a>>>0;g=h?k:a;h=h?i:c;if(!m?(m=wd(7,0,(l^15)*3|0)|0,(k&m|0)==0&(i&(H()|0)|0)==0):0)f=d;else{i=(d+-1+j|0)%(j|0)|0;f=xb(a,c)|0;if((i|0)<0)I(23313,23315,245,23324);j=(f|0)!=0;if(((j?4:5)|0)<(i|0))I(23313,23315,245,23324);if(Vc(a,c,t)|0)I(23313,23315,245,23324);f=(b[t>>2]|0)+i|0;if(j)f=22288+(((f|0)%5|0)<<2)|0;else f=22320+(((f|0)%6|0)<<2)|0;i=b[f>>2]|0;if((i|0)==7)I(23313,23315,245,23324);b[o>>2]=0;f=ea(a,c,i,o,n)|0;if(f|0)break;k=n;j=b[k>>2]|0;k=b[k+4>>2]|0;do if(k>>>0<h>>>0|(k|0)==(h|0)&j>>>0<g>>>0){if(!(xb(j,k)|0))g=b[22384+((((b[o>>2]|0)+(b[22352+(i<<2)>>2]|0)|0)%6|0)<<2)>>2]|0;else g=fa(j,k,a,c)|0;f=xb(j,k)|0;if((g+-1|0)>>>0>5){f=-1;g=j;h=k;break}f=(f|0)!=0;if((g|0)==1&f){f=-1;g=j;h=k;break}do if(!(Vc(j,k,t)|0))if(f){f=((b[21936+(g<<2)>>2]|0)+5-(b[t>>2]|0)|0)%5|0;break}else{f=((b[21968+(g<<2)>>2]|0)+6-(b[t>>2]|0)|0)%6|0;break}else f=-1;while(0);g=j;h=k}else f=d;while(0);i=p;k=b[i>>2]|0;i=b[i+4>>2]|0}if((g|0)==(k|0)&(h|0)==(i|0)){j=(xb(k,i)|0)!=0;if(j)a=fa(k,i,a,c)|0;else a=b[22384+((((b[r>>2]|0)+(b[22352+(q<<2)>>2]|0)|0)%6|0)<<2)>>2]|0;f=xb(k,i)|0;if((a+-1|0)>>>0<=5?(s=(f|0)!=0,!((a|0)==1&s)):0)do if(!(Vc(k,i,t)|0))if(s){f=((b[21936+(a<<2)>>2]|0)+5-(b[t>>2]|0)|0)%5|0;break}else{f=((b[21968+(a<<2)>>2]|0)+6-(b[t>>2]|0)|0)%6|0;break}else f=-1;while(0);else f=-1;f=f+1|0;f=(f|0)==6|j&(f|0)==5?0:f}c=h;a=g;break a}while(0);e=f;T=u;return e|0}while(0);s=wd(f|0,0,56)|0;t=H()|0|c&-2130706433|536870912;b[e>>2]=s|a;b[e+4>>2]=t;e=0;T=u;return e|0}function Xc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0;g=(xb(a,c)|0)==0;e=Wc(a,c,0,d)|0;f=(e|0)==0;if(g){if(!f){g=e;return g|0}e=Wc(a,c,1,d+8|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,2,d+16|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,3,d+24|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,4,d+32|0)|0;if(!e)return Wc(a,c,5,d+40|0)|0;else{g=e;return g|0}}if(!f){g=e;return g|0}e=Wc(a,c,1,d+8|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,2,d+16|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,3,d+24|0)|0;if(e|0){g=e;return g|0}e=Wc(a,c,4,d+32|0)|0;if(e|0){g=e;return g|0}g=d+40|0;b[g>>2]=0;b[g+4>>2]=0;g=0;return g|0}function Yc(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=T;T=T+192|0;f=j;g=j+168|0;h=vd(a|0,c|0,56)|0;H()|0;h=h&7;i=c&-2130706433|134217728;e=Ob(a,i,g)|0;if(e|0){i=e;T=j;return i|0}c=vd(a|0,c|0,52)|0;H()|0;c=c&15;if(!(xb(a,i)|0))qb(g,c,h,1,f);else mb(g,c,h,1,f);i=f+8|0;b[d>>2]=b[i>>2];b[d+4>>2]=b[i+4>>2];b[d+8>>2]=b[i+8>>2];b[d+12>>2]=b[i+12>>2];i=0;T=j;return i|0}function Zc(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0;f=T;T=T+16|0;d=f;if(!(0==0&(c&2013265920|0)==536870912)){e=0;T=f;return e|0}e=c&-2130706433|134217728;if(!(ub(a,e)|0)){e=0;T=f;return e|0}g=vd(a|0,c|0,56)|0;H()|0;g=(Wc(a,e,g&7,d)|0)==0;e=d;e=g&((b[e>>2]|0)==(a|0)?(b[e+4>>2]|0)==(c|0):0)&1;T=f;return e|0}function _c(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if((c|0)>0){e=kd(c,4)|0;b[a>>2]=e;if(!e)I(23337,23360,40,23374)}else b[a>>2]=0;b[a+4>>2]=c;b[a+8>>2]=0;b[a+12>>2]=d;return}function $c(a){a=a|0;var c=0,d=0,f=0,g=0,h=0,i=0,j=0;g=a+4|0;h=a+12|0;i=a+8|0;a:while(1){d=b[g>>2]|0;c=0;while(1){if((c|0)>=(d|0))break a;f=b[a>>2]|0;j=b[f+(c<<2)>>2]|0;if(!j)c=c+1|0;else break}c=f+(~~(+q(+(+s(10.0,+(+(15-(b[h>>2]|0)|0)))*(+e[j>>3]+ +e[j+8>>3])))%+(d|0))>>>0<<2)|0;d=b[c>>2]|0;b:do if(d|0){f=j+32|0;if((d|0)==(j|0))b[c>>2]=b[f>>2];else{d=d+32|0;c=b[d>>2]|0;if(!c)break;while(1){if((c|0)==(j|0))break;d=c+32|0;c=b[d>>2]|0;if(!c)break b}b[d>>2]=b[f>>2]}jd(j);b[i>>2]=(b[i>>2]|0)+-1}while(0)}jd(b[a>>2]|0);return}function ad(a){a=a|0;var c=0,d=0,e=0;e=b[a+4>>2]|0;d=0;while(1){if((d|0)>=(e|0)){c=0;d=4;break}c=b[(b[a>>2]|0)+(d<<2)>>2]|0;if(!c)d=d+1|0;else{d=4;break}}if((d|0)==4)return c|0;return 0}function bd(a,c){a=a|0;c=c|0;var d=0,f=0,g=0,h=0;d=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;d=(b[a>>2]|0)+(d<<2)|0;f=b[d>>2]|0;if(!f){h=1;return h|0}h=c+32|0;do if((f|0)!=(c|0)){d=b[f+32>>2]|0;if(!d){h=1;return h|0}g=d;while(1){if((g|0)==(c|0)){g=8;break}d=b[g+32>>2]|0;if(!d){d=1;g=10;break}else{f=g;g=d}}if((g|0)==8){b[f+32>>2]=b[h>>2];break}else if((g|0)==10)return d|0}else b[d>>2]=b[h>>2];while(0);jd(c);h=a+8|0;b[h>>2]=(b[h>>2]|0)+-1;h=0;return h|0}function cd(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0;h=id(40)|0;if(!h)I(23390,23360,98,23403);b[h>>2]=b[c>>2];b[h+4>>2]=b[c+4>>2];b[h+8>>2]=b[c+8>>2];b[h+12>>2]=b[c+12>>2];g=h+16|0;b[g>>2]=b[d>>2];b[g+4>>2]=b[d+4>>2];b[g+8>>2]=b[d+8>>2];b[g+12>>2]=b[d+12>>2];b[h+32>>2]=0;g=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;g=(b[a>>2]|0)+(g<<2)|0;f=b[g>>2]|0;do if(!f)b[g>>2]=h;else{while(1){if(_b(f,c)|0?_b(f+16|0,d)|0:0)break;g=b[f+32>>2]|0;f=(g|0)==0?f:g;if(!(b[f+32>>2]|0)){i=10;break}}if((i|0)==10){b[f+32>>2]=h;break}jd(h);i=f;return i|0}while(0);i=a+8|0;b[i>>2]=(b[i>>2]|0)+1;i=h;return i|0}function dd(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0;g=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;g=b[(b[a>>2]|0)+(g<<2)>>2]|0;if(!g){d=0;return d|0}if(!d){a=g;while(1){if(_b(a,c)|0){f=10;break}a=b[a+32>>2]|0;if(!a){a=0;f=10;break}}if((f|0)==10)return a|0}a=g;while(1){if(_b(a,c)|0?_b(a+16|0,d)|0:0){f=10;break}a=b[a+32>>2]|0;if(!a){a=0;f=10;break}}if((f|0)==10)return a|0;return 0}function ed(a,c){a=a|0;c=c|0;var d=0;d=~~(+q(+(+s(10.0,+(+(15-(b[a+12>>2]|0)|0)))*(+e[c>>3]+ +e[c+8>>3])))%+(b[a+4>>2]|0))>>>0;a=b[(b[a>>2]|0)+(d<<2)>>2]|0;if(!a){d=0;return d|0}while(1){if(_b(a,c)|0){c=5;break}a=b[a+32>>2]|0;if(!a){a=0;c=5;break}}if((c|0)==5)return a|0;return 0}function fd(){return 23424}function gd(a){a=+a;return +(+Cd(+a))}function hd(a){a=+a;return ~~+gd(a)|0}function id(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=T;T=T+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=b[5857]|0;d=m>>>a;if(d&3|0){c=(d&1^1)+a|0;a=23468+(c<<1<<2)|0;d=a+8|0;e=b[d>>2]|0;f=e+8|0;g=b[f>>2]|0;if((g|0)==(a|0))b[5857]=m&~(1<<c);else{b[g+12>>2]=a;b[d>>2]=g}v=c<<3;b[e+4>>2]=v|3;v=e+v+4|0;b[v>>2]=b[v>>2]|1;v=f;T=w;return v|0}l=b[5859]|0;if(k>>>0>l>>>0){if(d|0){c=2<<a;c=d<<a&(c|0-c);c=(c&0-c)+-1|0;i=c>>>12&16;c=c>>>i;d=c>>>5&8;c=c>>>d;g=c>>>2&4;c=c>>>g;a=c>>>1&2;c=c>>>a;e=c>>>1&1;e=(d|i|g|a|e)+(c>>>e)|0;c=23468+(e<<1<<2)|0;a=c+8|0;g=b[a>>2]|0;i=g+8|0;d=b[i>>2]|0;if((d|0)==(c|0)){a=m&~(1<<e);b[5857]=a}else{b[d+12>>2]=c;b[a>>2]=d;a=m}v=e<<3;h=v-k|0;b[g+4>>2]=k|3;f=g+k|0;b[f+4>>2]=h|1;b[g+v>>2]=h;if(l|0){e=b[5862]|0;c=l>>>3;d=23468+(c<<1<<2)|0;c=1<<c;if(!(a&c)){b[5857]=a|c;c=d;a=d+8|0}else{a=d+8|0;c=b[a>>2]|0}b[a>>2]=e;b[c+12>>2]=e;b[e+8>>2]=c;b[e+12>>2]=d}b[5859]=h;b[5862]=f;v=i;T=w;return v|0}g=b[5858]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=b[23732+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(b[j+4>>2]&-8)-k|0;while(1){a=b[d+16>>2]|0;if(!a){a=b[d+20>>2]|0;if(!a)break}h=(b[a+4>>2]&-8)-k|0;f=h>>>0<j>>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=b[i+24>>2]|0;c=b[i+12>>2]|0;do if((c|0)==(i|0)){a=i+20|0;c=b[a>>2]|0;if(!c){a=i+16|0;c=b[a>>2]|0;if(!c){d=0;break}}while(1){e=c+20|0;d=b[e>>2]|0;if(!d){e=c+16|0;d=b[e>>2]|0;if(!d)break;else{c=d;a=e}}else{c=d;a=e}}b[a>>2]=0;d=c}else{d=b[i+8>>2]|0;b[d+12>>2]=c;b[c+8>>2]=d;d=c}while(0);do if(f|0){c=b[i+28>>2]|0;a=23732+(c<<2)|0;if((i|0)==(b[a>>2]|0)){b[a>>2]=d;if(!d){b[5858]=g&~(1<<c);break}}else{v=f+16|0;b[((b[v>>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}b[d+24>>2]=f;c=b[i+16>>2]|0;if(c|0){b[d+16>>2]=c;b[c+24>>2]=d}c=b[i+20>>2]|0;if(c|0){b[d+20>>2]=c;b[c+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;b[i+4>>2]=v|3;v=i+v+4|0;b[v>>2]=b[v>>2]|1}else{b[i+4>>2]=k|3;b[h+4>>2]=j|1;b[h+j>>2]=j;if(l|0){e=b[5862]|0;c=l>>>3;d=23468+(c<<1<<2)|0;c=1<<c;if(!(c&m)){b[5857]=c|m;c=d;a=d+8|0}else{a=d+8|0;c=b[a>>2]|0}b[a>>2]=e;b[c+12>>2]=e;b[e+8>>2]=c;b[e+12>>2]=d}b[5859]=j;b[5862]=h}v=i+8|0;T=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=b[5858]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<<m;i=(q+520192|0)>>>16&4;q=q<<i;j=(q+245760|0)>>>16&2;j=14-(i|m|j)+(q<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=b[23732+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(b[d+4>>2]&-8)-k|0;if(h>>>0<f>>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=b[d+20>>2]|0;d=b[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}m=(a&0-a)+-1|0;h=m>>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=b[23732+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(b[g+4>>2]&-8)-k|0;d=m>>>0<f>>>0;f=d?m:f;a=d?g:a;d=b[g+16>>2]|0;if(!d)d=b[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((b[5859]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=b[i+24>>2]|0;c=b[i+12>>2]|0;do if((c|0)==(i|0)){a=i+20|0;c=b[a>>2]|0;if(!c){a=i+16|0;c=b[a>>2]|0;if(!c){c=0;break}}while(1){f=c+20|0;d=b[f>>2]|0;if(!d){f=c+16|0;d=b[f>>2]|0;if(!d)break;else{c=d;a=f}}else{c=d;a=f}}b[a>>2]=0}else{v=b[i+8>>2]|0;b[v+12>>2]=c;b[c+8>>2]=v}while(0);do if(g){a=b[i+28>>2]|0;d=23732+(a<<2)|0;if((i|0)==(b[d>>2]|0)){b[d>>2]=c;if(!c){e=e&~(1<<a);b[5858]=e;break}}else{v=g+16|0;b[((b[v>>2]|0)==(i|0)?v:g+20|0)>>2]=c;if(!c)break}b[c+24>>2]=g;a=b[i+16>>2]|0;if(a|0){b[c+16>>2]=a;b[a+24>>2]=c}a=b[i+20>>2]|0;if(a){b[c+20>>2]=a;b[a+24>>2]=c}}while(0);b:do if(h>>>0<16){v=h+k|0;b[i+4>>2]=v|3;v=i+v+4|0;b[v>>2]=b[v>>2]|1}else{b[i+4>>2]=k|3;b[l+4>>2]=h|1;b[l+h>>2]=h;c=h>>>3;if(h>>>0<256){d=23468+(c<<1<<2)|0;a=b[5857]|0;c=1<<c;if(!(a&c)){b[5857]=a|c;c=d;a=d+8|0}else{a=d+8|0;c=b[a>>2]|0}b[a>>2]=l;b[c+12>>2]=l;b[l+8>>2]=c;b[l+12>>2]=d;break}c=h>>>8;if(c)if(h>>>0>16777215)d=31;else{u=(c+1048320|0)>>>16&8;v=c<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;c=23732+(d<<2)|0;b[l+28>>2]=d;a=l+16|0;b[a+4>>2]=0;b[a>>2]=0;a=1<<d;if(!(e&a)){b[5858]=e|a;b[c>>2]=l;b[l+24>>2]=c;b[l+12>>2]=l;b[l+8>>2]=l;break}c=b[c>>2]|0;c:do if((b[c+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(h|0)){c=a;break c}else{e=e<<1;c=a}}b[d>>2]=l;b[l+24>>2]=c;b[l+12>>2]=l;b[l+8>>2]=l;break b}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=l;b[u>>2]=l;b[l+8>>2]=v;b[l+12>>2]=c;b[l+24>>2]=0}while(0);v=i+8|0;T=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=b[5859]|0;if(d>>>0>=m>>>0){c=d-m|0;a=b[5862]|0;if(c>>>0>15){v=a+m|0;b[5862]=v;b[5859]=c;b[v+4>>2]=c|1;b[a+d>>2]=c;b[a+4>>2]=m|3}else{b[5859]=0;b[5862]=0;b[a+4>>2]=d|3;v=a+d+4|0;b[v>>2]=b[v>>2]|1}v=a+8|0;T=w;return v|0}h=b[5860]|0;if(h>>>0>m>>>0){t=h-m|0;b[5860]=t;v=b[5863]|0;u=v+m|0;b[5863]=u;b[u+4>>2]=t|1;b[v+4>>2]=m|3;v=v+8|0;T=w;return v|0}if(!(b[5975]|0)){b[5977]=4096;b[5976]=4096;b[5978]=-1;b[5979]=-1;b[5980]=0;b[5968]=0;b[5975]=n&-16^1431655768;a=4096}else a=b[5977]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;T=w;return v|0}a=b[5967]|0;if(a|0?(l=b[5965]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;T=w;return v|0}d:do if(!(b[5968]&4)){d=b[5863]|0;e:do if(d){e=23876;while(1){n=b[e>>2]|0;if(n>>>0<=d>>>0?(n+(b[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=b[e+8>>2]|0;if(!a){q=128;break e}else e=a}c=g-h&f;if(c>>>0<2147483647){a=Dd(c|0)|0;if((a|0)==((b[e>>2]|0)+(b[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=c;g=a;q=145;break d}}else{e=a;q=136}}else c=0}else q=128;while(0);do if((q|0)==128){d=Dd(0)|0;if((d|0)!=(-1|0)?(c=d,o=b[5976]|0,p=o+-1|0,c=((p&c|0)==0?0:(p+c&0-o)-c|0)+k|0,o=b[5965]|0,p=c+o|0,c>>>0>m>>>0&c>>>0<2147483647):0){n=b[5967]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){c=0;break}a=Dd(c|0)|0;if((a|0)==(d|0)){h=c;g=d;q=145;break d}else{e=a;q=136}}else c=0}while(0);do if((q|0)==136){d=0-c|0;if(!(i>>>0>c>>>0&(c>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){c=0;break}else{h=c;g=e;q=145;break d}a=b[5977]|0;a=j-c+a&0-a;if(a>>>0>=2147483647){h=c;g=e;q=145;break d}if((Dd(a|0)|0)==(-1|0)){Dd(d|0)|0;c=0;break}else{h=a+c|0;g=e;q=145;break d}}while(0);b[5968]=b[5968]|4;q=143}else{c=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=Dd(k|0)|0,p=Dd(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0<p>>>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:c;g=t;q=145}if((q|0)==145){c=(b[5965]|0)+h|0;b[5965]=c;if(c>>>0>(b[5966]|0)>>>0)b[5966]=c;j=b[5863]|0;f:do if(j){c=23876;while(1){a=b[c>>2]|0;d=b[c+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=b[c+8>>2]|0;if(!e)break;else c=e}if(((q|0)==154?(u=c+4|0,(b[c+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){b[u>>2]=d+h;v=(b[5860]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;b[5863]=u;b[5860]=t;b[u+4>>2]=t|1;b[j+v+4>>2]=40;b[5864]=b[5979];break}if(g>>>0<(b[5861]|0)>>>0)b[5861]=g;d=g+h|0;c=23876;while(1){if((b[c>>2]|0)==(d|0)){q=162;break}a=b[c+8>>2]|0;if(!a)break;else c=a}if((q|0)==162?(b[c+12>>2]&8|0)==0:0){b[c>>2]=g;l=c+4|0;b[l>>2]=(b[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;c=d+8|0;c=d+((c&7|0)==0?0:0-c&7)|0;k=l+m|0;i=c-l-m|0;b[l+4>>2]=m|3;g:do if((j|0)==(c|0)){v=(b[5860]|0)+i|0;b[5860]=v;b[5863]=k;b[k+4>>2]=v|1}else{if((b[5862]|0)==(c|0)){v=(b[5859]|0)+i|0;b[5859]=v;b[5862]=k;b[k+4>>2]=v|1;b[k+v>>2]=v;break}a=b[c+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=b[c+8>>2]|0;d=b[c+12>>2]|0;if((d|0)==(a|0)){b[5857]=b[5857]&~(1<<e);break}else{b[a+12>>2]=d;b[d+8>>2]=a;break}}else{g=b[c+24>>2]|0;a=b[c+12>>2]|0;do if((a|0)==(c|0)){d=c+16|0;e=d+4|0;a=b[e>>2]|0;if(!a){a=b[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=b[f>>2]|0;if(!e){f=a+16|0;e=b[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}b[d>>2]=0}else{v=b[c+8>>2]|0;b[v+12>>2]=a;b[a+8>>2]=v}while(0);if(!g)break;d=b[c+28>>2]|0;e=23732+(d<<2)|0;do if((b[e>>2]|0)!=(c|0)){v=g+16|0;b[((b[v>>2]|0)==(c|0)?v:g+20|0)>>2]=a;if(!a)break h}else{b[e>>2]=a;if(a|0)break;b[5858]=b[5858]&~(1<<d);break h}while(0);b[a+24>>2]=g;d=c+16|0;e=b[d>>2]|0;if(e|0){b[a+16>>2]=e;b[e+24>>2]=a}d=b[d+4>>2]|0;if(!d)break;b[a+20>>2]=d;b[d+24>>2]=a}while(0);c=c+h|0;f=h+i|0}else f=i;c=c+4|0;b[c>>2]=b[c>>2]&-2;b[k+4>>2]=f|1;b[k+f>>2]=f;c=f>>>3;if(f>>>0<256){d=23468+(c<<1<<2)|0;a=b[5857]|0;c=1<<c;if(!(a&c)){b[5857]=a|c;c=d;a=d+8|0}else{a=d+8|0;c=b[a>>2]|0}b[a>>2]=k;b[c+12>>2]=k;b[k+8>>2]=c;b[k+12>>2]=d;break}c=f>>>8;do if(!c)e=0;else{if(f>>>0>16777215){e=31;break}u=(c+1048320|0)>>>16&8;v=c<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);c=23732+(e<<2)|0;b[k+28>>2]=e;a=k+16|0;b[a+4>>2]=0;b[a>>2]=0;a=b[5858]|0;d=1<<e;if(!(a&d)){b[5858]=a|d;b[c>>2]=k;b[k+24>>2]=c;b[k+12>>2]=k;b[k+8>>2]=k;break}c=b[c>>2]|0;i:do if((b[c+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(f|0)){c=a;break i}else{e=e<<1;c=a}}b[d>>2]=k;b[k+24>>2]=c;b[k+12>>2]=k;b[k+8>>2]=k;break g}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=k;b[u>>2]=k;b[k+8>>2]=v;b[k+12>>2]=c;b[k+24>>2]=0}while(0);v=l+8|0;T=w;return v|0}c=23876;while(1){a=b[c>>2]|0;if(a>>>0<=j>>>0?(v=a+(b[c+4>>2]|0)|0,v>>>0>j>>>0):0)break;c=b[c+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;c=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;b[5863]=u;b[5860]=t;b[u+4>>2]=t|1;b[g+d+4>>2]=40;b[5864]=b[5979];d=a+4|0;b[d>>2]=27;b[c>>2]=b[5969];b[c+4>>2]=b[5970];b[c+8>>2]=b[5971];b[c+12>>2]=b[5972];b[5969]=g;b[5970]=h;b[5972]=0;b[5971]=c;c=a+24|0;do{u=c;c=c+4|0;b[c>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;b[d>>2]=b[d>>2]&-2;b[j+4>>2]=g|1;b[a>>2]=g;c=g>>>3;if(g>>>0<256){d=23468+(c<<1<<2)|0;a=b[5857]|0;c=1<<c;if(!(a&c)){b[5857]=a|c;c=d;a=d+8|0}else{a=d+8|0;c=b[a>>2]|0}b[a>>2]=j;b[c+12>>2]=j;b[j+8>>2]=c;b[j+12>>2]=d;break}c=g>>>8;if(c)if(g>>>0>16777215)e=31;else{u=(c+1048320|0)>>>16&8;v=c<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=23732+(e<<2)|0;b[j+28>>2]=e;b[j+20>>2]=0;b[f>>2]=0;c=b[5858]|0;a=1<<e;if(!(c&a)){b[5858]=c|a;b[d>>2]=j;b[j+24>>2]=d;b[j+12>>2]=j;b[j+8>>2]=j;break}c=b[d>>2]|0;j:do if((b[c+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=c+16+(e>>>31<<2)|0;a=b[d>>2]|0;if(!a)break;if((b[a+4>>2]&-8|0)==(g|0)){c=a;break j}else{e=e<<1;c=a}}b[d>>2]=j;b[j+24>>2]=c;b[j+12>>2]=j;b[j+8>>2]=j;break f}while(0);u=c+8|0;v=b[u>>2]|0;b[v+12>>2]=j;b[u>>2]=j;b[j+8>>2]=v;b[j+12>>2]=c;b[j+24>>2]=0}}else{v=b[5861]|0;if((v|0)==0|g>>>0<v>>>0)b[5861]=g;b[5969]=g;b[5970]=h;b[5972]=0;b[5866]=b[5975];b[5865]=-1;b[5870]=23468;b[5869]=23468;b[5872]=23476;b[5871]=23476;b[5874]=23484;b[5873]=23484;b[5876]=23492;b[5875]=23492;b[5878]=23500;b[5877]=23500;b[5880]=23508;b[5879]=23508;b[5882]=23516;b[5881]=23516;b[5884]=23524;b[5883]=23524;b[5886]=23532;b[5885]=23532;b[5888]=23540;b[5887]=23540;b[5890]=23548;b[5889]=23548;b[5892]=23556;b[5891]=23556;b[5894]=23564;b[5893]=23564;b[5896]=23572;b[5895]=23572;b[5898]=23580;b[5897]=23580;b[5900]=23588;b[5899]=23588;b[5902]=23596;b[5901]=23596;b[5904]=23604;b[5903]=23604;b[5906]=23612;b[5905]=23612;b[5908]=23620;b[5907]=23620;b[5910]=23628;b[5909]=23628;b[5912]=23636;b[5911]=23636;b[5914]=23644;b[5913]=23644;b[5916]=23652;b[5915]=23652;b[5918]=23660;b[5917]=23660;b[5920]=23668;b[5919]=23668;b[5922]=23676;b[5921]=23676;b[5924]=23684;b[5923]=23684;b[5926]=23692;b[5925]=23692;b[5928]=23700;b[5927]=23700;b[5930]=23708;b[5929]=23708;b[5932]=23716;b[5931]=23716;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;b[5863]=u;b[5860]=t;b[u+4>>2]=t|1;b[g+v+4>>2]=40;b[5864]=b[5979]}while(0);c=b[5860]|0;if(c>>>0>m>>>0){t=c-m|0;b[5860]=t;v=b[5863]|0;u=v+m|0;b[5863]=u;b[u+4>>2]=t|1;b[v+4>>2]=m|3;v=v+8|0;T=w;return v|0}}v=fd()|0;b[v>>2]=12;v=0;T=w;return v|0}function jd(a){a=a|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=b[5861]|0;a=b[a+-4>>2]|0;c=a&-8;j=d+c|0;do if(!(a&1)){e=b[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+c|0;if(h>>>0<f>>>0)return;if((b[5862]|0)==(h|0)){a=j+4|0;c=b[a>>2]|0;if((c&3|0)!=3){i=h;c=g;break}b[5859]=g;b[a>>2]=c&-2;b[h+4>>2]=g|1;b[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=b[h+8>>2]|0;c=b[h+12>>2]|0;if((c|0)==(a|0)){b[5857]=b[5857]&~(1<<d);i=h;c=g;break}else{b[a+12>>2]=c;b[c+8>>2]=a;i=h;c=g;break}}f=b[h+24>>2]|0;a=b[h+12>>2]|0;do if((a|0)==(h|0)){c=h+16|0;d=c+4|0;a=b[d>>2]|0;if(!a){a=b[c>>2]|0;if(!a){a=0;break}}else c=d;while(1){e=a+20|0;d=b[e>>2]|0;if(!d){e=a+16|0;d=b[e>>2]|0;if(!d)break;else{a=d;c=e}}else{a=d;c=e}}b[c>>2]=0}else{i=b[h+8>>2]|0;b[i+12>>2]=a;b[a+8>>2]=i}while(0);if(f){c=b[h+28>>2]|0;d=23732+(c<<2)|0;if((b[d>>2]|0)==(h|0)){b[d>>2]=a;if(!a){b[5858]=b[5858]&~(1<<c);i=h;c=g;break}}else{i=f+16|0;b[((b[i>>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;c=g;break}}b[a+24>>2]=f;c=h+16|0;d=b[c>>2]|0;if(d|0){b[a+16>>2]=d;b[d+24>>2]=a}c=b[c+4>>2]|0;if(c){b[a+20>>2]=c;b[c+24>>2]=a;i=h;c=g}else{i=h;c=g}}else{i=h;c=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=b[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((b[5863]|0)==(j|0)){j=(b[5860]|0)+c|0;b[5860]=j;b[5863]=i;b[i+4>>2]=j|1;if((i|0)!=(b[5862]|0))return;b[5862]=0;b[5859]=0;return}if((b[5862]|0)==(j|0)){j=(b[5859]|0)+c|0;b[5859]=j;b[5862]=h;b[i+4>>2]=j|1;b[h+j>>2]=j;return}f=(e&-8)+c|0;d=e>>>3;do if(e>>>0<256){c=b[j+8>>2]|0;a=b[j+12>>2]|0;if((a|0)==(c|0)){b[5857]=b[5857]&~(1<<d);break}else{b[c+12>>2]=a;b[a+8>>2]=c;break}}else{g=b[j+24>>2]|0;a=b[j+12>>2]|0;do if((a|0)==(j|0)){c=j+16|0;d=c+4|0;a=b[d>>2]|0;if(!a){a=b[c>>2]|0;if(!a){d=0;break}}else c=d;while(1){e=a+20|0;d=b[e>>2]|0;if(!d){e=a+16|0;d=b[e>>2]|0;if(!d)break;else{a=d;c=e}}else{a=d;c=e}}b[c>>2]=0;d=a}else{d=b[j+8>>2]|0;b[d+12>>2]=a;b[a+8>>2]=d;d=a}while(0);if(g|0){a=b[j+28>>2]|0;c=23732+(a<<2)|0;if((b[c>>2]|0)==(j|0)){b[c>>2]=d;if(!d){b[5858]=b[5858]&~(1<<a);break}}else{e=g+16|0;b[((b[e>>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}b[d+24>>2]=g;a=j+16|0;c=b[a>>2]|0;if(c|0){b[d+16>>2]=c;b[c+24>>2]=d}a=b[a+4>>2]|0;if(a|0){b[d+20>>2]=a;b[a+24>>2]=d}}}while(0);b[i+4>>2]=f|1;b[h+f>>2]=f;if((i|0)==(b[5862]|0)){b[5859]=f;return}}else{b[a>>2]=e&-2;b[i+4>>2]=c|1;b[h+c>>2]=c;f=c}a=f>>>3;if(f>>>0<256){d=23468+(a<<1<<2)|0;c=b[5857]|0;a=1<<a;if(!(c&a)){b[5857]=c|a;a=d;c=d+8|0}else{c=d+8|0;a=b[c>>2]|0}b[c>>2]=i;b[a+12>>2]=i;b[i+8>>2]=a;b[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;e=(j+245760|0)>>>16&2;e=14-(g|h|e)+(j<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=23732+(e<<2)|0;b[i+28>>2]=e;b[i+20>>2]=0;b[i+16>>2]=0;c=b[5858]|0;d=1<<e;a:do if(!(c&d)){b[5858]=c|d;b[a>>2]=i;b[i+24>>2]=a;b[i+12>>2]=i;b[i+8>>2]=i}else{a=b[a>>2]|0;b:do if((b[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;c=b[d>>2]|0;if(!c)break;if((b[c+4>>2]&-8|0)==(f|0)){a=c;break b}else{e=e<<1;a=c}}b[d>>2]=i;b[i+24>>2]=a;b[i+12>>2]=i;b[i+8>>2]=i;break a}while(0);h=a+8|0;j=b[h>>2]|0;b[j+12>>2]=i;b[h>>2]=i;b[i+8>>2]=j;b[i+12>>2]=a;b[i+24>>2]=0}while(0);j=(b[5865]|0)+-1|0;b[5865]=j;if(j|0)return;a=23884;while(1){a=b[a>>2]|0;if(!a)break;else a=a+8|0}b[5865]=-1;return}function kd(a,c){a=a|0;c=c|0;var d=0;if(a){d=B(c,a)|0;if((c|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(c|0)?d:-1}else d=0;a=id(d)|0;if(!a)return a|0;if(!(b[a+-4>>2]&3))return a|0;Bd(a|0,0,d|0)|0;return a|0}function ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (G(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function md(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (G(d|0),a-c>>>0|0)|0}function nd(a){a=a|0;return (a?31-(E(a^a-1)|0)|0:32)|0}function od(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=c;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){b[f>>2]=(l>>>0)%(h>>>0);b[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (G(n|0),f)|0}else{if(!g){n=0;f=0;return (G(n|0),f)|0}b[f>>2]=a|0;b[f+4>>2]=c&0;n=0;f=0;return (G(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(E(i|0)|0)-(E(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;c=g-31>>31;h=m;a=l>>>(m>>>0)&c|k<<i;c=k>>>(m>>>0)&c;g=0;i=l<<i;break}if(!f){n=0;f=0;return (G(n|0),f)|0}b[f>>2]=a|0;b[f+4>>2]=j|c&0;n=0;f=0;return (G(n|0),f)|0}g=h-1|0;if(g&h|0){i=(E(h|0)|0)+33-(E(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;c=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&c;c=c&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){b[f>>2]=g&l;b[f+4>>2]=0}if((h|0)==1){o=j|c&0;p=a|0|0;return (G(o|0),p)|0}else{p=nd(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (G(o|0),p)|0}}else{if(g){if(f|0){b[f>>2]=(k>>>0)%(h>>>0);b[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (G(o|0),p)|0}if(!l){if(f|0){b[f>>2]=0;b[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (G(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){b[f>>2]=a|0;b[f+4>>2]=g&k|c&0}o=0;p=k>>>((nd(i|0)|0)>>>0);return (G(o|0),p)|0}g=(E(i|0)|0)-(E(k|0)|0)|0;if(g>>>0<=30){c=g+1|0;i=31-g|0;h=c;a=k<<i|l>>>(c>>>0);c=k>>>(c>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (G(o|0),p)|0}b[f>>2]=a|0;b[f+4>>2]=j|c&0;o=0;p=0;return (G(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=ld(m|0,l|0,-1,-1)|0;d=H()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|c<<1|0;md(k|0,d|0,e|0,n|0)|0;p=H()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=md(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;c=H()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){b[f>>2]=a;b[f+4>>2]=c}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (G(o|0),p)|0}function pd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=md(j^a|0,i^b|0,j|0,i|0)|0;g=H()|0;a=f^j;b=e^i;return md((od(h,g,md(f^c|0,e^d|0,f|0,e|0)|0,H()|0,0)|0)^a|0,(H()|0)^b|0,a|0,b|0)|0}function qd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=B(e,f)|0;d=a>>>16;a=(c>>>16)+(B(e,d)|0)|0;e=b>>>16;b=B(e,f)|0;return (G((a>>>16)+(B(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function rd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qd(e,f)|0;a=H()|0;return (G((B(b,f)|0)+(B(d,e)|0)+a|a&0|0),c|0|0)|0}function sd(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=T;T=T+16|0;i=f|0;h=c>>31|((c|0)<0?-1:0)<<1;g=((c|0)<0?-1:0)>>31|((c|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;j=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=md(h^a|0,g^c|0,h|0,g|0)|0;c=H()|0;od(a,c,md(k^d|0,j^e|0,k|0,j|0)|0,H()|0,i)|0;e=md(b[i>>2]^h|0,b[i+4>>2]^g|0,h|0,g|0)|0;d=H()|0;T=f;return (G(d|0),e)|0}function td(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=T;T=T+16|0;f=g|0;od(a,c,d,e,f)|0;T=g;return (G(b[f+4>>2]|0),b[f>>2]|0)|0}function ud(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}G(((b|0)<0?-1:0)|0);return b>>c-32|0}function vd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}G(0);return b>>>c-32|0}function wd(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){G(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}G(a<<c-32|0);return 0}function xd(a,b){a=+a;b=+b;if(a!=a)return +b;if(b!=b)return +a;return +D(+a,+b)}function yd(a,b){a=+a;b=+b;if(a!=a)return +b;if(b!=b)return +a;return +C(+a,+b)}function zd(a){a=+a;return a>=0.0?+p(a+.5):+A(a-.5)}function Ad(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){L(c|0,d|0,e|0)|0;return c|0}h=c|0;g=c+e|0;if((c&3)==(d&3)){while(c&3){if(!e)return h|0;a[c>>0]=a[d>>0]|0;c=c+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((c|0)<=(f|0)){b[c>>2]=b[d>>2];b[c+4>>2]=b[d+4>>2];b[c+8>>2]=b[d+8>>2];b[c+12>>2]=b[d+12>>2];b[c+16>>2]=b[d+16>>2];b[c+20>>2]=b[d+20>>2];b[c+24>>2]=b[d+24>>2];b[c+28>>2]=b[d+28>>2];b[c+32>>2]=b[d+32>>2];b[c+36>>2]=b[d+36>>2];b[c+40>>2]=b[d+40>>2];b[c+44>>2]=b[d+44>>2];b[c+48>>2]=b[d+48>>2];b[c+52>>2]=b[d+52>>2];b[c+56>>2]=b[d+56>>2];b[c+60>>2]=b[d+60>>2];c=c+64|0;d=d+64|0}while((c|0)<(e|0)){b[c>>2]=b[d>>2];c=c+4|0;d=d+4|0}}else{e=g-4|0;while((c|0)<(e|0)){a[c>>0]=a[d>>0]|0;a[c+1>>0]=a[d+1>>0]|0;a[c+2>>0]=a[d+2>>0]|0;a[c+3>>0]=a[d+3>>0]|0;c=c+4|0;d=d+4|0}}while((c|0)<(g|0)){a[c>>0]=a[d>>0]|0;c=c+1|0;d=d+1|0}return h|0}function Bd(c,d,e){c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c+e|0;d=d&255;if((e|0)>=67){while(c&3){a[c>>0]=d;c=c+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((c|0)<=(g|0)){b[c>>2]=i;b[c+4>>2]=i;b[c+8>>2]=i;b[c+12>>2]=i;b[c+16>>2]=i;b[c+20>>2]=i;b[c+24>>2]=i;b[c+28>>2]=i;b[c+32>>2]=i;b[c+36>>2]=i;b[c+40>>2]=i;b[c+44>>2]=i;b[c+48>>2]=i;b[c+52>>2]=i;b[c+56>>2]=i;b[c+60>>2]=i;c=c+64|0}while((c|0)<(f|0)){b[c>>2]=i;c=c+4|0}}while((c|0)<(h|0)){a[c>>0]=d;c=c+1|0}return h-e|0}function Cd(a){a=+a;return a>=0.0?+p(a+.5):+A(a-.5)}function Dd(a){a=a|0;var c=0,d=0,e=0;e=K()|0;d=b[g>>2]|0;c=d+a|0;if((a|0)>0&(c|0)<(d|0)|(c|0)<0){N(c|0)|0;J(12);return -1}if((c|0)>(e|0))if(!(M(c|0)|0)){J(12);return -1}b[g>>2]=c;return d|0}\n\n// EMSCRIPTEN_END_FUNCS\nreturn{___divdi3:pd,___muldi3:rd,___remdi3:sd,___uremdi3:td,_areNeighborCells:$a,_bitshift64Ashr:ud,_bitshift64Lshr:vd,_bitshift64Shl:wd,_calloc:kd,_cellAreaKm2:lc,_cellAreaM2:mc,_cellAreaRads2:kc,_cellToBoundary:Qb,_cellToCenterChild:Ab,_cellToChildPos:Vb,_cellToChildren:yb,_cellToChildrenSize:wb,_cellToLatLng:Pb,_cellToLocalIj:xc,_cellToParent:vb,_cellToVertex:Wc,_cellToVertexes:Xc,_cellsToDirectedEdge:ab,_cellsToLinkedMultiPolygon:la,_childPosToCell:Wb,_compactCells:Bb,_destroyLinkedMultiPolygon:sc,_directedEdgeToBoundary:gb,_directedEdgeToCells:eb,_edgeLengthKm:oc,_edgeLengthM:pc,_edgeLengthRads:nc,_emscripten_replace_memory:W,_free:jd,_getBaseCellNumber:tb,_getDirectedEdgeDestination:cb,_getDirectedEdgeOrigin:bb,_getHexagonAreaAvgKm2:ec,_getHexagonAreaAvgM2:fc,_getHexagonEdgeLengthAvgKm:gc,_getHexagonEdgeLengthAvgM:hc,_getIcosahedronFaces:Sb,_getNumCells:ic,_getPentagons:Ub,_getRes0Cells:wa,_getResolution:sb,_greatCircleDistanceKm:ac,_greatCircleDistanceM:bc,_greatCircleDistanceRads:$b,_gridDisk:aa,_gridDiskDistances:ba,_gridDistance:zc,_gridPathCells:Bc,_gridPathCellsSize:Ac,_gridRingUnsafe:ga,_i64Add:ld,_i64Subtract:md,_isPentagon:xb,_isResClassIII:Eb,_isValidCell:ub,_isValidDirectedEdge:db,_isValidVertex:Zc,_latLngToCell:Mb,_llvm_maxnum_f64:xd,_llvm_minnum_f64:yd,_llvm_round_f64:zd,_localIjToCell:yc,_malloc:id,_maxFaceCount:Rb,_maxGridDiskSize:$,_maxPolygonToCellsSize:ha,_memcpy:Ad,_memset:Bd,_originToDirectedEdges:fb,_pentagonCount:Tb,_polygonToCells:ja,_readInt64AsDoubleFromPointer:Oc,_res0CellCount:va,_round:Cd,_sbrk:Dd,_sizeOfCellBoundary:Jc,_sizeOfCoordIJ:Nc,_sizeOfGeoLoop:Kc,_sizeOfGeoPolygon:Lc,_sizeOfH3Index:Hc,_sizeOfLatLng:Ic,_sizeOfLinkedGeoPolygon:Mc,_uncompactCells:Cb,_uncompactCellsSize:Db,_vertexToLatLng:Yc,establishStackSpace:_,stackAlloc:X,stackRestore:Z,stackSave:Y}})\n\n\n// EMSCRIPTEN_END_ASM\n(asmGlobalArg,asmLibraryArg,buffer);var ___divdi3=Module[\"___divdi3\"]=asm[\"___divdi3\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___remdi3=Module[\"___remdi3\"]=asm[\"___remdi3\"];var ___uremdi3=Module[\"___uremdi3\"]=asm[\"___uremdi3\"];var _areNeighborCells=Module[\"_areNeighborCells\"]=asm[\"_areNeighborCells\"];var _bitshift64Ashr=Module[\"_bitshift64Ashr\"]=asm[\"_bitshift64Ashr\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _calloc=Module[\"_calloc\"]=asm[\"_calloc\"];var _cellAreaKm2=Module[\"_cellAreaKm2\"]=asm[\"_cellAreaKm2\"];var _cellAreaM2=Module[\"_cellAreaM2\"]=asm[\"_cellAreaM2\"];var _cellAreaRads2=Module[\"_cellAreaRads2\"]=asm[\"_cellAreaRads2\"];var _cellToBoundary=Module[\"_cellToBoundary\"]=asm[\"_cellToBoundary\"];var _cellToCenterChild=Module[\"_cellToCenterChild\"]=asm[\"_cellToCenterChild\"];var _cellToChildPos=Module[\"_cellToChildPos\"]=asm[\"_cellToChildPos\"];var _cellToChildren=Module[\"_cellToChildren\"]=asm[\"_cellToChildren\"];var _cellToChildrenSize=Module[\"_cellToChildrenSize\"]=asm[\"_cellToChildrenSize\"];var _cellToLatLng=Module[\"_cellToLatLng\"]=asm[\"_cellToLatLng\"];var _cellToLocalIj=Module[\"_cellToLocalIj\"]=asm[\"_cellToLocalIj\"];var _cellToParent=Module[\"_cellToParent\"]=asm[\"_cellToParent\"];var _cellToVertex=Module[\"_cellToVertex\"]=asm[\"_cellToVertex\"];var _cellToVertexes=Module[\"_cellToVertexes\"]=asm[\"_cellToVertexes\"];var _cellsToDirectedEdge=Module[\"_cellsToDirectedEdge\"]=asm[\"_cellsToDirectedEdge\"];var _cellsToLinkedMultiPolygon=Module[\"_cellsToLinkedMultiPolygon\"]=asm[\"_cellsToLinkedMultiPolygon\"];var _childPosToCell=Module[\"_childPosToCell\"]=asm[\"_childPosToCell\"];var _compactCells=Module[\"_compactCells\"]=asm[\"_compactCells\"];var _destroyLinkedMultiPolygon=Module[\"_destroyLinkedMultiPolygon\"]=asm[\"_destroyLinkedMultiPolygon\"];var _directedEdgeToBoundary=Module[\"_directedEdgeToBoundary\"]=asm[\"_directedEdgeToBoundary\"];var _directedEdgeToCells=Module[\"_directedEdgeToCells\"]=asm[\"_directedEdgeToCells\"];var _edgeLengthKm=Module[\"_edgeLengthKm\"]=asm[\"_edgeLengthKm\"];var _edgeLengthM=Module[\"_edgeLengthM\"]=asm[\"_edgeLengthM\"];var _edgeLengthRads=Module[\"_edgeLengthRads\"]=asm[\"_edgeLengthRads\"];var _emscripten_replace_memory=Module[\"_emscripten_replace_memory\"]=asm[\"_emscripten_replace_memory\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _getBaseCellNumber=Module[\"_getBaseCellNumber\"]=asm[\"_getBaseCellNumber\"];var _getDirectedEdgeDestination=Module[\"_getDirectedEdgeDestination\"]=asm[\"_getDirectedEdgeDestination\"];var _getDirectedEdgeOrigin=Module[\"_getDirectedEdgeOrigin\"]=asm[\"_getDirectedEdgeOrigin\"];var _getHexagonAreaAvgKm2=Module[\"_getHexagonAreaAvgKm2\"]=asm[\"_getHexagonAreaAvgKm2\"];var _getHexagonAreaAvgM2=Module[\"_getHexagonAreaAvgM2\"]=asm[\"_getHexagonAreaAvgM2\"];var _getHexagonEdgeLengthAvgKm=Module[\"_getHexagonEdgeLengthAvgKm\"]=asm[\"_getHexagonEdgeLengthAvgKm\"];var _getHexagonEdgeLengthAvgM=Module[\"_getHexagonEdgeLengthAvgM\"]=asm[\"_getHexagonEdgeLengthAvgM\"];var _getIcosahedronFaces=Module[\"_getIcosahedronFaces\"]=asm[\"_getIcosahedronFaces\"];var _getNumCells=Module[\"_getNumCells\"]=asm[\"_getNumCells\"];var _getPentagons=Module[\"_getPentagons\"]=asm[\"_getPentagons\"];var _getRes0Cells=Module[\"_getRes0Cells\"]=asm[\"_getRes0Cells\"];var _getResolution=Module[\"_getResolution\"]=asm[\"_getResolution\"];var _greatCircleDistanceKm=Module[\"_greatCircleDistanceKm\"]=asm[\"_greatCircleDistanceKm\"];var _greatCircleDistanceM=Module[\"_greatCircleDistanceM\"]=asm[\"_greatCircleDistanceM\"];var _greatCircleDistanceRads=Module[\"_greatCircleDistanceRads\"]=asm[\"_greatCircleDistanceRads\"];var _gridDisk=Module[\"_gridDisk\"]=asm[\"_gridDisk\"];var _gridDiskDistances=Module[\"_gridDiskDistances\"]=asm[\"_gridDiskDistances\"];var _gridDistance=Module[\"_gridDistance\"]=asm[\"_gridDistance\"];var _gridPathCells=Module[\"_gridPathCells\"]=asm[\"_gridPathCells\"];var _gridPathCellsSize=Module[\"_gridPathCellsSize\"]=asm[\"_gridPathCellsSize\"];var _gridRingUnsafe=Module[\"_gridRingUnsafe\"]=asm[\"_gridRingUnsafe\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _isPentagon=Module[\"_isPentagon\"]=asm[\"_isPentagon\"];var _isResClassIII=Module[\"_isResClassIII\"]=asm[\"_isResClassIII\"];var _isValidCell=Module[\"_isValidCell\"]=asm[\"_isValidCell\"];var _isValidDirectedEdge=Module[\"_isValidDirectedEdge\"]=asm[\"_isValidDirectedEdge\"];var _isValidVertex=Module[\"_isValidVertex\"]=asm[\"_isValidVertex\"];var _latLngToCell=Module[\"_latLngToCell\"]=asm[\"_latLngToCell\"];var _llvm_maxnum_f64=Module[\"_llvm_maxnum_f64\"]=asm[\"_llvm_maxnum_f64\"];var _llvm_minnum_f64=Module[\"_llvm_minnum_f64\"]=asm[\"_llvm_minnum_f64\"];var _llvm_round_f64=Module[\"_llvm_round_f64\"]=asm[\"_llvm_round_f64\"];var _localIjToCell=Module[\"_localIjToCell\"]=asm[\"_localIjToCell\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _maxFaceCount=Module[\"_maxFaceCount\"]=asm[\"_maxFaceCount\"];var _maxGridDiskSize=Module[\"_maxGridDiskSize\"]=asm[\"_maxGridDiskSize\"];var _maxPolygonToCellsSize=Module[\"_maxPolygonToCellsSize\"]=asm[\"_maxPolygonToCellsSize\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _originToDirectedEdges=Module[\"_originToDirectedEdges\"]=asm[\"_originToDirectedEdges\"];var _pentagonCount=Module[\"_pentagonCount\"]=asm[\"_pentagonCount\"];var _polygonToCells=Module[\"_polygonToCells\"]=asm[\"_polygonToCells\"];var _readInt64AsDoubleFromPointer=Module[\"_readInt64AsDoubleFromPointer\"]=asm[\"_readInt64AsDoubleFromPointer\"];var _res0CellCount=Module[\"_res0CellCount\"]=asm[\"_res0CellCount\"];var _round=Module[\"_round\"]=asm[\"_round\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var _sizeOfCellBoundary=Module[\"_sizeOfCellBoundary\"]=asm[\"_sizeOfCellBoundary\"];var _sizeOfCoordIJ=Module[\"_sizeOfCoordIJ\"]=asm[\"_sizeOfCoordIJ\"];var _sizeOfGeoLoop=Module[\"_sizeOfGeoLoop\"]=asm[\"_sizeOfGeoLoop\"];var _sizeOfGeoPolygon=Module[\"_sizeOfGeoPolygon\"]=asm[\"_sizeOfGeoPolygon\"];var _sizeOfH3Index=Module[\"_sizeOfH3Index\"]=asm[\"_sizeOfH3Index\"];var _sizeOfLatLng=Module[\"_sizeOfLatLng\"]=asm[\"_sizeOfLatLng\"];var _sizeOfLinkedGeoPolygon=Module[\"_sizeOfLinkedGeoPolygon\"]=asm[\"_sizeOfLinkedGeoPolygon\"];var _uncompactCells=Module[\"_uncompactCells\"]=asm[\"_uncompactCells\"];var _uncompactCellsSize=Module[\"_uncompactCellsSize\"]=asm[\"_uncompactCellsSize\"];var _vertexToLatLng=Module[\"_vertexToLatLng\"]=asm[\"_vertexToLatLng\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];Module[\"asm\"]=asm;Module[\"cwrap\"]=cwrap;Module[\"setValue\"]=setValue;Module[\"getValue\"]=getValue;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=readBinary(memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency(\"memory initializer\");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\")};var doBrowserLoad=function(){readAsync(memoryInitializer,applyMemoryInitializer,function(){throw\"could not load memory initializer \"+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module[\"memoryInitializerRequest\"]){var useRequest=function(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0)}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest)}}else{doBrowserLoad()}}}var calledRun;function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;if(ABORT)return;initRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\")},1);doRun()},1)}else{doRun()}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what)}what+=\"\";out(what);err(what);ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\"}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}noExitRuntime=true;run();\n\n\n\n return libh3\n}\n)(typeof libh3 === 'object' ? libh3 : {});\nexport default libh3;","/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Define the C bindings for the h3 library\n\n// Add some aliases to make the function definitions more intelligible\nconst NUMBER = 'number';\nconst H3_ERROR = NUMBER;\nconst BOOLEAN = NUMBER;\nconst H3_LOWER = NUMBER;\nconst H3_UPPER = NUMBER;\nconst RESOLUTION = NUMBER;\nconst POINTER = NUMBER;\n\n// Define the bindings to functions in the C lib. Functions are defined as\n// [name, return type, [arg types]]. You must run `npm run build-emscripten`\n// before new functions added here will be available.\n/** @type {([string, string] | [string, string | null, string[]])[]} */\nexport default [\n // The size functions are inserted via build/sizes.h\n ['sizeOfH3Index', NUMBER],\n ['sizeOfLatLng', NUMBER],\n ['sizeOfCellBoundary', NUMBER],\n ['sizeOfGeoLoop', NUMBER],\n ['sizeOfGeoPolygon', NUMBER],\n ['sizeOfLinkedGeoPolygon', NUMBER],\n ['sizeOfCoordIJ', NUMBER],\n ['readInt64AsDoubleFromPointer', NUMBER],\n // The remaining functions are defined in the core lib in h3Api.h\n ['isValidCell', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['latLngToCell', H3_ERROR, [NUMBER, NUMBER, RESOLUTION, POINTER]],\n ['cellToLatLng', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['cellToBoundary', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['maxGridDiskSize', H3_ERROR, [NUMBER, POINTER]],\n ['gridDisk', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['gridDiskDistances', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER, POINTER]],\n ['gridRingUnsafe', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['maxPolygonToCellsSize', H3_ERROR, [POINTER, RESOLUTION, NUMBER, POINTER]],\n ['polygonToCells', H3_ERROR, [POINTER, RESOLUTION, NUMBER, POINTER]],\n ['cellsToLinkedMultiPolygon', H3_ERROR, [POINTER, NUMBER, POINTER]],\n ['destroyLinkedMultiPolygon', null, [POINTER]],\n ['compactCells', H3_ERROR, [POINTER, POINTER, NUMBER, NUMBER]],\n ['uncompactCells', H3_ERROR, [POINTER, NUMBER, NUMBER, POINTER, NUMBER, RESOLUTION]],\n ['uncompactCellsSize', H3_ERROR, [POINTER, NUMBER, NUMBER, RESOLUTION, POINTER]],\n ['isPentagon', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['isResClassIII', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['getBaseCellNumber', NUMBER, [H3_LOWER, H3_UPPER]],\n ['getResolution', NUMBER, [H3_LOWER, H3_UPPER]],\n ['maxFaceCount', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['getIcosahedronFaces', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['cellToParent', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['cellToChildren', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['cellToCenterChild', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['cellToChildrenSize', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['cellToChildPos', H3_ERROR, [H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['childPosToCell', H3_ERROR, [NUMBER, NUMBER, H3_LOWER, H3_UPPER, RESOLUTION, POINTER]],\n ['areNeighborCells', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['cellsToDirectedEdge', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['getDirectedEdgeOrigin', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['getDirectedEdgeDestination', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['isValidDirectedEdge', BOOLEAN, [H3_LOWER, H3_UPPER]],\n ['directedEdgeToCells', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['originToDirectedEdges', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['directedEdgeToBoundary', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['gridDistance', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['gridPathCells', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['gridPathCellsSize', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, POINTER]],\n ['cellToLocalIj', H3_ERROR, [H3_LOWER, H3_UPPER, H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['localIjToCell', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER, NUMBER, POINTER]],\n ['getHexagonAreaAvgM2', H3_ERROR, [RESOLUTION, POINTER]],\n ['getHexagonAreaAvgKm2', H3_ERROR, [RESOLUTION, POINTER]],\n ['getHexagonEdgeLengthAvgM', H3_ERROR, [RESOLUTION, POINTER]],\n ['getHexagonEdgeLengthAvgKm', H3_ERROR, [RESOLUTION, POINTER]],\n ['greatCircleDistanceM', NUMBER, [POINTER, POINTER]],\n ['greatCircleDistanceKm', NUMBER, [POINTER, POINTER]],\n ['greatCircleDistanceRads', NUMBER, [POINTER, POINTER]],\n ['cellAreaM2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['cellAreaKm2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['cellAreaRads2', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['edgeLengthM', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['edgeLengthKm', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['edgeLengthRads', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['getNumCells', H3_ERROR, [RESOLUTION, POINTER]],\n ['getRes0Cells', H3_ERROR, [POINTER]],\n ['res0CellCount', NUMBER],\n ['getPentagons', H3_ERROR, [NUMBER, POINTER]],\n ['pentagonCount', NUMBER],\n ['cellToVertex', H3_ERROR, [H3_LOWER, H3_UPPER, NUMBER, POINTER]],\n ['cellToVertexes', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['vertexToLatLng', H3_ERROR, [H3_LOWER, H3_UPPER, POINTER]],\n ['isValidVertex', BOOLEAN, [H3_LOWER, H3_UPPER]]\n];\n","/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Error codes from the code library, aliased here for legibility\nexport const E_SUCCESS = 0;\nexport const E_FAILED = 1;\nexport const E_DOMAIN = 2;\nexport const E_LATLNG_DOMAIN = 3;\nexport const E_RES_DOMAIN = 4;\nexport const E_CELL_INVALID = 5;\nexport const E_DIR_EDGE_INVALID = 6;\nexport const E_UNDIR_EDGE_INVALID = 7;\nexport const E_VERTEX_INVALID = 8;\nexport const E_PENTAGON = 9;\nexport const E_DUPLICATE_INPUT = 10;\nexport const E_NOT_NEIGHBORS = 11;\nexport const E_RES_MISMATCH = 12;\nexport const E_MEMORY_ALLOC = 13;\nexport const E_MEMORY_BOUNDS = 14;\nexport const E_OPTION_INVALID = 15;\n\n/**\n * Error messages corresponding to the core library error codes. See\n * https://h3geo.org/docs/library/errors#table-of-error-codes\n * @private\n */\nconst H3_ERROR_MSGS = {\n [E_SUCCESS]: 'Success',\n [E_FAILED]: 'The operation failed but a more specific error is not available',\n [E_DOMAIN]: 'Argument was outside of acceptable range',\n [E_LATLNG_DOMAIN]: 'Latitude or longitude arguments were outside of acceptable range',\n [E_RES_DOMAIN]: 'Resolution argument was outside of acceptable range',\n [E_CELL_INVALID]: 'Cell argument was not valid',\n [E_DIR_EDGE_INVALID]: 'Directed edge argument was not valid',\n [E_UNDIR_EDGE_INVALID]: 'Undirected edge argument was not valid',\n [E_VERTEX_INVALID]: 'Vertex argument was not valid',\n [E_PENTAGON]: 'Pentagon distortion was encountered',\n [E_DUPLICATE_INPUT]: 'Duplicate input',\n [E_NOT_NEIGHBORS]: 'Cell arguments were not neighbors',\n [E_RES_MISMATCH]: 'Cell arguments had incompatible resolutions',\n [E_MEMORY_ALLOC]: 'Memory allocation failed',\n [E_MEMORY_BOUNDS]: 'Bounds of provided memory were insufficient',\n [E_OPTION_INVALID]: 'Mode or flags argument was not valid'\n};\n\n// Error codes for JS errors thrown in the bindings\nexport const E_UNKNOWN_UNIT = 1000;\nexport const E_ARRAY_LENGTH = 1001;\nexport const E_NULL_INDEX = 1002;\n\n/**\n * Error messages for errors thrown in the binding code. These don't strictly\n * need error codes, but it's simpler to treat all of the errors consistently\n * @private\n */\nconst JS_ERROR_MESSAGES = {\n [E_UNKNOWN_UNIT]: 'Unknown unit',\n [E_ARRAY_LENGTH]: 'Array length out of bounds',\n [E_NULL_INDEX]: 'Got unexpected null value for H3 index'\n};\n\nconst UNKNOWN_ERROR_MSG = 'Unknown error';\n\n/**\n * Create an error with an attached code\n * @private\n * @param {Record<number, string>} messages Map of code-to-messages to use\n * @param {number} errCode Numeric error code\n * @param {{value: unknown} | {}} [meta] Metadata with value to associate with the error\n */\nfunction createError(messages, errCode, meta) {\n // The error value may be \"undefined\", so check if the argument was provided\n const hasValue = meta && 'value' in meta;\n // Throw a custom error type with the code attached\n const err = new Error(\n `${messages[errCode] || UNKNOWN_ERROR_MSG} (code: ${errCode}${\n hasValue ? `, value: ${meta.value}` : ''\n })`\n );\n // @ts-expect-error - TS doesn't like extending Error\n err.code = errCode;\n return err;\n}\n\n/**\n * Custom error for H3Error codes\n * @private\n * @param {number} errCode Error code from the H3 library\n * @param {unknown} [value] Value to associate with the error, if any\n * @returns {Error}\n */\nexport function H3LibraryError(errCode, value) {\n // The error value may be \"undefined\", so check if the argument was provided\n const meta = arguments.length === 2 ? {value} : {};\n return createError(H3_ERROR_MSGS, errCode, meta);\n}\n\n/**\n * Custom errors thrown from the JS bindings.\n * @private\n * @param {number} errCode Error code from the H3 library\n * @param {unknown} [value] Value to associate with the error, if any\n * @returns {Error}\n */\nexport function JSBindingError(errCode, value) {\n // The error value may be \"undefined\", so check if the argument was provided\n const meta = arguments.length === 2 ? {value} : {};\n return createError(JS_ERROR_MESSAGES, errCode, meta);\n}\n\n/**\n * Throw a JavaScript error if the C library return code is an error\n * @private\n * @param {number} errCode Error code from the H3 library\n * @throws {Error} Error if err is not E_SUCCESS (0)\n */\nexport function throwIfError(errCode) {\n if (errCode !== 0) {\n throw H3LibraryError(errCode);\n }\n}\n","/*\n * Copyright 2018-2019, 2022 Uber Technologies, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module h3\n */\n\nimport C from '../out/libh3';\nimport BINDINGS from './bindings';\nimport {\n throwIfError,\n H3LibraryError,\n JSBindingError,\n E_RES_DOMAIN,\n E_UNKNOWN_UNIT,\n E_ARRAY_LENGTH,\n E_NULL_INDEX,\n E_CELL_INVALID\n} from './errors';\n\n/**\n * Map of C-defined functions\n * @type {any}\n * @private\n */\nconst H3 = {};\n\n// Create the bound functions themselves\nBINDINGS.forEach(function bind(def) {\n H3[def[0]] = C.cwrap(...def);\n});\n\n// Alias the hexidecimal base for legibility\nconst BASE_16 = 16;\n\n// Alias unused bits for legibility\nconst UNUSED_UPPER_32_BITS = 0;\n\n// ----------------------------------------------------------------------------\n// Byte size imports\n\nconst SZ_INT = 4;\nconst SZ_PTR = 4;\nconst SZ_DBL = 8;\nconst SZ_INT64 = 8;\nconst SZ_H3INDEX = H3.sizeOfH3Index();\nconst SZ_LATLNG = H3.sizeOfLatLng();\nconst SZ_CELLBOUNDARY = H3.sizeOfCellBoundary();\nconst SZ_GEOPOLYGON = H3.sizeOfGeoPolygon();\nconst SZ_GEOLOOP = H3.sizeOfGeoLoop();\nconst SZ_LINKED_GEOPOLYGON = H3.sizeOfLinkedGeoPolygon();\nconst SZ_COORDIJ = H3.sizeOfCoordIJ();\n\n// ----------------------------------------------------------------------------\n// Custom types\n\n/**\n * 64-bit hexidecimal string representation of an H3 index\n * @static\n * @typedef {string} H3Index\n */\n\n/**\n * 64-bit hexidecimal string representation of an H3 index,\n * or two 32-bit integers in little endian order in an array.\n * @static\n * @typedef {string | number[]} H3IndexInput\n */\n\n/**\n * Coordinates as an `{i, j}` pair\n * @static\n * @typedef CoordIJ\n * @property {number} i\n * @property {number} j\n */\n\n/**\n * Custom JS Error instance with an attached error code. Error codes come from the\n * core H3 library and can be found [in the H3 docs](https://h3geo.org/docs/library/errors#table-of-error-codes).\n * @static\n * @typedef H3Error\n * @property {string} message\n * @property {number} code\n */\n\n/**\n * Pair of lat,lng coordinates (or lng,lat if GeoJSON output is specified)\n * @static\n * @typedef {number[]} CoordPair\n */\n\n/**\n * Pair of lower,upper 32-bit ints representing a 64-bit value\n * @static\n * @typedef {number[]} SplitLong\n */\n\n// ----------------------------------------------------------------------------\n// Unit constants\n\n/**\n * Length/Area units\n * @static\n * @property {string} m\n * @property {string} m2\n * @property {string} km\n * @property {string} km2\n * @property {string} rads\n * @property {string} rads2\n */\nexport const UNITS = {\n m: 'm',\n m2: 'm2',\n km: 'km',\n km2: 'km2',\n rads: 'rads',\n rads2: 'rads2'\n};\n\n// ----------------------------------------------------------------------------\n// Utilities and helpers\n\n/**\n * Validate a resolution, throwing an error if invalid\n * @private\n * @param {unknown} res Value to validate\n * @return {number} Valid res\n * @throws {H3Error} If invalid\n */\nfunction validateRes(res) {\n if (typeof res !== 'number' || res < 0 || res > 15 || Math.floor(res) !== res) {\n throw H3LibraryError(E_RES_DOMAIN, res);\n }\n return res;\n}\n\n/**\n * Assert H3 index output, throwing an error if null\n * @private\n * @param {H3Index | null} h3Index Index to validate\n * @return {H3Index}\n * @throws {H3Error} If invalid\n */\nfunction validateH3Index(h3Index) {\n if (!h3Index) throw JSBindingError(E_NULL_INDEX);\n return h3Index;\n}\n\nconst MAX_JS_ARRAY_LENGTH = Math.pow(2, 32) - 1;\n\n/**\n * Validate an array length. JS will throw its own error if you try\n * to create an array larger than 2^32 - 1, but validating beforehand\n * allows us to exit early before we try to process large amounts\n * of data that won't even fit in an output array\n * @private\n * @param {number} length Length to validate\n * @return {number} Valid array length\n * @throws {H3Error} If invalid\n */\nfunction validateArrayLength(length) {\n if (length > MAX_JS_ARRAY_LENGTH) {\n throw JSBindingError(E_ARRAY_LENGTH, length);\n }\n return length;\n}\n\nconst INVALID_HEXIDECIMAL_CHAR = /[^0-9a-fA-F]/;\n\n/**\n * Convert an H3 index (64-bit hexidecimal string) into a \"split long\" - a pair of 32-bit ints\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {SplitLong} A two-element array with 32 lower bits and 32 upper bits\n */\nexport function h3IndexToSplitLong(h3Index) {\n if (\n Array.isArray(h3Index) &&\n h3Index.length === 2 &&\n Number.isInteger(h3Index[0]) &&\n Number.isInteger(h3Index[1])\n ) {\n return h3Index;\n }\n if (typeof h3Index !== 'string' || INVALID_HEXIDECIMAL_CHAR.test(h3Index)) {\n return [0, 0];\n }\n const upper = parseInt(h3Index.substring(0, h3Index.length - 8), BASE_16);\n const lower = parseInt(h3Index.substring(h3Index.length - 8), BASE_16);\n return [lower, upper];\n}\n\n/**\n * Convert a 32-bit int to a hexdecimal string\n * @private\n * @param {number} num Integer to convert\n * @return {H3Index} Hexidecimal string\n */\nfunction hexFrom32Bit(num) {\n if (num >= 0) {\n return num.toString(BASE_16);\n }\n\n // Handle negative numbers\n num = num & 0x7fffffff;\n let tempStr = zeroPad(8, num.toString(BASE_16));\n const topNum = (parseInt(tempStr[0], BASE_16) + 8).toString(BASE_16);\n tempStr = topNum + tempStr.substring(1);\n return tempStr;\n}\n\n/**\n * Get a H3 index string from a split long (pair of 32-bit ints)\n * @param {number} lower Lower 32 bits\n * @param {number} upper Upper 32 bits\n * @return {H3Index} H3 index\n */\nexport function splitLongToH3Index(lower, upper) {\n return hexFrom32Bit(upper) + zeroPad(8, hexFrom32Bit(lower));\n}\n\n/**\n * Zero-pad a string to a given length\n * @private\n * @param {number} fullLen Target length\n * @param {string} numStr String to zero-pad\n * @return {string} Zero-padded string\n */\nfunction zeroPad(fullLen, numStr) {\n const numZeroes = fullLen - numStr.length;\n let outStr = '';\n for (let i = 0; i < numZeroes; i++) {\n outStr += '0';\n }\n outStr = outStr + numStr;\n return outStr;\n}\n\n// One more than the max size of an unsigned 32-bit int.\n// Dividing by this number is equivalent to num >>> 32\nconst UPPER_BIT_DIVISOR = Math.pow(2, 32);\n\n/**\n * Convert a JS double-precision floating point number to a split long\n * @private\n * @param {number} num Number to convert\n * @return {SplitLong} A two-element array with 32 lower bits and 32 upper bits\n */\nfunction numberToSplitLong(num) {\n if (typeof num !== 'number') {\n return [0, 0];\n }\n return [num | 0, (num / UPPER_BIT_DIVISOR) | 0];\n}\n\n/**\n * Populate a C-appropriate GeoLoop struct from a polygon array\n * @private\n * @param {number[][]} polygonArray Polygon, as an array of coordinate pairs\n * @param {number} geoLoop C pointer to a GeoLoop struct\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated GeoLoop struct\n */\nfunction polygonArrayToGeoLoop(polygonArray, geoLoop, isGeoJson) {\n const numVerts = polygonArray.length;\n const geoCoordArray = C._calloc(numVerts, SZ_LATLNG);\n // Support [lng, lat] pairs if GeoJSON is specified\n const latIndex = isGeoJson ? 1 : 0;\n const lngIndex = isGeoJson ? 0 : 1;\n for (let i = 0; i < numVerts * 2; i += 2) {\n C.HEAPF64.set(\n [polygonArray[i / 2][latIndex], polygonArray[i / 2][lngIndex]].map(degsToRads),\n geoCoordArray / SZ_DBL + i\n );\n }\n C.HEAPU32.set([numVerts, geoCoordArray], geoLoop / SZ_INT);\n return geoLoop;\n}\n\n/**\n * Create a C-appropriate GeoPolygon struct from an array of polygons\n * @private\n * @param {number[][][]} coordinates Array of polygons, each an array of coordinate pairs\n * @param {boolean} isGeoJson Whether coordinates are in [lng, lat] order per GeoJSON spec\n * @return {number} C pointer to populated GeoPolygon struct\n */\nfunction coordinatesToGeoPolygon(coordinates, isGeoJson) {\n // Any loops beyond the first loop are holes\n const numHoles = coordinates.length - 1;\n const geoPolygon = C._calloc(SZ_GEOPOLYGON);\n // Byte positions within the struct\n const geoLoopOffset = 0;\n const numHolesOffset = geoLoopOffset + SZ_GEOLOOP;\n const holesOffset = numHolesOffset + SZ_INT;\n // geoLoop is first part of struct\n polygonArrayToGeoLoop(coordinates[0], geoPolygon + geoLoopOffset, isGeoJson);\n let holes;\n if (numHoles > 0) {\n holes = C._calloc(numHoles, SZ_GEOLOOP);\n for (let i = 0; i < numHoles; i++) {\n polygonArrayToGeoLoop(coordinates[i + 1], holes + SZ_GEOLOOP * i, isGeoJson);\n }\n }\n C.setValue(geoPolygon + numHolesOffset, numHoles, 'i32');\n C.setValue(geoPolygon + holesOffset, holes, 'i32');\n return geoPolygon;\n}\n\n/**\n * Free memory allocated for a GeoPolygon struct. It is an error to access the struct\n * after passing it to this method.\n * @private\n * @param {number} geoPolygon C pointer to GeoPolygon struct\n * @return {void}\n */\nfunction destroyGeoPolygon(geoPolygon) {\n // Byte positions within the struct\n const geoLoopOffset = 0;\n const numHolesOffset = geoLoopOffset + SZ_GEOLOOP;\n const holesOffset = numHolesOffset + SZ_INT;\n // Offset of the geoLoop vertex array pointer within the GeoLoop struct\n const geoLoopArrayOffset = SZ_INT;\n // Free the outer vertex array\n C._free(C.getValue(geoPolygon + geoLoopOffset + geoLoopArrayOffset, 'i8*'));\n // Free the vertex array for the holes, if any\n const numHoles = C.getValue(geoPolygon + numHolesOffset, 'i32');\n if (numHoles > 0) {\n const holes = C.getValue(geoPolygon + holesOffset, 'i32');\n for (let i = 0; i < numHoles; i++) {\n C._free(C.getValue(holes + SZ_GEOLOOP * i + geoLoopArrayOffset, 'i8*'));\n }\n C._free(holes);\n }\n C._free(geoPolygon);\n}\n\n/**\n * Read an H3 index from a pointer to C memory.\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes, in case we're\n * reading an array\n * @return {H3Index | null} H3 index, or null if index was invalid\n */\nfunction readH3IndexFromPointer(cAddress, offset = 0) {\n const lower = C.getValue(cAddress + SZ_H3INDEX * offset, 'i32');\n const upper = C.getValue(cAddress + SZ_H3INDEX * offset + SZ_INT, 'i32');\n // The lower bits are allowed to be 0s, but if the upper bits are 0\n // this represents an invalid H3 index\n return upper ? splitLongToH3Index(lower, upper) : null;\n}\n\n/**\n * Read a boolean (32 bit) from a pointer to C memory.\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of booleans, in case we're\n * reading an array\n * @return {Boolean} Boolean value\n */\nfunction readBooleanFromPointer(cAddress, offset = 0) {\n const val = C.getValue(cAddress + SZ_INT * offset, 'i32');\n return Boolean(val);\n}\n\n/**\n * Read a double from a pointer to C memory.\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of doubles, in case we're\n * reading an array\n * @return {number} Double value\n */\nfunction readDoubleFromPointer(cAddress, offset = 0) {\n return C.getValue(cAddress + SZ_DBL * offset, 'double');\n}\n\n/**\n * Read a 64-bit int from a pointer to C memory into a JS 64-bit float.\n * Note that this may lose precision if larger than MAX_SAFE_INTEGER\n * @private\n * @param {number} cAddress Pointer to allocated C memory\n * @return {number} Double value\n */\nfunction readInt64AsDoubleFromPointer(cAddress) {\n return H3.readInt64AsDoubleFromPointer(cAddress);\n}\n\n/**\n * Store an H3 index in C memory. Primarily used as an efficient way to\n * write sets of hexagons.\n * @private\n * @param {H3IndexInput} h3Index H3 index to store\n * @param {number} cAddress Pointer to allocated C memory\n * @param {number} offset Offset, in number of H3 indexes from beginning\n * of the current array\n */\nfunction storeH3Index(h3Index, cAddress, offset) {\n // HEAPU32 is a typed array projection on the index space\n // as unsigned 32-bit integers. This means the index needs\n // to be divided by SZ_INT (4) to access correctly. Also,\n // the H3 index is 64 bits, so we skip by twos as we're writing\n // to 32-bit integers in the proper order.\n C.HEAPU32.set(h3IndexToSplitLong(h3Index), cAddress / SZ_INT + 2 * offset);\n}\n\n/**\n * Read an array of 64-bit H3 indexes from C and convert to a JS array of\n * H3 index strings\n * @private\n * @param {number} cAddress Pointer to C ouput array\n * @param {number} maxCount Max number of hexagons in array. Hexagons with\n * the value 0 will be skipped, so this isn't\n * necessarily the length of the output array.\n * @return {H3Index[]} Array of H3 indexes\n */\nfunction readArrayOfH3Indexes(cAddress, maxCount) {\n const out = [];\n for (let i = 0; i < maxCount; i++) {\n const h3Index = readH3IndexFromPointer(cAddress, i);\n if (h3Index !== null) {\n out.push(h3Index);\n }\n }\n return out;\n}\n\n/**\n * Store an array of H3 index strings as a C array of 64-bit integers.\n * @private\n * @param {number} cAddress Pointer to C input array\n * @param {H3IndexInput[]} hexagons H3 indexes to pass to the C lib\n */\nfunction storeArrayOfH3Indexes(cAddress, hexagons) {\n // Assuming the cAddress points to an already appropriately\n // allocated space\n const count = hexagons.length;\n for (let i = 0; i < count; i++) {\n storeH3Index(hexagons[i], cAddress, i);\n }\n}\n\n/**\n * Populate a C-appropriate LatLng struct from a [lat, lng] array\n * @private\n * @param {number} lat Coordinate latitude\n * @param {number} lng Coordinate longitude\n * @return {number} C pointer to populated LatLng struct\n */\nfunction storeLatLng(lat, lng) {\n const geoCoord = C._calloc(1, SZ_LATLNG);\n C.HEAPF64.set([lat, lng].map(degsToRads), geoCoord / SZ_DBL);\n return geoCoord;\n}\n\n/**\n * Read a single lat or lng value\n * @private\n * @param {number} cAddress Pointer to C value\n * @return {number}\n */\nfunction readSingleCoord(cAddress) {\n return radsToDegs(C.getValue(cAddress, 'double'));\n}\n\n/**\n * Read a LatLng from C and return a [lat, lng] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordPair} [lat, lng] pair\n */\nfunction readLatLng(cAddress) {\n return [readSingleCoord(cAddress), readSingleCoord(cAddress + SZ_DBL)];\n}\n\n/**\n * Read a LatLng from C and return a GeoJSON-style [lng, lat] pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordPair} [lng, lat] pair\n */\nfunction readLatLngGeoJson(cAddress) {\n return [readSingleCoord(cAddress + SZ_DBL), readSingleCoord(cAddress)];\n}\n\n/**\n * Read the CellBoundary structure into a list of geo coordinate pairs\n * @private\n * @param {number} cellBoundary C pointer to CellBoundary struct\n * @param {boolean} [geoJsonCoords] Whether to provide GeoJSON coordinate order: [lng, lat]\n * @param {boolean} [closedLoop] Whether to close the loop\n * @return {CoordPair[]} Array of geo coordinate pairs\n */\nfunction readCellBoundary(cellBoundary, geoJsonCoords, closedLoop) {\n const numVerts = C.getValue(cellBoundary, 'i32');\n // Note that though numVerts is an int, the coordinate doubles have to be\n // aligned to 8 bytes, hence the 8-byte offset here\n const vertsPos = cellBoundary + SZ_DBL;\n const out = [];\n // Support [lng, lat] pairs if GeoJSON is specified\n const readCoord = geoJsonCoords ? readLatLngGeoJson : readLatLng;\n for (let i = 0; i < numVerts * 2; i += 2) {\n out.push(readCoord(vertsPos + SZ_DBL * i));\n }\n if (closedLoop) {\n // Close loop if GeoJSON is specified\n out.push(out[0]);\n }\n return out;\n}\n\n/**\n * Read the LinkedGeoPolygon structure into a nested array of MultiPolygon coordinates\n * @private\n * @param {number} polygon C pointer to LinkedGeoPolygon struct\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[][][]} MultiPolygon-style output.\n */\nfunction readMultiPolygon(polygon, formatAsGeoJson) {\n const output = [];\n const readCoord = formatAsGeoJson ? readLatLngGeoJson : readLatLng;\n let loops;\n let loop;\n let coords;\n let coord;\n // Loop through the linked structure, building the output\n while (polygon) {\n output.push((loops = []));\n // Follow ->first pointer\n loop = C.getValue(polygon, 'i8*');\n while (loop) {\n loops.push((coords = []));\n // Follow ->first pointer\n coord = C.getValue(loop, 'i8*');\n while (coord) {\n coords.push(readCoord(coord));\n // Follow ->next pointer\n coord = C.getValue(coord + SZ_DBL * 2, 'i8*');\n }\n if (formatAsGeoJson) {\n // Close loop if GeoJSON is requested\n coords.push(coords[0]);\n }\n // Follow ->next pointer\n loop = C.getValue(loop + SZ_PTR * 2, 'i8*');\n }\n // Follow ->next pointer\n polygon = C.getValue(polygon + SZ_PTR * 2, 'i8*');\n }\n return output;\n}\n\n/**\n * Read a CoordIJ from C and return an {i, j} pair.\n * @private\n * @param {number} cAddress Pointer to C struct\n * @return {CoordIJ} {i, j} pair\n */\nfunction readCoordIJ(cAddress) {\n return {\n i: C.getValue(cAddress, 'i32'),\n j: C.getValue(cAddress + SZ_INT, 'i32')\n };\n}\n\n/**\n * Store an {i, j} pair to a C CoordIJ struct.\n * @private\n * @param {number} cAddress Pointer to C memory\n * @param {CoordIJ} ij {i,j} pair to store\n * @return {void}\n */\nfunction storeCoordIJ(cAddress, {i, j}) {\n C.setValue(cAddress, i, 'i32');\n C.setValue(cAddress + SZ_INT, j, 'i32');\n}\n\n/**\n * Read an array of positive integers array from C. Negative\n * values are considered invalid and ignored in output.\n * @private\n * @param {number} cAddress Pointer to C array\n * @param {number} count Length of C array\n * @return {number[]} Javascript integer array\n */\nfunction readArrayOfPositiveIntegers(cAddress, count) {\n const out = [];\n for (let i = 0; i < count; i++) {\n const int = C.getValue(cAddress + SZ_INT * i, 'i32');\n if (int >= 0) {\n out.push(int);\n }\n }\n return out;\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Core\n\n/**\n * Whether a given string represents a valid H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} Whether the index is valid\n */\nexport function isValidCell(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.isValidCell(lower, upper));\n}\n\n/**\n * Whether the given H3 index is a pentagon\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isPentagon\n */\nexport function isPentagon(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.isPentagon(lower, upper));\n}\n\n/**\n * Whether the given H3 index is in a Class III resolution (rotated versus\n * the icosahedron and subject to shape distortion adding extra points on\n * icosahedron edges, making them not true hexagons).\n * @static\n * @param {H3IndexInput} h3Index H3 index to check\n * @return {boolean} isResClassIII\n */\nexport function isResClassIII(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.isResClassIII(lower, upper));\n}\n\n/**\n * Get the number of the base cell for a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get the base cell for\n * @return {number} Index of the base cell (0-121)\n */\nexport function getBaseCellNumber(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return H3.getBaseCellNumber(lower, upper);\n}\n\n/**\n * Get the indices of all icosahedron faces intersected by a given H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get faces for\n * @return {number[]} Indices (0-19) of all intersected faces\n * @throws {H3Error} If input is invalid\n */\nexport function getIcosahedronFaces(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const countPtr = C._malloc(SZ_INT);\n try {\n throwIfError(H3.maxFaceCount(lower, upper, countPtr));\n const count = C.getValue(countPtr, 'i32');\n const faces = C._malloc(SZ_INT * count);\n try {\n throwIfError(H3.getIcosahedronFaces(lower, upper, faces));\n return readArrayOfPositiveIntegers(faces, count);\n } finally {\n C._free(faces);\n }\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Returns the resolution of an H3 index\n * @static\n * @param {H3IndexInput} h3Index H3 index to get resolution\n * @return {number} The number (0-15) resolution, or -1 if invalid\n */\nexport function getResolution(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n if (!H3.isValidCell(lower, upper)) {\n // Compatability with stated API\n return -1;\n }\n return H3.getResolution(lower, upper);\n}\n\n/**\n * Get the hexagon containing a lat,lon point\n * @static\n * @param {number} lat Latitude of point\n * @param {number} lng Longtitude of point\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index} H3 index\n * @throws {H3Error} If input is invalid\n */\nexport function latLngToCell(lat, lng, res) {\n const latLng = C._malloc(SZ_LATLNG);\n // Slightly more efficient way to set the memory\n C.HEAPF64.set([lat, lng].map(degsToRads), latLng / SZ_DBL);\n // Read value as a split long\n const h3Index = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.latLngToCell(latLng, res, h3Index));\n return validateH3Index(readH3IndexFromPointer(h3Index));\n } finally {\n C._free(h3Index);\n C._free(latLng);\n }\n}\n\n/**\n * Get the lat,lon center of a given hexagon\n * @static\n * @param {H3IndexInput} h3Index H3 index\n * @return {CoordPair} Point as a [lat, lng] pair\n * @throws {H3Error} If input is invalid\n */\nexport function cellToLatLng(h3Index) {\n const latLng = C._malloc(SZ_LATLNG);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n try {\n throwIfError(H3.cellToLatLng(lower, upper, latLng));\n return readLatLng(latLng);\n } finally {\n C._free(latLng);\n }\n}\n\n/**\n * Get the vertices of a given hexagon (or pentagon), as an array of [lat, lng]\n * points. For pentagons and hexagons on the edge of an icosahedron face, this\n * function may return up to 10 vertices.\n * @static\n * @param {H3IndexInput} h3Index H3 index\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[]} Array of [lat, lng] pairs\n * @throws {H3Error} If input is invalid\n */\nexport function cellToBoundary(h3Index, formatAsGeoJson) {\n const cellBoundary = C._malloc(SZ_CELLBOUNDARY);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n try {\n throwIfError(H3.cellToBoundary(lower, upper, cellBoundary));\n return readCellBoundary(cellBoundary, formatAsGeoJson, formatAsGeoJson);\n } finally {\n C._free(cellBoundary);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Algorithms\n\n/**\n * Get the parent of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get parent for\n * @param {number} res Resolution of hexagon to return\n * @return {H3Index} H3 index of parent, or null for invalid input\n * @throws {H3Error} If input is invalid\n */\nexport function cellToParent(h3Index, res) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const parent = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.cellToParent(lower, upper, res, parent));\n return validateH3Index(readH3IndexFromPointer(parent));\n } finally {\n C._free(parent);\n }\n}\n\n/**\n * Get the children/descendents of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get children for\n * @param {number} res Resolution of hexagons to return\n * @return {H3Index[]} H3 indexes of children, or empty array for invalid input\n * @throws {H3Error} If resolution is invalid or output is too large for JS\n */\nexport function cellToChildren(h3Index, res) {\n // Bad input in this case can potentially result in high computation volume\n // using the current C algorithm. Validate and return an empty array on failure.\n if (!isValidCell(h3Index)) {\n return [];\n }\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const count = validateArrayLength(cellToChildrenSize(h3Index, res));\n const hexagons = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.cellToChildren(lower, upper, res, hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n}\n\n/**\n * Get the number of children for a cell at a given resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get child count for\n * @param {number} res Child resolution\n * @return {number} Number of children at res for the given cell\n * @throws {H3Error} If cell or parentRes are invalid\n */\nexport function cellToChildrenSize(h3Index, res) {\n if (!isValidCell(h3Index)) {\n throw H3LibraryError(E_CELL_INVALID);\n }\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.cellToChildrenSize(lower, upper, res, countPtr));\n return readInt64AsDoubleFromPointer(countPtr);\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Get the center child of the given hexagon at a particular resolution\n * @static\n * @param {H3IndexInput} h3Index H3 index to get center child for\n * @param {number} res Resolution of cell to return\n * @return {H3Index} H3 index of child, or null for invalid input\n * @throws {H3Error} If resolution is invalid\n */\nexport function cellToCenterChild(h3Index, res) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const centerChild = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.cellToCenterChild(lower, upper, res, centerChild));\n return validateH3Index(readH3IndexFromPointer(centerChild));\n } finally {\n C._free(centerChild);\n }\n}\n\n/**\n * Get the position of the cell within an ordered list of all children of the\n * cell's parent at the specified resolution.\n * @static\n * @param {H3IndexInput} h3Index H3 index to get child pos for\n * @param {number} parentRes Resolution of reference parent\n * @return {number} Position of child within parent at parentRes\n * @throws {H3Error} If cell or parentRes are invalid\n */\nexport function cellToChildPos(h3Index, parentRes) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const childPos = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.cellToChildPos(lower, upper, parentRes, childPos));\n return readInt64AsDoubleFromPointer(childPos);\n } finally {\n C._free(childPos);\n }\n}\n\n/**\n * Get the child cell at a given position within an ordered list of all children\n * at the specified resolution\n * @static\n * @param {number} childPos Position of the child cell to get\n * @param {H3IndexInput} h3Index H3 index of the parent cell\n * @param {number} childRes Resolution of child cell to return\n * @return {H3Index} H3 index of child\n * @throws {H3Error} If input is invalid\n */\nexport function childPosToCell(childPos, h3Index, childRes) {\n const [cpLower, cpUpper] = numberToSplitLong(childPos);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const child = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.childPosToCell(cpLower, cpUpper, lower, upper, childRes, child));\n return validateH3Index(readH3IndexFromPointer(child));\n } finally {\n C._free(child);\n }\n}\n\n/**\n * Get all hexagons in a k-ring around a given center. The order of the hexagons is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n * @throws {H3Error} If input is invalid or output is too large for JS\n */\nexport function gridDisk(h3Index, ringSize) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.maxGridDiskSize(ringSize, countPtr));\n const count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n const hexagons = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.gridDisk(lower, upper, ringSize, hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Get all hexagons in a k-ring around a given center, in an array of arrays\n * ordered by distance from the origin. The order of the hexagons within each ring is undefined.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of k-ring\n * @return {H3Index[][]} Array of arrays with H3 indexes for all hexagons each ring\n * @throws {H3Error} If input is invalid or output is too large for JS\n */\nexport function gridDiskDistances(h3Index, ringSize) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.maxGridDiskSize(ringSize, countPtr));\n const count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n const kRings = C._calloc(count, SZ_H3INDEX);\n const distances = C._calloc(count, SZ_INT);\n try {\n throwIfError(H3.gridDiskDistances(lower, upper, ringSize, kRings, distances));\n /**\n * An array of empty arrays to hold the output\n * @type {string[][]}\n * @private\n */\n const out = [];\n for (let i = 0; i < ringSize + 1; i++) {\n out.push([]);\n }\n // Read the array of hexagons, putting them into the appropriate rings\n for (let i = 0; i < count; i++) {\n const cell = readH3IndexFromPointer(kRings, i);\n const index = C.getValue(distances + SZ_INT * i, 'i32');\n // eslint-disable-next-line max-depth\n if (cell !== null) {\n out[index].push(cell);\n }\n }\n return out;\n } finally {\n C._free(kRings);\n C._free(distances);\n }\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Get all hexagons in a hollow hexagonal ring centered at origin with sides of a given length.\n * Unlike kRing, this function will throw an error if there is a pentagon anywhere in the ring.\n * @static\n * @param {H3IndexInput} h3Index H3 index of center hexagon\n * @param {number} ringSize Radius of ring\n * @return {H3Index[]} H3 indexes for all hexagons in ring\n * @throws {Error} If the algorithm could not calculate the ring\n * @throws {H3Error} If input is invalid\n */\nexport function gridRingUnsafe(h3Index, ringSize) {\n const maxCount = ringSize === 0 ? 1 : 6 * ringSize;\n const hexagons = C._calloc(maxCount, SZ_H3INDEX);\n try {\n throwIfError(H3.gridRingUnsafe(...h3IndexToSplitLong(h3Index), ringSize, hexagons));\n return readArrayOfH3Indexes(hexagons, maxCount);\n } finally {\n C._free(hexagons);\n }\n}\n\n/**\n * Get all hexagons with centers contained in a given polygon. The polygon\n * is specified with GeoJson semantics as an array of loops. Each loop is\n * an array of [lat, lng] pairs (or [lng, lat] if isGeoJson is specified).\n * The first loop is the perimeter of the polygon, and subsequent loops are\n * expected to be holes.\n * @static\n * @param {number[][] | number[][][]} coordinates\n * Array of loops, or a single loop\n * @param {number} res Resolution of hexagons to return\n * @param {boolean} [isGeoJson] Whether to expect GeoJson-style [lng, lat]\n * pairs instead of [lat, lng]\n * @return {H3Index[]} H3 indexes for all hexagons in polygon\n * @throws {H3Error} If input is invalid or output is too large for JS\n */\nexport function polygonToCells(coordinates, res, isGeoJson) {\n validateRes(res);\n isGeoJson = Boolean(isGeoJson);\n // Guard against empty input\n if (coordinates.length === 0 || coordinates[0].length === 0) {\n return [];\n }\n // Wrap to expected format if a single loop is provided\n const polygon = typeof coordinates[0][0] === 'number' ? [coordinates] : coordinates;\n const geoPolygon = coordinatesToGeoPolygon(\n // @ts-expect-error - There's no way to convince TS that polygon is now number[][][]\n polygon,\n isGeoJson\n );\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.maxPolygonToCellsSize(geoPolygon, res, 0, countPtr));\n const count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n const hexagons = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.polygonToCells(geoPolygon, res, 0, hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n } finally {\n C._free(countPtr);\n destroyGeoPolygon(geoPolygon);\n }\n}\n\n/**\n * Get the outlines of a set of H3 hexagons, returned in GeoJSON MultiPolygon\n * format (an array of polygons, each with an array of loops, each an array of\n * coordinates). Coordinates are returned as [lat, lng] pairs unless GeoJSON\n * is requested.\n *\n * It is the responsibility of the caller to ensure that all hexagons in the\n * set have the same resolution and that the set contains no duplicates. Behavior\n * is undefined if duplicates or multiple resolutions are present, and the\n * algorithm may produce unexpected or invalid polygons.\n *\n * @static\n * @param {H3IndexInput[]} h3Indexes H3 indexes to get outlines for\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat], closed loops\n * @return {CoordPair[][][]} MultiPolygon-style output.\n * @throws {H3Error} If input is invalid\n */\nexport function cellsToMultiPolygon(h3Indexes, formatAsGeoJson) {\n // Early exit on empty input\n if (!h3Indexes || !h3Indexes.length) {\n return [];\n }\n // Set up input set\n const indexCount = h3Indexes.length;\n const set = C._calloc(indexCount, SZ_H3INDEX);\n storeArrayOfH3Indexes(set, h3Indexes);\n // Allocate memory for output linked polygon\n const polygon = C._calloc(SZ_LINKED_GEOPOLYGON);\n try {\n throwIfError(H3.cellsToLinkedMultiPolygon(set, indexCount, polygon));\n return readMultiPolygon(polygon, formatAsGeoJson);\n } finally {\n // Clean up\n H3.destroyLinkedMultiPolygon(polygon);\n C._free(polygon);\n C._free(set);\n }\n}\n\n/**\n * Compact a set of hexagons of the same resolution into a set of hexagons across\n * multiple levels that represents the same area.\n * @static\n * @param {H3IndexInput[]} h3Set H3 indexes to compact\n * @return {H3Index[]} Compacted H3 indexes\n * @throws {H3Error} If the input is invalid (e.g. duplicate hexagons)\n */\nexport function compactCells(h3Set) {\n if (!h3Set || !h3Set.length) {\n return [];\n }\n // Set up input set\n const count = h3Set.length;\n const set = C._calloc(count, SZ_H3INDEX);\n storeArrayOfH3Indexes(set, h3Set);\n // Allocate memory for compacted hexagons, worst-case is no compaction\n const compactedSet = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.compactCells(set, compactedSet, count, UNUSED_UPPER_32_BITS));\n return readArrayOfH3Indexes(compactedSet, count);\n } finally {\n C._free(set);\n C._free(compactedSet);\n }\n}\n\n/**\n * Uncompact a compacted set of hexagons to hexagons of the same resolution\n * @static\n * @param {H3IndexInput[]} compactedSet H3 indexes to uncompact\n * @param {number} res The resolution to uncompact to\n * @return {H3Index[]} The uncompacted H3 indexes\n * @throws {H3Error} If the input is invalid (e.g. invalid resolution)\n */\nexport function uncompactCells(compactedSet, res) {\n validateRes(res);\n if (!compactedSet || !compactedSet.length) {\n return [];\n }\n // Set up input set\n const count = compactedSet.length;\n const set = C._calloc(count, SZ_H3INDEX);\n storeArrayOfH3Indexes(set, compactedSet);\n // Estimate how many hexagons we need (always overestimates if in error)\n const uncompactCellSizePtr = C._malloc(SZ_INT64);\n try {\n throwIfError(\n H3.uncompactCellsSize(set, count, UNUSED_UPPER_32_BITS, res, uncompactCellSizePtr)\n );\n const uncompactCellSize = validateArrayLength(\n readInt64AsDoubleFromPointer(uncompactCellSizePtr)\n );\n // Allocate memory for uncompacted hexagons\n const uncompactedSet = C._calloc(uncompactCellSize, SZ_H3INDEX);\n try {\n throwIfError(\n H3.uncompactCells(\n set,\n count,\n UNUSED_UPPER_32_BITS,\n uncompactedSet,\n uncompactCellSize,\n UNUSED_UPPER_32_BITS,\n res\n )\n );\n return readArrayOfH3Indexes(uncompactedSet, uncompactCellSize);\n } finally {\n C._free(set);\n C._free(uncompactedSet);\n }\n } finally {\n C._free(uncompactCellSizePtr);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Directed edges\n\n/**\n * Whether two H3 indexes are neighbors (share an edge)\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {boolean} Whether the hexagons share an edge\n * @throws {H3Error} If the input is invalid\n */\nexport function areNeighborCells(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n const out = C._malloc(SZ_INT);\n try {\n throwIfError(H3.areNeighborCells(oLower, oUpper, dLower, dUpper, out));\n return readBooleanFromPointer(out);\n } finally {\n C._free(out);\n }\n}\n\n/**\n * Get an H3 index representing a unidirectional edge for a given origin and destination\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index} H3 index of the edge, or null if no edge is shared\n * @throws {H3Error} If the input is invalid\n */\nexport function cellsToDirectedEdge(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n const h3Index = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.cellsToDirectedEdge(oLower, oUpper, dLower, dUpper, h3Index));\n return validateH3Index(readH3IndexFromPointer(h3Index));\n } finally {\n C._free(h3Index);\n }\n}\n\n/**\n * Get the origin hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge origin\n * @throws {H3Error} If the input is invalid\n */\nexport function getDirectedEdgeOrigin(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n const h3Index = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.getDirectedEdgeOrigin(lower, upper, h3Index));\n return validateH3Index(readH3IndexFromPointer(h3Index));\n } finally {\n C._free(h3Index);\n }\n}\n\n/**\n * Get the destination hexagon from an H3 index representing a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index} H3 index of the edge destination\n * @throws {H3Error} If the input is invalid\n */\nexport function getDirectedEdgeDestination(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n const h3Index = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.getDirectedEdgeDestination(lower, upper, h3Index));\n return validateH3Index(readH3IndexFromPointer(h3Index));\n } finally {\n C._free(h3Index);\n }\n}\n\n/**\n * Whether the input is a valid unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {boolean} Whether the index is valid\n */\nexport function isValidDirectedEdge(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n return Boolean(H3.isValidDirectedEdge(lower, upper));\n}\n\n/**\n * Get the [origin, destination] pair represented by a unidirectional edge\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @return {H3Index[]} [origin, destination] pair as H3 indexes\n * @throws {H3Error} If the input is invalid\n */\nexport function directedEdgeToCells(edgeIndex) {\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n const count = 2;\n const hexagons = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.directedEdgeToCells(lower, upper, hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n}\n\n/**\n * Get all of the unidirectional edges with the given H3 index as the origin (i.e. an edge to\n * every neighbor)\n * @static\n * @param {H3IndexInput} h3Index H3 index of the origin hexagon\n * @return {H3Index[]} List of unidirectional edges\n * @throws {H3Error} If the input is invalid\n */\nexport function originToDirectedEdges(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const count = 6;\n const edges = C._calloc(count, SZ_H3INDEX);\n try {\n throwIfError(H3.originToDirectedEdges(lower, upper, edges));\n return readArrayOfH3Indexes(edges, count);\n } finally {\n C._free(edges);\n }\n}\n\n/**\n * Get the vertices of a given edge as an array of [lat, lng] points. Note that for edges that\n * cross the edge of an icosahedron face, this may return 3 coordinates.\n * @static\n * @param {H3IndexInput} edgeIndex H3 index of the edge\n * @param {boolean} [formatAsGeoJson] Whether to provide GeoJSON output: [lng, lat]\n * @return {CoordPair[]} Array of geo coordinate pairs\n * @throws {H3Error} If the input is invalid\n */\nexport function directedEdgeToBoundary(edgeIndex, formatAsGeoJson) {\n const cellBoundary = C._malloc(SZ_CELLBOUNDARY);\n const [lower, upper] = h3IndexToSplitLong(edgeIndex);\n try {\n throwIfError(H3.directedEdgeToBoundary(lower, upper, cellBoundary));\n return readCellBoundary(cellBoundary, formatAsGeoJson);\n } finally {\n C._free(cellBoundary);\n }\n}\n\n/**\n * Get the grid distance between two hex indexes. This function may fail\n * to find the distance between two indexes if they are very far apart or\n * on opposite sides of a pentagon.\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {number} Distance between hexagons\n * @throws {H3Error} If input is invalid or the distance could not be calculated\n */\nexport function gridDistance(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.gridDistance(oLower, oUpper, dLower, dUpper, countPtr));\n return readInt64AsDoubleFromPointer(countPtr);\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Given two H3 indexes, return the line of indexes between them (inclusive).\n *\n * This function may fail to find the line between two indexes, for\n * example if they are very far apart. It may also fail when finding\n * distances for indexes on opposite sides of a pentagon.\n *\n * Notes:\n *\n * - The specific output of this function should not be considered stable\n * across library versions. The only guarantees the library provides are\n * that the line length will be `h3Distance(start, end) + 1` and that\n * every index in the line will be a neighbor of the preceding index.\n * - Lines are drawn in grid space, and may not correspond exactly to either\n * Cartesian lines or great arcs.\n *\n * @static\n * @param {H3IndexInput} origin Origin hexagon index\n * @param {H3IndexInput} destination Destination hexagon index\n * @return {H3Index[]} H3 indexes connecting origin and destination\n * @throws {H3Error} If input is invalid or the line cannot be calculated\n */\nexport function gridPathCells(origin, destination) {\n const [oLower, oUpper] = h3IndexToSplitLong(origin);\n const [dLower, dUpper] = h3IndexToSplitLong(destination);\n const countPtr = C._malloc(SZ_INT64);\n try {\n throwIfError(H3.gridPathCellsSize(oLower, oUpper, dLower, dUpper, countPtr));\n const count = validateArrayLength(readInt64AsDoubleFromPointer(countPtr));\n const hexagons = C._calloc(count, SZ_H3INDEX);\n try {\n H3.gridPathCells(oLower, oUpper, dLower, dUpper, hexagons);\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n } finally {\n C._free(countPtr);\n }\n}\n\nconst LOCAL_IJ_DEFAULT_MODE = 0;\n\n/**\n * Produces IJ coordinates for an H3 index anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {H3IndexInput} destination H3 index for which to find relative coordinates\n * @return {CoordIJ} Coordinates as an `{i, j}` pair\n * @throws {H3Error} If the IJ coordinates cannot be calculated\n */\nexport function cellToLocalIj(origin, destination) {\n const ij = C._malloc(SZ_COORDIJ);\n try {\n throwIfError(\n H3.cellToLocalIj(\n ...h3IndexToSplitLong(origin),\n ...h3IndexToSplitLong(destination),\n LOCAL_IJ_DEFAULT_MODE,\n ij\n )\n );\n return readCoordIJ(ij);\n } finally {\n C._free(ij);\n }\n}\n\n/**\n * Produces an H3 index for IJ coordinates anchored by an origin.\n *\n * - The coordinate space used by this function may have deleted\n * regions or warping due to pentagonal distortion.\n * - Coordinates are only comparable if they come from the same\n * origin index.\n * - Failure may occur if the index is too far away from the origin\n * or if the index is on the other side of a pentagon.\n * - This function is experimental, and its output is not guaranteed\n * to be compatible across different versions of H3.\n * @static\n * @param {H3IndexInput} origin Origin H3 index\n * @param {CoordIJ} coords Coordinates as an `{i, j}` pair\n * @return {H3Index} H3 index at the relative coordinates\n * @throws {H3Error} If the H3 index cannot be calculated\n */\nexport function localIjToCell(origin, coords) {\n // Validate input coords\n if (!coords || typeof coords.i !== 'number' || typeof coords.j !== 'number') {\n throw new Error('Coordinates must be provided as an {i, j} object');\n }\n // Allocate memory for the CoordIJ struct and an H3 index to hold the return value\n const ij = C._malloc(SZ_COORDIJ);\n const out = C._malloc(SZ_H3INDEX);\n storeCoordIJ(ij, coords);\n try {\n throwIfError(\n H3.localIjToCell(...h3IndexToSplitLong(origin), ij, LOCAL_IJ_DEFAULT_MODE, out)\n );\n return validateH3Index(readH3IndexFromPointer(out));\n } finally {\n C._free(ij);\n C._free(out);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Distance/area utilities\n\n/**\n * Great circle distance between two geo points. This is not specific to H3,\n * but is implemented in the library and provided here as a convenience.\n * @static\n * @param {number[]} latLng1 Origin coordinate as [lat, lng]\n * @param {number[]} latLng2 Destination coordinate as [lat, lng]\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Great circle distance\n * @throws {H3Error} If the unit is invalid\n */\nexport function greatCircleDistance(latLng1, latLng2, unit) {\n const coord1 = storeLatLng(latLng1[0], latLng1[1]);\n const coord2 = storeLatLng(latLng2[0], latLng2[1]);\n let result;\n switch (unit) {\n case UNITS.m:\n result = H3.greatCircleDistanceM(coord1, coord2);\n break;\n case UNITS.km:\n result = H3.greatCircleDistanceKm(coord1, coord2);\n break;\n case UNITS.rads:\n result = H3.greatCircleDistanceRads(coord1, coord2);\n break;\n default:\n result = null;\n }\n C._free(coord1);\n C._free(coord2);\n if (result === null) {\n throw JSBindingError(E_UNKNOWN_UNIT, unit);\n }\n return result;\n}\n\n/**\n * Exact area of a given cell\n * @static\n * @param {H3IndexInput} h3Index H3 index of the hexagon to measure\n * @param {string} unit Distance unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number} Cell area\n * @throws {H3Error} If the input is invalid\n */\nexport function cellArea(h3Index, unit) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const out = C._malloc(SZ_DBL);\n try {\n switch (unit) {\n case UNITS.m2:\n throwIfError(H3.cellAreaM2(lower, upper, out));\n break;\n case UNITS.km2:\n throwIfError(H3.cellAreaKm2(lower, upper, out));\n break;\n case UNITS.rads2:\n throwIfError(H3.cellAreaRads2(lower, upper, out));\n break;\n default:\n throw JSBindingError(E_UNKNOWN_UNIT, unit);\n }\n return readDoubleFromPointer(out);\n } finally {\n C._free(out);\n }\n}\n\n/**\n * Calculate length of a given unidirectional edge\n * @static\n * @param {H3IndexInput} edge H3 index of the edge to measure\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Cell area\n * @throws {H3Error} If the input is invalid\n */\nexport function edgeLength(edge, unit) {\n const [lower, upper] = h3IndexToSplitLong(edge);\n const out = C._malloc(SZ_DBL);\n try {\n switch (unit) {\n case UNITS.m:\n throwIfError(H3.edgeLengthM(lower, upper, out));\n break;\n case UNITS.km:\n throwIfError(H3.edgeLengthKm(lower, upper, out));\n break;\n case UNITS.rads:\n throwIfError(H3.edgeLengthRads(lower, upper, out));\n break;\n default:\n throw JSBindingError(E_UNKNOWN_UNIT, unit);\n }\n return readDoubleFromPointer(out);\n } finally {\n C._free(out);\n }\n}\n\n/**\n * Average hexagon area at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Area unit (either UNITS.m2, UNITS.km2, or UNITS.rads2)\n * @return {number} Average area\n * @throws {H3Error} If the input is invalid\n */\nexport function getHexagonAreaAvg(res, unit) {\n validateRes(res);\n const out = C._malloc(SZ_DBL);\n try {\n switch (unit) {\n case UNITS.m2:\n throwIfError(H3.getHexagonAreaAvgM2(res, out));\n break;\n case UNITS.km2:\n throwIfError(H3.getHexagonAreaAvgKm2(res, out));\n break;\n default:\n throw JSBindingError(E_UNKNOWN_UNIT, unit);\n }\n return readDoubleFromPointer(out);\n } finally {\n C._free(out);\n }\n}\n\n/**\n * Average hexagon edge length at a given resolution\n * @static\n * @param {number} res Hexagon resolution\n * @param {string} unit Distance unit (either UNITS.m, UNITS.km, or UNITS.rads)\n * @return {number} Average edge length\n * @throws {H3Error} If the input is invalid\n */\nexport function getHexagonEdgeLengthAvg(res, unit) {\n validateRes(res);\n const out = C._malloc(SZ_DBL);\n try {\n switch (unit) {\n case UNITS.m:\n throwIfError(H3.getHexagonEdgeLengthAvgM(res, out));\n break;\n case UNITS.km:\n throwIfError(H3.getHexagonEdgeLengthAvgKm(res, out));\n break;\n default:\n throw JSBindingError(E_UNKNOWN_UNIT, unit);\n }\n return readDoubleFromPointer(out);\n } finally {\n C._free(out);\n }\n}\n\n// ----------------------------------------------------------------------------\n// Public API functions: Vertex mode\n\n/**\n * Find the index for a vertex of a cell.\n * @static\n * @param {H3IndexInput} h3Index Cell to find the vertex for\n * @param {number} vertexNum Number (index) of the vertex to calculate\n * @return {H3Index} Vertex index\n * @throws {H3Error} If the input is invalid\n */\nexport function cellToVertex(h3Index, vertexNum) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const vertexIndex = C._malloc(SZ_H3INDEX);\n try {\n throwIfError(H3.cellToVertex(lower, upper, vertexNum, vertexIndex));\n return validateH3Index(readH3IndexFromPointer(vertexIndex));\n } finally {\n C._free(vertexIndex);\n }\n}\n\n/**\n * Find the indexes for all vertexes of a cell.\n * @static\n * @param {H3IndexInput} h3Index Cell to find all vertexes for\n * @return {H3Index[]} All vertex indexes of this cell\n * @throws {H3Error} If the input is invalid\n */\nexport function cellToVertexes(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n const maxNumVertexes = 6;\n const vertexIndexes = C._calloc(maxNumVertexes, SZ_H3INDEX);\n try {\n throwIfError(H3.cellToVertexes(lower, upper, vertexIndexes));\n return readArrayOfH3Indexes(vertexIndexes, maxNumVertexes);\n } finally {\n C._free(vertexIndexes);\n }\n}\n\n/**\n * Get the lat, lng of a given vertex\n * @static\n * @param {H3IndexInput} h3Index A vertex index\n * @returns {CoordPair} Latitude, longitude coordinates of the vertex\n * @throws {H3Error} If the input is invalid\n */\nexport function vertexToLatLng(h3Index) {\n const latlng = C._malloc(SZ_LATLNG);\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n try {\n throwIfError(H3.vertexToLatLng(lower, upper, latlng));\n return readLatLng(latlng);\n } finally {\n C._free(latlng);\n }\n}\n\n/**\n * Returns true if the input is a valid vertex index.\n * @static\n * @param {H3IndexInput} h3Index An index to test for being a vertex index\n * @returns {boolean} True if the index represents a vertex\n */\nexport function isValidVertex(h3Index) {\n const [lower, upper] = h3IndexToSplitLong(h3Index);\n return Boolean(H3.isValidVertex(lower, upper));\n}\n\n// ----------------------------------------------------------------------------\n// Public informational utilities\n\n/**\n * The total count of hexagons in the world at a given resolution. Note that above\n * resolution 8 the exact count cannot be represented in a JavaScript 32-bit number,\n * so consumers should use caution when applying further operations to the output.\n * @static\n * @param {number} res Hexagon resolution\n * @return {number} Count\n * @throws {H3Error} If the resolution is invalid\n */\nexport function getNumCells(res) {\n validateRes(res);\n const countPtr = C._malloc(SZ_INT64);\n try {\n // Get number as a long value\n throwIfError(H3.getNumCells(res, countPtr));\n return readInt64AsDoubleFromPointer(countPtr);\n } finally {\n C._free(countPtr);\n }\n}\n\n/**\n * Get all H3 indexes at resolution 0. As every index at every resolution > 0 is\n * the descendant of a res 0 index, this can be used with h3ToChildren to iterate\n * over H3 indexes at any resolution.\n * @static\n * @return {H3Index[]} All H3 indexes at res 0\n */\nexport function getRes0Cells() {\n const count = H3.res0CellCount();\n const hexagons = C._malloc(SZ_H3INDEX * count);\n try {\n throwIfError(H3.getRes0Cells(hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n}\n\n/**\n * Get the twelve pentagon indexes at a given resolution.\n * @static\n * @param {number} res Hexagon resolution\n * @return {H3Index[]} All H3 pentagon indexes at res\n * @throws {H3Error} If the resolution is invalid\n */\nexport function getPentagons(res) {\n validateRes(res);\n const count = H3.pentagonCount();\n const hexagons = C._malloc(SZ_H3INDEX * count);\n try {\n throwIfError(H3.getPentagons(res, hexagons));\n return readArrayOfH3Indexes(hexagons, count);\n } finally {\n C._free(hexagons);\n }\n}\n\n/**\n * Convert degrees to radians\n * @static\n * @param {number} deg Value in degrees\n * @return {number} Value in radians\n */\nexport function degsToRads(deg) {\n return (deg * Math.PI) / 180;\n}\n\n/**\n * Convert radians to degrees\n * @static\n * @param {number} rad Value in radians\n * @return {number} Value in degrees\n */\nexport function radsToDegs(rad) {\n return (rad * 180) / Math.PI;\n}\n","import {SpatialIndex} from '../constants.js';\nimport {getResolution as quadbinGetResolution, geometryToCells} from 'quadbin';\nimport bboxClip from '@turf/bbox-clip';\nimport type {SpatialFilter, SpatialIndexTile} from '../types.js';\nimport type {BBox, Feature} from 'geojson';\nimport {getResolution as h3GetResolution, polygonToCells} from 'h3-js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {SpatialDataType} from '../sources/types.js';\n\nexport type TileFeaturesSpatialIndexOptions = {\n tiles: SpatialIndexTile[];\n spatialFilter: SpatialFilter;\n spatialDataColumn: string;\n spatialDataType: SpatialDataType;\n};\n\nexport function tileFeaturesSpatialIndex({\n tiles,\n spatialFilter,\n spatialDataColumn,\n spatialDataType,\n}: TileFeaturesSpatialIndexOptions): FeatureData[] {\n const map = new Map();\n const spatialIndex = getSpatialIndex(spatialDataType);\n const resolution = getResolution(tiles, spatialIndex);\n const spatialIndexIDName = spatialDataColumn\n ? spatialDataColumn\n : spatialIndex;\n\n if (!resolution) {\n return [];\n }\n const cells = getCellsCoverGeometry(spatialFilter, spatialIndex, resolution);\n\n if (!cells?.length) {\n return [];\n }\n\n // We transform cells to Set to improve the performace\n const cellsSet = new Set<bigint | string>(cells);\n\n for (const tile of tiles) {\n if (tile.isVisible === false || !tile.data) {\n continue;\n }\n\n tile.data.forEach((d: Feature) => {\n if (cellsSet.has(d.id as bigint | string)) {\n map.set(d.id, {...d.properties, [spatialIndexIDName]: d.id});\n }\n });\n }\n return Array.from(map.values());\n}\n\nfunction getResolution(\n tiles: SpatialIndexTile[],\n spatialIndex: SpatialIndex\n): number | undefined {\n const data = tiles.find((tile) => tile.data?.length)?.data;\n\n if (!data) {\n return;\n }\n\n if (spatialIndex === SpatialIndex.QUADBIN) {\n return Number(quadbinGetResolution(data[0].id));\n }\n\n if (spatialIndex === SpatialIndex.H3) {\n return h3GetResolution(data[0].id);\n }\n}\n\nconst bboxWest: BBox = [-180, -90, 0, 90];\nconst bboxEast: BBox = [0, -90, 180, 90];\n\nfunction getCellsCoverGeometry(\n geometry: SpatialFilter,\n spatialIndex: SpatialIndex,\n resolution: number\n) {\n if (spatialIndex === SpatialIndex.QUADBIN) {\n // @ts-expect-error TODO: Probably ought to be stricter about number vs. bigint types in this file.\n return geometryToCells(geometry, resolution);\n }\n\n if (spatialIndex === SpatialIndex.H3) {\n // The current H3 polyfill algorithm can't deal with polygon segments of greater than 180 degrees longitude\n // so we clip the geometry to be sure that none of them is greater than 180 degrees\n // https://github.com/uber/h3-js/issues/24#issuecomment-431893796\n return polygonToCells(\n bboxClip(geometry, bboxWest).geometry.coordinates as\n | number[][]\n | number[][][],\n resolution,\n true\n ).concat(\n polygonToCells(\n bboxClip(geometry, bboxEast).geometry.coordinates as\n | number[][]\n | number[][][],\n resolution,\n true\n )\n );\n }\n}\n\nfunction getSpatialIndex(spatialDataType: SpatialDataType): SpatialIndex {\n switch (spatialDataType) {\n case 'h3':\n return SpatialIndex.H3;\n case 'quadbin':\n return SpatialIndex.QUADBIN;\n default:\n throw new Error('Unexpected spatial data type');\n }\n}\n","/** @internal */\nexport const V3_MINOR_VERSION = '3.4';\n\n/** @privateRemarks Source: @carto/constants, @deck.gl/carto */\nexport const DEFAULT_GEO_COLUMN = 'geom';\n\n/**\n * Fastly default limit is 8192; leave some padding.\n * @privateRemarks Source: @deck.gl/carto\n */\nexport const DEFAULT_MAX_LENGTH_URL = 7000;\n\n/** @privateRemarks Source: @deck.gl/carto */\nexport const DEFAULT_TILE_RESOLUTION = 0.5;\n\n/**\n * @todo TODO(v0.5): Update DEFAULT_TILE_RESOLUTION and remove this constant.\n * @internal\n */\nexport const REDUCED_QUERIES_TILE_RESOLUTION = 1;\n\n/**\n * @privateRemarks Source: @deck.gl/carto\n * @internal\n */\nexport const DEFAULT_AGGREGATION_RES_LEVEL_H3 = 4;\n\n/**\n * @privateRemarks Source: @deck.gl/carto\n * @internal\n */\nexport const DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN = 6;\n\n/** @internal */\nexport const DEFAULT_AGGREGATION_EXP_ALIAS = '__aggregationValue';\nexport const DEFAULT_AGGREGATION_EXP = `1 AS ${DEFAULT_AGGREGATION_EXP_ALIAS}`;\n","import {\n cellToChildren as _cellToChildren,\n cellToTile,\n geometryToCells,\n getResolution,\n} from 'quadbin';\nimport type {RasterTile, SpatialFilter, Tile} from '../types.js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {\n RasterMetadata,\n RasterMetadataBand,\n SpatialDataType,\n} from '../sources/types.js';\n\nexport type TileFeaturesRasterOptions = {\n tiles: RasterTile[];\n spatialFilter: SpatialFilter;\n spatialDataColumn: string;\n spatialDataType: SpatialDataType;\n rasterMetadata: RasterMetadata;\n};\n\nexport function tileFeaturesRaster({\n tiles,\n ...options\n}: TileFeaturesRasterOptions): FeatureData[] {\n // Cache band metadata for faster lookup while iterating over pixels.\n const metadataByBand: Record<string, RasterMetadataBand & {nodata: number}> =\n {};\n for (const band of options.rasterMetadata.bands) {\n // TODO(cleanup): Remove copy and cast after API is updated to return 'nodata' as a number.\n metadataByBand[band.name] = {...band, nodata: Number(band.nodata)};\n }\n\n // Omit empty and invisible tiles for simpler processing and types.\n tiles = tiles.filter(isRasterTileVisible);\n if (tiles.length === 0) return [];\n\n // Raster tiles, and all pixels, are quadbin cells. Resolution of a pixel is\n // the resolution of the tile, plus the number of subdivisions. Block size\n // must be square, N x N, where N is a power of two.\n const tileResolution = getResolution(tiles[0].index.q);\n const tileBlockSize = tiles[0].data!.blockSize;\n const cellResolution = tileResolution + BigInt(Math.log2(tileBlockSize));\n\n // Compute covering cells for the spatial filter, at same resolution as the\n // raster pixels, to be used as a mask.\n const spatialFilterCells = new Set(\n geometryToCells(options.spatialFilter, cellResolution)\n );\n\n const data = new Map<bigint, FeatureData>();\n\n for (const tile of tiles as Required<RasterTile>[]) {\n const parent = tile.index.q;\n\n const children = cellToChildrenSorted(parent, cellResolution);\n\n // For each pixel/cell within the spatial filter, create a FeatureData.\n // Order is row-major, starting from NW and ending at SE.\n for (let i = 0; i < children.length; i++) {\n if (!spatialFilterCells.has(children[i])) continue;\n\n const cellData: FeatureData = {};\n let cellDataExists = false;\n\n for (const band in tile.data.cells.numericProps) {\n const value = tile.data.cells.numericProps[band].value[i];\n const bandMetadata = metadataByBand[band];\n\n if (isValidBandValue(value, bandMetadata.nodata)) {\n cellData[band] = tile.data.cells.numericProps[band].value[i];\n cellDataExists = true;\n }\n }\n\n if (cellDataExists) {\n data.set(children[i], cellData);\n }\n }\n }\n\n return Array.from(data.values());\n}\n\n/**\n * Detects whether a given {@link Tile} is a {@link RasterTile}.\n * @privateRemarks Method of detection is arbitrary, and may be changed.\n */\nexport function isRasterTile(tile: Tile): tile is RasterTile {\n return !!(tile.data as Record<string, unknown>)?.cells;\n}\n\nfunction isRasterTileVisible(tile: RasterTile): tile is Required<RasterTile> {\n return !!(tile.isVisible && tile.data?.cells?.numericProps);\n}\n\n/**\n * For the raster format, children are sorted in row-major order, starting from\n * NW and ending at SE. Order returned by quadbin's cellToChildren() is not\n * defined (and not related to the raster format), so sort explicitly here.\n */\nfunction cellToChildrenSorted(parent: bigint, resolution: bigint): bigint[] {\n return _cellToChildren(parent, resolution).sort(\n (cellA: bigint, cellB: bigint) => {\n const tileA = cellToTile(cellA);\n const tileB = cellToTile(cellB);\n if (tileA.y !== tileB.y) {\n return tileA.y > tileB.y ? 1 : -1;\n }\n return tileA.x > tileB.x ? 1 : -1;\n }\n );\n}\n\n/**\n * Returns true if the given value is valid (not NaN, not 'nodata')\n * for the given raster band.\n */\nfunction isValidBandValue(value: unknown, nodata: number): value is number {\n return Number.isNaN(value) ? false : nodata !== value;\n}\n","import type {\n RasterTile,\n SpatialFilter,\n SpatialIndexTile,\n Tile,\n} from '../types.js';\nimport {tileFeaturesGeometries} from './tileFeaturesGeometries.js';\nimport {tileFeaturesSpatialIndex} from './tileFeaturesSpatialIndex.js';\nimport {TileFormat} from '../constants.js';\nimport {DEFAULT_GEO_COLUMN} from '../constants-internal.js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {RasterMetadata, SpatialDataType} from '../sources/types.js';\nimport {isRasterTile, tileFeaturesRaster} from './tileFeaturesRaster.js';\nimport {assert} from '../utils.js';\n\n/** @privateRemarks Source: @carto/react-core */\nexport type TileFeatures = {\n tiles: Tile[];\n tileFormat: TileFormat;\n spatialDataType: SpatialDataType;\n spatialDataColumn?: string;\n spatialFilter: SpatialFilter;\n uniqueIdProperty?: string;\n rasterMetadata?: RasterMetadata;\n storeGeometry?: boolean;\n};\n\n/** @privateRemarks Source: @carto/react-core */\nexport type TileFeatureExtractOptions = {\n storeGeometry?: boolean;\n spatialDataType?: SpatialDataType;\n spatialDataColumn?: string;\n uniqueIdProperty?: string;\n};\n\n/** @privateRemarks Source: @carto/react-core */\nexport function tileFeatures({\n tiles,\n spatialFilter,\n uniqueIdProperty,\n tileFormat,\n spatialDataColumn = DEFAULT_GEO_COLUMN,\n spatialDataType,\n rasterMetadata,\n storeGeometry = false,\n}: TileFeatures): FeatureData[] {\n if (spatialDataType === 'geo') {\n return tileFeaturesGeometries({\n tiles,\n tileFormat,\n spatialFilter,\n uniqueIdProperty,\n options: {storeGeometry},\n });\n }\n\n if (tiles.some(isRasterTile)) {\n assert(rasterMetadata, 'Missing raster metadata');\n return tileFeaturesRaster({\n tiles: tiles as RasterTile[],\n spatialFilter,\n spatialDataColumn,\n spatialDataType,\n rasterMetadata,\n });\n }\n\n return tileFeaturesSpatialIndex({\n tiles: tiles as SpatialIndexTile[],\n spatialFilter,\n spatialDataColumn,\n spatialDataType,\n });\n}\n","import type {AggregationType} from '../types.js';\nimport type {FeatureData} from '../types-internal.js';\n\n/** @privateRemarks Source: @carto/react-core */\nexport type AggregationFunction = (\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n joinOperation?: AggregationType\n) => number;\n\n/** @privateRemarks Source: @carto/react-core */\nexport const aggregationFunctions: Record<\n Exclude<AggregationType, 'custom'>,\n AggregationFunction\n> = {\n count: (values) => values.length,\n min: (...args) => applyAggregationFunction(min, ...args),\n max: (...args) => applyAggregationFunction(max, ...args),\n sum: (...args) => applyAggregationFunction(sum, ...args),\n avg: (...args) => applyAggregationFunction(avg, ...args),\n};\n\n/** @privateRemarks Source: @carto/react-core */\nexport function aggregate(\n feature: FeatureData,\n keys?: string[],\n operation?: AggregationType\n): unknown {\n if (!keys?.length) {\n throw new Error('Cannot aggregate a feature without having keys');\n } else if (keys.length === 1) {\n const value = feature[keys[0]];\n return isPotentiallyValidNumber(value) ? Number(value) : value;\n }\n\n const aggregationFn =\n aggregationFunctions[operation as Exclude<AggregationType, 'custom'>];\n\n if (!aggregationFn) {\n throw new Error(`${operation} isn't a valid aggregation function`);\n }\n\n return aggregationFn(\n keys.map((column) => {\n const value = feature[column];\n return isPotentiallyValidNumber(value) ? Number(value) : value;\n })\n );\n}\n\n/*\n * Forced casting to Number (just of non empty strings) allows to work-around\n * some specific situations, where a big numeric field is transformed into a string when generating the tileset(eg.PG)\n */\nfunction isPotentiallyValidNumber(value: unknown): boolean {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\nconst applyAggregationFunction = (\n aggFn: AggregationFunction,\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n operation?: AggregationType\n) => {\n const normalizedKeys = normalizeKeys(keys);\n const elements =\n (normalizedKeys?.length || 0) <= 1\n ? filterFalsyElements(values as unknown[], normalizedKeys || [])\n : values;\n return aggFn(elements, keys, operation);\n};\n\nfunction filterFalsyElements(\n values: unknown[] | FeatureData[],\n keys: string[]\n) {\n const filterFn = (value: unknown) => value !== null && value !== undefined;\n\n if (!keys?.length) {\n return values.filter(filterFn);\n }\n\n return (values as FeatureData[]).filter((v) => filterFn(v[keys[0]]));\n}\n\n// Aggregation functions\nfunction avg(\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n joinOperation?: AggregationType\n): number {\n return sum(values, keys, joinOperation) / (values.length || 1);\n}\n\nfunction sum(\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n joinOperation?: AggregationType\n): number {\n const normalizedKeys = normalizeKeys(keys);\n\n if (normalizedKeys) {\n return (values as FeatureData[]).reduce(\n (a, b) => a + (aggregate(b, normalizedKeys, joinOperation) as number),\n 0\n );\n }\n\n return values.reduce((a: number, b: unknown) => a + (b as number), 0);\n}\n\nfunction min(\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n joinOperation?: AggregationType\n): number {\n const normalizedKeys = normalizeKeys(keys);\n if (normalizedKeys) {\n return (values as FeatureData[]).reduce(\n (a, b) =>\n Math.min(a, aggregate(b, normalizedKeys, joinOperation) as number),\n Infinity\n );\n }\n\n let min = Number.POSITIVE_INFINITY;\n for (const value of values as number[]) {\n min = Math.min(min, value);\n }\n return min;\n}\n\nfunction max(\n values: unknown[] | FeatureData[],\n keys?: string[] | string,\n joinOperation?: AggregationType\n): number {\n const normalizedKeys = normalizeKeys(keys);\n if (normalizedKeys) {\n return (values as FeatureData[]).reduce(\n (a, b) =>\n Math.max(a, aggregate(b, normalizedKeys, joinOperation) as number),\n -Infinity\n );\n }\n\n let max = Number.NEGATIVE_INFINITY;\n for (const value of values as number[]) {\n max = Math.max(max, value);\n }\n return max;\n}\n\n// Aux\n\n// Keys can come as a string (one column) or a strings array (multiple column)\n// Use always an array to make the code easier\nfunction normalizeKeys(keys: unknown): string[] | undefined {\n return Array.isArray(keys)\n ? keys\n : typeof keys === 'string'\n ? [keys]\n : undefined;\n}\n","import {firstBy} from 'thenby';\nimport type {SortDirection} from '../types.js';\nimport type {FeatureData} from '../types-internal.js';\n\n// TODO(cleanup): Could this be simplified?\ntype SortColumns = string | string[] | object[];\n\ninterface SortOptions {\n sortBy?: SortColumns;\n sortByDirection?: SortDirection;\n sortByColumnType?: 'number' | 'string' | 'date';\n}\n\n/**\n * Apply sort structure to a collection of features\n * @param features\n * @param [sortOptions]\n * @param [sortOptions.sortBy] - One or more columns to sort by\n * @param [sortOptions.sortByDirection] - Direction by the columns will be sorted\n * @param [sortOptions.sortByColumnType] - Column type\n * @internal\n * @privateRemarks Source: @carto/react-core\n */\nexport function applySorting(\n features: FeatureData[],\n {\n sortBy,\n sortByDirection = 'asc',\n sortByColumnType = 'string',\n }: SortOptions = {}\n): FeatureData[] {\n // If sortBy is undefined, pass all features\n if (sortBy === undefined) {\n return features;\n }\n\n // sortOptions exists, but are bad formatted\n const isValidSortBy =\n (Array.isArray(sortBy) && sortBy.length) || // sortBy can be an array of columns\n typeof sortBy === 'string'; // or just one column\n\n if (!isValidSortBy) {\n throw new Error('Sorting options are bad formatted');\n }\n const sortFn = createSortFn({\n sortBy,\n sortByDirection,\n sortByColumnType: sortByColumnType || 'string',\n });\n return features.sort(sortFn);\n}\n\n// Aux\nfunction createSortFn({\n sortBy,\n sortByDirection,\n sortByColumnType,\n}: Required<SortOptions>) {\n const [firstSortOption, ...othersSortOptions] = normalizeSortByOptions({\n sortBy,\n sortByDirection,\n sortByColumnType,\n }) as Parameters<typeof firstBy>[];\n\n let sortFn = firstBy(...firstSortOption);\n for (const sortOptions of othersSortOptions) {\n sortFn = sortFn.thenBy(...sortOptions);\n }\n\n return sortFn;\n}\n\nfunction normalizeSortByOptions({\n sortBy,\n sortByDirection,\n sortByColumnType,\n}: Required<SortOptions>) {\n const numberFormat = sortByColumnType === 'number' && {\n cmp: (a: number, b: number) => a - b,\n };\n if (!Array.isArray(sortBy)) {\n sortBy = [sortBy];\n }\n return sortBy.map((sortByEl) => {\n // sortByEl is 'column'\n if (typeof sortByEl === 'string') {\n return [sortByEl, {direction: sortByDirection, ...numberFormat}];\n }\n\n if (Array.isArray(sortByEl)) {\n // sortBy is ['column']\n if (sortByEl[1] === undefined) {\n return [sortByEl, {direction: sortByDirection, ...numberFormat}];\n }\n\n // sortBy is ['column', { ... }]\n if (typeof sortByEl[1] === 'object') {\n const othersSortOptions = numberFormat\n ? {...numberFormat, ...sortByEl[1]}\n : sortByEl[1];\n return [\n sortByEl[0],\n {direction: sortByDirection, ...othersSortOptions},\n ];\n }\n }\n return sortByEl;\n });\n}\n","import {aggregationFunctions, aggregate} from './aggregation.js';\nimport type {AggregationType} from '../types.js';\nimport type {FeatureData} from '../types-internal.js';\n\n/** @privateRemarks Source: @carto/react-core */\nexport type GroupByFeature = {\n name: string;\n value: number;\n}[];\n\n/** @privateRemarks Source: @carto/react-core */\nexport function groupValuesByColumn({\n data,\n valuesColumns,\n joinOperation,\n keysColumn,\n operation,\n}: {\n data: FeatureData[];\n valuesColumns?: string[];\n joinOperation?: AggregationType;\n keysColumn: string;\n operation: AggregationType;\n}): GroupByFeature | null {\n if (Array.isArray(data) && data.length === 0) {\n return null;\n }\n const groups = data.reduce((accumulator, item) => {\n const group = item[keysColumn];\n\n const values = accumulator.get(group) || [];\n accumulator.set(group, values);\n\n const aggregatedValue = aggregate(item, valuesColumns, joinOperation);\n\n const isValid =\n (operation === 'count' ? true : aggregatedValue !== null) &&\n aggregatedValue !== undefined;\n\n if (isValid) {\n values.push(aggregatedValue);\n accumulator.set(group, values);\n }\n\n return accumulator;\n }, new Map()); // We use a map to be able to maintain the type in the key value\n\n const targetOperation =\n aggregationFunctions[operation as Exclude<AggregationType, 'custom'>];\n\n if (targetOperation) {\n return Array.from(groups).map(([name, value]) => ({\n name,\n value: targetOperation(value),\n }));\n }\n\n return [];\n}\n","/**\n * Returns midnight (local time) on the Monday preceeding a given date, in\n * milliseconds since the UNIX epoch.\n */\nexport function getMonday(date: number | Date): number {\n const dateCp = new Date(date);\n const day = dateCp.getDay();\n const diff = dateCp.getDate() - day + (day ? 1 : -6); // adjust when day is sunday\n dateCp.setDate(diff);\n dateCp.setHours(0, 0, 0, 0);\n return dateCp.getTime();\n}\n\n/**\n * Returns midnight (UTC) on the Monday preceeding a given date, in\n * milliseconds since the UNIX epoch.\n */\nexport function getUTCMonday(date: number | Date): number {\n const dateCp = new Date(date);\n const day = dateCp.getUTCDay();\n const diff = dateCp.getUTCDate() - day + (day ? 1 : -6); // adjust when day is sunday\n dateCp.setUTCDate(diff);\n return Date.UTC(\n dateCp.getUTCFullYear(),\n dateCp.getUTCMonth(),\n dateCp.getUTCDate()\n );\n}\n","import type {AggregationType, GroupDateType} from '../types.js';\nimport {getUTCMonday} from '../utils/dateUtils.js';\nimport {aggregate, aggregationFunctions} from './aggregation.js';\nimport type {GroupByFeature} from './groupBy.js';\n\nconst GROUP_KEY_FN_MAPPING: Record<GroupDateType, (date: Date) => number> = {\n year: (date: Date) => Date.UTC(date.getUTCFullYear()),\n month: (date: Date) => Date.UTC(date.getUTCFullYear(), date.getUTCMonth()),\n week: (date: Date) => getUTCMonday(date),\n day: (date: Date) =>\n Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()),\n hour: (date: Date) =>\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours()\n ),\n minute: (date: Date) =>\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes()\n ),\n second: (date: Date) =>\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds()\n ),\n};\n\n/** @privateRemarks Source: @carto/react-core */\nexport function groupValuesByDateColumn({\n data,\n valuesColumns,\n joinOperation,\n keysColumn,\n groupType,\n operation,\n}: {\n data: Record<string, unknown>[];\n valuesColumns?: string[];\n joinOperation?: Exclude<AggregationType, 'custom'>;\n keysColumn: string;\n groupType: GroupDateType;\n operation?: Exclude<AggregationType, 'custom'>;\n}): GroupByFeature | null {\n if (Array.isArray(data) && data.length === 0) {\n return null;\n }\n\n const groupKeyFn = GROUP_KEY_FN_MAPPING[groupType];\n\n if (!groupKeyFn) {\n return null;\n }\n\n const groups = data.reduce((acc, item) => {\n const value = item[keysColumn];\n const formattedValue = new Date(value as number);\n const groupKey = groupKeyFn(formattedValue);\n\n if (!isNaN(groupKey)) {\n let groupedValues = acc.get(groupKey);\n if (!groupedValues) {\n groupedValues = [];\n acc.set(groupKey, groupedValues);\n }\n\n const aggregatedValue = aggregate(item, valuesColumns, joinOperation);\n\n const isValid = aggregatedValue !== null && aggregatedValue !== undefined;\n\n if (isValid) {\n groupedValues.push(aggregatedValue);\n acc.set(groupKey, groupedValues);\n }\n }\n\n return acc;\n }, new Map());\n\n const targetOperation =\n aggregationFunctions[operation as Exclude<AggregationType, 'custom'>];\n\n return [...groups.entries()]\n .map(([name, value]) => ({\n name,\n value: targetOperation(value),\n }))\n .sort((a, b) => a.name - b.name);\n}\n","import {aggregate, aggregationFunctions} from './aggregation.js';\nimport type {AggregationType} from '../types.js';\nimport type {FeatureData} from '../types-internal.js';\n\n/**\n * Histogram computation.\n * @privateRemarks Source: @carto/react-core\n */\nexport function histogram({\n data,\n valuesColumns,\n joinOperation,\n ticks,\n operation,\n}: {\n data: FeatureData[];\n valuesColumns?: string[];\n joinOperation?: Exclude<AggregationType, 'custom'>;\n ticks: number[];\n operation: Exclude<AggregationType, 'custom'>;\n}): number[] {\n if (Array.isArray(data) && data.length === 0) {\n return [];\n }\n\n const binsContainer = [Number.MIN_SAFE_INTEGER, ...ticks].map(\n (tick, index, arr) => ({\n bin: index,\n start: tick,\n end: index === arr.length - 1 ? Number.MAX_SAFE_INTEGER : arr[index + 1],\n values: [] as number[],\n })\n );\n\n data.forEach((feature) => {\n const featureValue = aggregate(\n feature,\n valuesColumns,\n joinOperation\n ) as number;\n\n const isValid = featureValue !== null && featureValue !== undefined;\n\n if (!isValid) {\n return;\n }\n\n const binContainer = binsContainer.find(\n (bin) => bin.start <= featureValue && bin.end > featureValue\n );\n\n if (!binContainer) {\n return;\n }\n\n binContainer.values.push(featureValue);\n });\n\n const targetOperation = aggregationFunctions[operation];\n const transformedBins = binsContainer.map(\n (binContainer) => binContainer.values\n );\n return transformedBins.map((values) =>\n values.length ? targetOperation(values) : 0\n );\n}\n","import {aggregate} from './aggregation.js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {AggregationType} from '../types.js';\n\nexport type ScatterPlotFeature = [number, number][];\n\n/**\n * Filters invalid features and formats data.\n * @privateRemarks Source: @carto/react-core\n */\nexport function scatterPlot({\n data,\n xAxisColumns,\n xAxisJoinOperation,\n yAxisColumns,\n yAxisJoinOperation,\n}: {\n data: FeatureData[];\n xAxisColumns: string[];\n xAxisJoinOperation?: AggregationType;\n yAxisColumns: string[];\n yAxisJoinOperation?: AggregationType;\n}): ScatterPlotFeature {\n return data.reduce(\n (acc, feature) => {\n const xValue = aggregate(\n feature,\n xAxisColumns,\n xAxisJoinOperation\n ) as number;\n\n const xIsValid = xValue !== null && xValue !== undefined;\n\n const yValue = aggregate(\n feature,\n yAxisColumns,\n yAxisJoinOperation\n ) as number;\n\n const yIsValid = yValue !== null && yValue !== undefined;\n\n if (xIsValid && yIsValid) {\n acc.push([xValue, yValue]);\n }\n\n return acc;\n },\n [] as [number, number][]\n );\n}\n","/**\n * @internal\n * @privateRemarks Source: @carto/react-core, @carto/constants, @deck.gl/carto\n */\nlet client = 'deck-gl-carto';\n\n/**\n * Returns current client ID, used to categorize API requests. For internal use only.\n *\n * @internal\n * @privateRemarks Source: @carto/react-core\n */\nexport function getClient() {\n return client;\n}\n\n/**\n * Sets current client ID, used to categorize API requests. For internal use only.\n *\n * @internal\n * @privateRemarks Source: @carto/react-core\n */\nexport function setClient(c: string) {\n client = c;\n}\n","import type {\n CategoryRequestOptions,\n CategoryResponse,\n FeaturesRequestOptions,\n FeaturesResponse,\n FormulaRequestOptions,\n FormulaResponse,\n HistogramRequestOptions,\n HistogramResponse,\n RangeRequestOptions,\n RangeResponse,\n ScatterRequestOptions,\n ScatterResponse,\n TableRequestOptions,\n TableResponse,\n TimeSeriesRequestOptions,\n TimeSeriesResponse,\n} from './types.js';\nimport type {FilterLogicalOperator, Filter} from '../types.js';\nimport {getClient} from '../client.js';\nimport type {SourceOptions} from '../sources/index.js';\nimport {ApiVersion, DEFAULT_API_BASE_URL} from '../constants.js';\n\nexport interface WidgetSourceProps extends Omit<SourceOptions, 'filters'> {\n apiVersion?: ApiVersion;\n filters?: Record<string, Filter>;\n filtersLogicalOperator?: FilterLogicalOperator;\n}\n\n/**\n * Source for Widget API requests on a data source defined by a SQL query.\n *\n * Abstract class. Use {@link WidgetQuerySource} or {@link WidgetTableSource}.\n */\nexport abstract class WidgetSource<\n Props extends WidgetSourceProps = WidgetSourceProps,\n> {\n readonly props: Props;\n\n static defaultProps: Partial<WidgetSourceProps> = {\n apiVersion: ApiVersion.V3,\n apiBaseUrl: DEFAULT_API_BASE_URL,\n clientId: getClient(),\n filters: {},\n filtersLogicalOperator: 'and',\n };\n\n constructor(props: Props) {\n this.props = {\n ...WidgetSource.defaultProps,\n clientId: getClient(), // Refresh clientId, default may have changed.\n ...props,\n };\n }\n\n /**\n * Destroys the widget source and releases allocated resources.\n *\n * For remote sources (tables, queries) this has no effect, but for local\n * sources (tilesets, rasters) these resources will affect performance\n * and stability if many (10+) sources are created and not released.\n */\n destroy() {\n // no-op in most cases, but required for worker sources.\n }\n\n /**\n * Returns a list of labeled datapoints for categorical data. Suitable for\n * charts including grouped bar charts, pie charts, and tree charts.\n */\n abstract getCategories(\n options: CategoryRequestOptions\n ): Promise<CategoryResponse>;\n\n /**\n * Given a list of feature IDs (as found in `_carto_feature_id`) returns all\n * matching features. In datasets containing features with duplicate geometries,\n * feature IDs may be duplicated (IDs are a hash of geometry) and so more\n * results may be returned than IDs in the request.\n * @internal\n * @experimental\n */\n abstract getFeatures(\n options: FeaturesRequestOptions\n ): Promise<FeaturesResponse>;\n\n /**\n * Returns a scalar numerical statistic over all matching data. Suitable\n * for 'headline' or 'scorecard' figures such as counts and sums.\n */\n abstract getFormula(options: FormulaRequestOptions): Promise<FormulaResponse>;\n\n /**\n * Returns a list of labeled datapoints for 'bins' of data defined as ticks\n * over a numerical range. Suitable for histogram charts.\n */\n abstract getHistogram(\n options: HistogramRequestOptions\n ): Promise<HistogramResponse>;\n\n /**\n * Returns a range (min and max) for a numerical column of matching rows.\n * Suitable for displaying certain 'headline' or 'scorecard' statistics,\n * or rendering a range slider UI for filtering.\n */\n abstract getRange(options: RangeRequestOptions): Promise<RangeResponse>;\n\n /**\n * Returns a list of bivariate datapoints defined as numerical 'x' and 'y'\n * values. Suitable for rendering scatter plots.\n */\n abstract getScatter(options: ScatterRequestOptions): Promise<ScatterResponse>;\n\n /**\n * Returns a list of arbitrary data rows, with support for pagination and\n * sorting. Suitable for displaying tables and lists.\n */\n abstract getTable(options: TableRequestOptions): Promise<TableResponse>;\n\n /**\n * Returns a series of labeled numerical values, grouped into equally-sized\n * time intervals. Suitable for rendering time series charts.\n */\n abstract getTimeSeries(\n options: TimeSeriesRequestOptions\n ): Promise<TimeSeriesResponse>;\n}\n","import {\n Feature,\n LineString,\n Position,\n GeoJSON,\n Point,\n Polygon,\n GeometryCollection,\n FeatureCollection,\n MultiLineString,\n MultiPoint,\n MultiPolygon,\n GeoJsonProperties,\n} from \"geojson\";\n\n/**\n\n * GeoJSON equality checking utility.\n * Adapted from https://github.com/geosquare/geojson-equality\n *\n * @memberof helpers\n * @type {Class}\n */\nclass GeojsonEquality {\n private precision: number;\n private direction = false;\n private compareProperties = true;\n\n constructor(opts?: {\n precision?: number;\n direction?: boolean;\n compareProperties?: boolean;\n }) {\n this.precision = 10 ** -(opts?.precision ?? 17);\n this.direction = opts?.direction ?? false;\n this.compareProperties = opts?.compareProperties ?? true;\n }\n\n compare(g1: GeoJSON, g2: GeoJSON): boolean {\n if (g1.type !== g2.type) {\n return false;\n }\n\n if (!sameLength(g1, g2)) {\n return false;\n }\n\n switch (g1.type) {\n case \"Point\":\n return this.compareCoord(g1.coordinates, (g2 as Point).coordinates);\n case \"LineString\":\n return this.compareLine(g1.coordinates, (g2 as LineString).coordinates);\n case \"Polygon\":\n return this.comparePolygon(g1, g2 as Polygon);\n case \"GeometryCollection\":\n return this.compareGeometryCollection(g1, g2 as GeometryCollection);\n case \"Feature\":\n return this.compareFeature(g1, g2 as Feature);\n case \"FeatureCollection\":\n return this.compareFeatureCollection(g1, g2 as FeatureCollection);\n default:\n if (g1.type.startsWith(\"Multi\")) {\n const g1s = explode(g1);\n const g2s = explode(\n g2 as MultiLineString | MultiPoint | MultiPolygon\n );\n return g1s.every((g1part) =>\n g2s.some((g2part) => this.compare(g1part as any, g2part as any))\n );\n }\n }\n return false;\n }\n\n private compareCoord(c1: Position, c2: Position) {\n return (\n c1.length === c2.length &&\n c1.every((c, i) => Math.abs(c - c2[i]) < this.precision)\n );\n }\n\n private compareLine(\n path1: Position[],\n path2: Position[],\n ind = 0,\n isPoly = false\n ): boolean {\n if (!sameLength(path1, path2)) {\n return false;\n }\n const p1 = path1;\n let p2 = path2;\n if (isPoly && !this.compareCoord(p1[0], p2[0])) {\n // fix start index of both to same point\n const startIndex = this.fixStartIndex(p2, p1);\n if (!startIndex) {\n return false;\n } else {\n p2 = startIndex;\n }\n }\n // for linestring ind =0 and for polygon ind =1\n const sameDirection = this.compareCoord(p1[ind], p2[ind]);\n if (this.direction || sameDirection) {\n return this.comparePath(p1, p2);\n } else {\n if (this.compareCoord(p1[ind], p2[p2.length - (1 + ind)])) {\n return this.comparePath(p1.slice().reverse(), p2);\n }\n return false;\n }\n }\n\n private fixStartIndex(sourcePath: Position[], targetPath: Position[]) {\n //make sourcePath first point same as of targetPath\n let correctPath,\n ind = -1;\n for (let i = 0; i < sourcePath.length; i++) {\n if (this.compareCoord(sourcePath[i], targetPath[0])) {\n ind = i;\n break;\n }\n }\n if (ind >= 0) {\n correctPath = ([] as Position[]).concat(\n sourcePath.slice(ind, sourcePath.length),\n sourcePath.slice(1, ind + 1)\n );\n }\n return correctPath;\n }\n\n private comparePath(p1: Position[], p2: Position[]) {\n return p1.every((c, i) => this.compareCoord(c, p2[i]));\n }\n\n private comparePolygon(g1: Polygon, g2: Polygon) {\n if (this.compareLine(g1.coordinates[0], g2.coordinates[0], 1, true)) {\n const holes1 = g1.coordinates.slice(1, g1.coordinates.length);\n const holes2 = g2.coordinates.slice(1, g2.coordinates.length);\n return holes1.every((h1) =>\n holes2.some((h2) => this.compareLine(h1, h2, 1, true))\n );\n }\n return false;\n }\n\n private compareGeometryCollection(\n g1: GeometryCollection,\n g2: GeometryCollection\n ) {\n return (\n sameLength(g1.geometries, g2.geometries) &&\n this.compareBBox(g1, g2) &&\n g1.geometries.every((g, i) => this.compare(g, g2.geometries[i]))\n );\n }\n\n private compareFeature(g1: Feature, g2: Feature) {\n return (\n g1.id === g2.id &&\n (this.compareProperties ? equal(g1.properties, g2.properties) : true) &&\n this.compareBBox(g1, g2) &&\n this.compare(g1.geometry, g2.geometry)\n );\n }\n\n private compareFeatureCollection(\n g1: FeatureCollection,\n g2: FeatureCollection\n ) {\n return (\n sameLength(g1.features, g2.features) &&\n this.compareBBox(g1, g2) &&\n g1.features.every((f, i) => this.compare(f, g2.features[i]))\n );\n }\n\n private compareBBox(g1: GeoJSON, g2: GeoJSON): boolean {\n return (\n Boolean(!g1.bbox && !g2.bbox) ||\n (g1.bbox && g2.bbox ? this.compareCoord(g1.bbox, g2.bbox) : false)\n );\n }\n}\n\nfunction sameLength(g1: any, g2: any) {\n return g1.coordinates\n ? g1.coordinates.length === g2.coordinates.length\n : g1.length === g2.length;\n}\n\nfunction explode(g: MultiLineString | MultiPoint | MultiPolygon) {\n return g.coordinates.map((part) => ({\n type: g.type.replace(\"Multi\", \"\"),\n coordinates: part,\n }));\n}\n\nfunction geojsonEquality(\n g1: GeoJSON,\n g2: GeoJSON,\n opts?: {\n precision?: number;\n direction?: boolean;\n compareProperties?: boolean;\n }\n): boolean {\n const eq = new GeojsonEquality(opts);\n\n return eq.compare(g1, g2);\n}\n\n// Adapted from https://medium.com/syncfusion/5-different-ways-to-deep-compare-javascript-objects-6708a0da9f05\nfunction equal(object1: GeoJsonProperties, object2: GeoJsonProperties) {\n if (object1 === null && object2 === null) {\n return true;\n }\n\n if (object1 === null || object2 === null) {\n return false;\n }\n\n const objKeys1 = Object.keys(object1);\n const objKeys2 = Object.keys(object2);\n\n if (objKeys1.length !== objKeys2.length) return false;\n\n for (var key of objKeys1) {\n const value1 = object1[key];\n const value2 = object2[key];\n\n const isObjects = isObject(value1) && isObject(value2);\n\n if (\n (isObjects && !equal(value1, value2)) ||\n (!isObjects && value1 !== value2)\n ) {\n return false;\n }\n }\n return true;\n}\n\nconst isObject = (object: any) => {\n return object != null && typeof object === \"object\";\n};\n\nexport { GeojsonEquality, geojsonEquality };\nexport default GeojsonEquality;\n","import { Position } from \"geojson\";\nimport { feature } from \"@turf/helpers\";\nimport { getCoords, getType } from \"@turf/invariant\";\n\n// To-Do => Improve Typescript GeoJSON handling\n\n/**\n * Removes redundant coordinates from any GeoJSON Geometry.\n *\n * @function\n * @param {Geometry|Feature} geojson Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated\n * @returns {Geometry|Feature} the cleaned input Feature/Geometry\n * @example\n * var line = turf.lineString([[0, 0], [0, 2], [0, 5], [0, 8], [0, 8], [0, 10]]);\n * var multiPoint = turf.multiPoint([[0, 0], [0, 0], [2, 2]]);\n *\n * turf.cleanCoords(line).geometry.coordinates;\n * //= [[0, 0], [0, 10]]\n *\n * turf.cleanCoords(multiPoint).geometry.coordinates;\n * //= [[0, 0], [2, 2]]\n */\nfunction cleanCoords(\n geojson: any,\n options: {\n mutate?: boolean;\n } = {}\n) {\n // Backwards compatible with v4.0\n var mutate = typeof options === \"object\" ? options.mutate : options;\n if (!geojson) throw new Error(\"geojson is required\");\n var type = getType(geojson);\n\n // Store new \"clean\" points in this Array\n var newCoords = [];\n\n switch (type) {\n case \"LineString\":\n newCoords = cleanLine(geojson, type);\n break;\n case \"MultiLineString\":\n case \"Polygon\":\n getCoords(geojson).forEach(function (line) {\n newCoords.push(cleanLine(line, type));\n });\n break;\n case \"MultiPolygon\":\n getCoords(geojson).forEach(function (polygons: any) {\n var polyPoints: Position[] = [];\n polygons.forEach(function (ring: Position[]) {\n polyPoints.push(cleanLine(ring, type));\n });\n newCoords.push(polyPoints);\n });\n break;\n case \"Point\":\n return geojson;\n case \"MultiPoint\":\n var existing: Record<string, true> = {};\n getCoords(geojson).forEach(function (coord: any) {\n var key = coord.join(\"-\");\n if (!Object.prototype.hasOwnProperty.call(existing, key)) {\n newCoords.push(coord);\n existing[key] = true;\n }\n });\n break;\n default:\n throw new Error(type + \" geometry not supported\");\n }\n\n // Support input mutation\n if (geojson.coordinates) {\n if (mutate === true) {\n geojson.coordinates = newCoords;\n return geojson;\n }\n return { type: type, coordinates: newCoords };\n } else {\n if (mutate === true) {\n geojson.geometry.coordinates = newCoords;\n return geojson;\n }\n return feature({ type: type, coordinates: newCoords }, geojson.properties, {\n bbox: geojson.bbox,\n id: geojson.id,\n });\n }\n}\n\n/**\n * Clean Coords\n *\n * @private\n * @param {Array<number>|LineString} line Line\n * @param {string} type Type of geometry\n * @returns {Array<number>} Cleaned coordinates\n */\nfunction cleanLine(line: Position[], type: string) {\n var points = getCoords(line);\n // handle \"clean\" segment\n if (points.length === 2 && !equals(points[0], points[1])) return points;\n\n var newPoints = [];\n var secondToLast = points.length - 1;\n var newPointsLength = newPoints.length;\n\n newPoints.push(points[0]);\n for (var i = 1; i < secondToLast; i++) {\n var prevAddedPoint = newPoints[newPoints.length - 1];\n if (\n points[i][0] === prevAddedPoint[0] &&\n points[i][1] === prevAddedPoint[1]\n )\n continue;\n else {\n newPoints.push(points[i]);\n newPointsLength = newPoints.length;\n if (newPointsLength > 2) {\n if (\n isPointOnLineSegment(\n newPoints[newPointsLength - 3],\n newPoints[newPointsLength - 1],\n newPoints[newPointsLength - 2]\n )\n )\n newPoints.splice(newPoints.length - 2, 1);\n }\n }\n }\n newPoints.push(points[points.length - 1]);\n newPointsLength = newPoints.length;\n\n // (Multi)Polygons must have at least 4 points, but a closed LineString with only 3 points is acceptable\n if (\n (type === \"Polygon\" || type === \"MultiPolygon\") &&\n equals(points[0], points[points.length - 1]) &&\n newPointsLength < 4\n ) {\n throw new Error(\"invalid polygon\");\n }\n\n if (type === \"LineString\" && newPointsLength < 3) {\n return newPoints;\n }\n\n if (\n isPointOnLineSegment(\n newPoints[newPointsLength - 3],\n newPoints[newPointsLength - 1],\n newPoints[newPointsLength - 2]\n )\n )\n newPoints.splice(newPoints.length - 2, 1);\n\n return newPoints;\n}\n\n/**\n * Compares two points and returns if they are equals\n *\n * @private\n * @param {Position} pt1 point\n * @param {Position} pt2 point\n * @returns {boolean} true if they are equals\n */\nfunction equals(pt1: Position, pt2: Position) {\n return pt1[0] === pt2[0] && pt1[1] === pt2[1];\n}\n\n/**\n * Returns if `point` is on the segment between `start` and `end`.\n * Borrowed from `@turf/boolean-point-on-line` to speed up the evaluation (instead of using the module as dependency)\n *\n * @private\n * @param {Position} start coord pair of start of line\n * @param {Position} end coord pair of end of line\n * @param {Position} point coord pair of point to check\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(start: Position, end: Position, point: Position) {\n var x = point[0],\n y = point[1];\n var startX = start[0],\n startY = start[1];\n var endX = end[0],\n endY = end[1];\n\n var dxc = x - startX;\n var dyc = y - startY;\n var dxl = endX - startX;\n var dyl = endY - startY;\n var cross = dxc * dyl - dyc * dxl;\n\n if (cross !== 0) return false;\n else if (Math.abs(dxl) >= Math.abs(dyl))\n return dxl > 0 ? startX <= x && x <= endX : endX <= x && x <= startX;\n else return dyl > 0 ? startY <= y && y <= endY : endY <= y && y <= startY;\n}\n\nexport { cleanCoords };\nexport default cleanCoords;\n","import { Feature, Geometry } from \"geojson\";\nimport { geojsonEquality } from \"geojson-equality-ts\";\nimport { cleanCoords } from \"@turf/clean-coords\";\nimport { getGeom } from \"@turf/invariant\";\n\n/**\n * Determine whether two geometries of the same type have identical X,Y coordinate values.\n * See http://edndoc.esri.com/arcsde/9.0/general_topics/understand_spatial_relations.htm\n *\n * @function\n * @param {Geometry|Feature} feature1 GeoJSON input\n * @param {Geometry|Feature} feature2 GeoJSON input\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.precision=6] decimal precision to use when comparing coordinates\n * @returns {boolean} true if the objects are equal, false otherwise\n * @example\n * var pt1 = turf.point([0, 0]);\n * var pt2 = turf.point([0, 0]);\n * var pt3 = turf.point([1, 1]);\n *\n * turf.booleanEqual(pt1, pt2);\n * //= true\n * turf.booleanEqual(pt2, pt3);\n * //= false\n */\nfunction booleanEqual(\n feature1: Feature<any> | Geometry,\n feature2: Feature<any> | Geometry,\n options: {\n precision?: number;\n } = {}\n): boolean {\n let precision = options.precision;\n\n precision =\n precision === undefined || precision === null || isNaN(precision)\n ? 6\n : precision;\n\n if (typeof precision !== \"number\" || !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n\n const type1 = getGeom(feature1).type;\n const type2 = getGeom(feature2).type;\n if (type1 !== type2) return false;\n\n return geojsonEquality(cleanCoords(feature1), cleanCoords(feature2), {\n precision,\n });\n}\n\nexport { booleanEqual };\nexport default booleanEqual;\n","import {FilterType} from './constants.js';\nimport type {Filter} from './types.js';\nimport {isEmptyObject} from './utils.js';\n\nconst FILTER_TYPES = new Set(Object.values(FilterType));\nconst isFilterType = (type: string): type is FilterType =>\n FILTER_TYPES.has(type as FilterType);\n\ntype FilterTypeOptions<T extends FilterType> = {\n type: T;\n column: string;\n} & Filter[T];\n\nexport type AddFilterOptions =\n | FilterTypeOptions<FilterType.IN>\n | FilterTypeOptions<FilterType.BETWEEN>\n | FilterTypeOptions<FilterType.CLOSED_OPEN>\n | FilterTypeOptions<FilterType.TIME>\n | FilterTypeOptions<FilterType.STRING_SEARCH>;\n\n/**\n * Adds a {@link Filter} to the filter set. Any previous filters with the same\n * `column` and `type` will be replaced.\n */\nexport function addFilter(\n filters: Record<string, Filter>,\n {column, type, values, owner}: AddFilterOptions\n): Record<string, Filter> {\n if (!filters[column]) {\n filters[column] = {};\n }\n\n const filter = {values, owner} as FilterTypeOptions<typeof type>;\n (filters[column][type] as FilterTypeOptions<typeof type>) = filter;\n\n return filters;\n}\n\nexport type RemoveFilterOptions = {\n column: string;\n owner?: string;\n};\n\n/**\n * Removes one or more {@link Filter filters} from the filter set. If only\n * `column` is specified, then all filters on that column are removed. If both\n * `column` and `owner` are specified, then only filters for that column\n * associated with the owner are removed.\n */\nexport function removeFilter(\n filters: Record<string, Filter>,\n {column, owner}: RemoveFilterOptions\n): Record<string, Filter> {\n const filter = filters[column];\n if (!filter) {\n return filters;\n }\n\n if (owner) {\n for (const type of FILTER_TYPES) {\n if (owner === filter[type as FilterType]?.owner) {\n delete filter[type as FilterType];\n }\n }\n }\n\n if (!owner || isEmptyObject(filter)) {\n delete filters[column];\n }\n\n return filters;\n}\n\n/**\n * Clears all {@link Filter filters} from the filter set.\n */\nexport function clearFilters(\n filters: Record<string, Filter>\n): Record<string, Filter> {\n for (const column of Object.keys(filters)) {\n delete filters[column];\n }\n return filters;\n}\n\nexport type HasFilterOptions = {\n column: string;\n owner?: string;\n};\n\nexport function hasFilter(\n filters: Record<string, Filter>,\n {column, owner}: HasFilterOptions\n): boolean {\n const filter = filters[column];\n if (!filter) {\n return false;\n }\n\n if (!owner) {\n return true;\n }\n\n for (const type of FILTER_TYPES) {\n if (owner === filter[type as FilterType]?.owner) {\n return true;\n }\n }\n\n return false;\n}\n\nexport type GetFilterOptions<T extends FilterType> = {\n column: string;\n type: T;\n owner?: string;\n};\n\nexport function getFilter<T extends FilterType>(\n filters: Record<string, Filter>,\n {column, type, owner}: GetFilterOptions<T>\n): Filter[T] | null {\n const filter = filters[column];\n if (!filter) {\n return null;\n }\n\n if (!owner || owner === filter[type]?.owner) {\n return filter[type] || null;\n }\n\n return null;\n}\n\n/**\n * Given all filters for a dataset, returns the subset of filters that are not\n * attributable to the given owner. Typically used to allow filterable widgets\n * to affect other widgets *without* filtering themselves.\n *\n * @privateRemarks Source: @carto/react-widgets\n */\nexport function getApplicableFilters(\n owner?: string,\n filters?: Record<string, Filter>\n): Record<string, Filter> {\n if (!filters) return {};\n\n const applicableFilters: Record<string, Filter> = {};\n\n for (const column in filters) {\n for (const type in filters[column]) {\n if (!isFilterType(type)) continue;\n\n const filter = filters[column][type];\n const isApplicable = !owner || !filter?.owner || filter?.owner !== owner;\n if (filter && isApplicable) {\n applicableFilters[column] ||= {};\n (applicableFilters[column][type] as typeof filter) = filter;\n }\n }\n }\n\n return applicableFilters;\n}\n","/* eslint-disable @typescript-eslint/require-await */\nimport type {\n CategoryRequestOptions,\n CategoryResponse,\n FeaturesResponse,\n FormulaRequestOptions,\n FormulaResponse,\n HistogramRequestOptions,\n HistogramResponse,\n RangeRequestOptions,\n RangeResponse,\n ScatterRequestOptions,\n ScatterResponse,\n TableRequestOptions,\n TableResponse,\n TimeSeriesRequestOptions,\n TimeSeriesResponse,\n} from './types.js';\nimport {InvalidColumnError, assert, assignOptional} from '../utils.js';\nimport type {Filter, SpatialFilter, Tile} from '../types.js';\n\nimport {\n type TileFeatureExtractOptions,\n applyFilters,\n geojsonFeatures,\n tileFeatures,\n} from '../filters/index.js';\nimport {\n aggregationFunctions,\n applySorting,\n groupValuesByColumn,\n groupValuesByDateColumn,\n histogram,\n scatterPlot,\n} from '../operations/index.js';\nimport type {FeatureData} from '../types-internal.js';\nimport type {FeatureCollection} from 'geojson';\nimport {WidgetSource} from './widget-source.js';\nimport {booleanEqual} from '@turf/boolean-equal';\nimport type {WidgetTilesetSourceProps} from './widget-tileset-source.js';\nimport {getApplicableFilters} from '../filters.js';\n\n// TODO(cleanup): Parameter defaults in source functions and widget API calls are\n// currently duplicated and possibly inconsistent. Consider consolidating and\n// operating on Required<T> objects. See:\n// https://github.com/CartoDB/carto-api-client/issues/39\n\n/**\n * Local (in-memory) implementation of tileset widget calculations. This class\n * may be instantiated by {@link WidgetTilesetSource} in a Web Worker when\n * supported, or on the main thread.\n */\nexport class WidgetTilesetSourceImpl extends WidgetSource<WidgetTilesetSourceProps> {\n private _tiles: Tile[] = [];\n private _features: FeatureData[] = [];\n private _tileFeatureExtractOptions: TileFeatureExtractOptions = {};\n private _tileFeatureExtractPreviousInputs: {spatialFilter?: SpatialFilter} =\n {};\n\n /**\n * Loads features as a list of tiles (typically provided by deck.gl).\n * After tiles are loaded, {@link extractTileFeatures} must be called\n * before computing statistics on the tiles.\n */\n loadTiles(tiles: unknown[]) {\n this._tiles = tiles as Tile[];\n this._features.length = 0;\n }\n\n /** Configures options used to extract features from tiles. */\n setTileFeatureExtractOptions(options: TileFeatureExtractOptions) {\n this._tileFeatureExtractOptions = options;\n this._features.length = 0;\n }\n\n protected _extractTileFeatures(spatialFilter: SpatialFilter) {\n // When spatial filter has not changed, don't redo extraction. If tiles or\n // tile extract options change, features will have been cleared already.\n const prevInputs = this._tileFeatureExtractPreviousInputs;\n if (\n this._features.length &&\n prevInputs.spatialFilter &&\n booleanEqual(prevInputs.spatialFilter, spatialFilter)\n ) {\n return;\n }\n\n this._features = tileFeatures({\n ...assignOptional({}, this.props, this._tileFeatureExtractOptions),\n tiles: this._tiles,\n spatialFilter,\n });\n\n prevInputs.spatialFilter = spatialFilter;\n }\n\n /**\n * Loads features as GeoJSON (used for testing).\n * @experimental\n * @internal Not for public use. Spatial filters in other method calls will be ignored.\n */\n loadGeoJSON({\n geojson,\n spatialFilter,\n }: {\n geojson: FeatureCollection;\n spatialFilter: SpatialFilter;\n }) {\n this._features = geojsonFeatures({\n geojson,\n spatialFilter,\n ...this._tileFeatureExtractOptions,\n });\n this._tileFeatureExtractPreviousInputs.spatialFilter = spatialFilter;\n }\n\n override async getFeatures(): Promise<FeaturesResponse> {\n throw new Error('getFeatures not supported for tilesets');\n }\n\n async getFormula({\n column = '*',\n operation = 'count',\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: FormulaRequestOptions): Promise<FormulaResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (filteredFeatures.length === 0 && operation !== 'count') {\n return {value: null};\n }\n\n if (operation === 'custom') {\n throw new Error('Custom aggregation not supported for tilesets');\n }\n\n // Column is required except when operation is 'count'.\n if ((column && column !== '*') || operation !== 'count') {\n assertColumn(this._features, column);\n }\n\n const targetOperation = aggregationFunctions[operation];\n return {\n value: targetOperation(filteredFeatures, column, joinOperation),\n };\n }\n\n override async getHistogram({\n operation = 'count',\n ticks,\n column,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: HistogramRequestOptions): Promise<HistogramResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!this._features.length) {\n return [];\n }\n\n assertColumn(this._features, column);\n\n return histogram({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(column),\n joinOperation,\n ticks,\n operation,\n });\n }\n\n override async getCategories({\n column,\n operation = 'count',\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: CategoryRequestOptions): Promise<CategoryResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!filteredFeatures.length) {\n return [];\n }\n\n assertColumn(this._features, column, operationColumn as string);\n\n const groups = groupValuesByColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn || column),\n joinOperation,\n keysColumn: column,\n operation,\n });\n\n return groups || [];\n }\n\n override async getScatter({\n xAxisColumn,\n yAxisColumn,\n xAxisJoinOperation,\n yAxisJoinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: ScatterRequestOptions): Promise<ScatterResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!filteredFeatures.length) {\n return [];\n }\n\n assertColumn(this._features, xAxisColumn, yAxisColumn);\n\n return scatterPlot({\n data: filteredFeatures,\n xAxisColumns: normalizeColumns(xAxisColumn),\n xAxisJoinOperation,\n yAxisColumns: normalizeColumns(yAxisColumn),\n yAxisJoinOperation,\n });\n }\n\n override async getTable({\n columns,\n searchFilterColumn,\n searchFilterText,\n sortBy,\n sortDirection,\n sortByColumnType,\n offset = 0,\n limit = 10,\n filters,\n filterOwner,\n spatialFilter,\n }: TableRequestOptions): Promise<TableResponse> {\n // Filter.\n let filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!filteredFeatures.length) {\n return {rows: [], totalCount: 0};\n }\n\n // Search.\n // TODO(v0.6): Remove \"searchFilterText\" and \"searchFilterColumn\".\n if (searchFilterColumn && searchFilterText) {\n console.warn(\n 'WidgetTilesetSource: \"searchFilterText\" is deprecated, use \"filters\" and FilterType.STRING_SEARCH instead.'\n );\n filteredFeatures = filteredFeatures.filter(\n (row) =>\n row[searchFilterColumn] &&\n String(row[searchFilterColumn] as unknown)\n .toLowerCase()\n .includes(String(searchFilterText).toLowerCase())\n );\n }\n\n // Sort.\n let rows = applySorting(filteredFeatures, {\n sortBy,\n sortByDirection: sortDirection,\n sortByColumnType,\n });\n const totalCount = rows.length;\n\n // Offset and limit.\n rows = rows.slice(\n Math.min(offset, totalCount),\n Math.min(offset + limit, totalCount)\n );\n\n // Select columns.\n rows = rows.map((srcRow: FeatureData) => {\n const dstRow: FeatureData = {};\n for (const column of columns) {\n dstRow[column] = srcRow[column];\n }\n return dstRow;\n });\n\n return {rows, totalCount} as TableResponse;\n }\n\n override async getTimeSeries({\n column,\n stepSize,\n operation,\n operationColumn,\n joinOperation,\n filters,\n filterOwner,\n spatialFilter,\n }: TimeSeriesRequestOptions): Promise<TimeSeriesResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!filteredFeatures.length) {\n return {rows: []};\n }\n\n assertColumn(this._features, column, operationColumn as string);\n assert(\n operation !== 'custom',\n 'Custom operation not supported for tilesets'\n );\n\n const rows =\n groupValuesByDateColumn({\n data: filteredFeatures,\n valuesColumns: normalizeColumns(operationColumn || column),\n keysColumn: column,\n groupType: stepSize,\n operation,\n joinOperation,\n }) || [];\n\n return {rows};\n }\n\n override async getRange({\n column,\n filters,\n filterOwner,\n spatialFilter,\n }: RangeRequestOptions): Promise<RangeResponse> {\n const filteredFeatures = this._getFilteredFeatures(\n spatialFilter,\n filters,\n filterOwner\n );\n\n if (!this._features.length) {\n // TODO: Is this the only nullable response in the Widgets API? If so,\n // can we do something more consistent?\n return null;\n }\n\n assertColumn(this._features, column);\n\n return {\n min: aggregationFunctions.min(filteredFeatures, column),\n max: aggregationFunctions.max(filteredFeatures, column),\n };\n }\n\n /****************************************************************************\n * INTERNAL\n */\n\n private _getFilteredFeatures(\n spatialFilter?: SpatialFilter,\n filters?: Record<string, Filter>,\n filterOwner?: string\n ): FeatureData[] {\n assert(spatialFilter, 'spatialFilter required for tilesets');\n this._extractTileFeatures(spatialFilter);\n return applyFilters(\n this._features,\n getApplicableFilters(filterOwner, filters || this.props.filters),\n this.props.filtersLogicalOperator || 'and'\n );\n }\n}\n\nfunction assertColumn(\n features: FeatureData[],\n ...columnArgs: string[] | string[][]\n) {\n // Due to the multiple column shape, we normalise it as an array with normalizeColumns\n const columns = Array.from(new Set(columnArgs.map(normalizeColumns).flat()));\n\n const featureKeys = Object.keys(features[0]);\n\n // For backward compatibility, '' should pass column validation. For example,\n // operation='count',operationColumn='' is accepted.\n const invalidColumns = columns.filter(\n (column) => column && !featureKeys.includes(column)\n );\n\n if (invalidColumns.length) {\n throw new InvalidColumnError(\n `Missing column(s): ${invalidColumns.join(', ')}`\n );\n }\n}\n\nfunction normalizeColumns(columns: string | string[]): string[] {\n return Array.isArray(columns)\n ? columns\n : typeof columns === 'string'\n ? [columns]\n : [];\n}\n","import {WidgetTilesetSourceImpl} from '../widget-sources/widget-tileset-source-impl.js';\nimport {type WidgetTilesetSourceProps} from '../widget-sources/widget-tileset-source.js';\nimport {Method} from './constants.js';\nimport type {WorkerRequest, WorkerResponse} from './types.js';\n\n/*\n * Web Worker, compiled as a separate `@carto/api-client/worker` entrypoint.\n *\n * Workers are scoped to the lifecycle of a single WidgetTilesetSource instance,\n * representing and executing calculations on a single datasource.\n */\n\nlet source: WidgetTilesetSourceImpl;\n\naddEventListener('message', (e) => {\n const {method, params, requestId} = e.data as WorkerRequest;\n\n if (method === Method.INIT) {\n source = new WidgetTilesetSourceImpl({\n ...(params[0] as WidgetTilesetSourceProps),\n widgetWorker: false,\n });\n return;\n }\n\n if (!source) {\n const error = `Cannot execute \"${method}\" on uninitialized source.`;\n postMessage({ok: false, error, requestId} as WorkerResponse);\n return;\n }\n\n // @ts-expect-error No type-checking dynamic method name.\n Promise.resolve(source[method](...params))\n .then((result) => {\n postMessage({ok: true, result, requestId} as WorkerResponse);\n })\n .catch((error) => {\n postMessage({ok: false, error, requestId} as WorkerResponse);\n });\n});\n"],"mappings":"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BAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IAAO;AAAMA,kBAAE,IAAD,IA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","names":["v","FilterType","source","stringRegExp","feature","u3","u","bc","ca","ab","u","abt","bct","cat","_8","_16","fin","fin2","ab","bc","_8","_8b","_16","_48","fin","polygon","u2","point","polygon","bbox","compare","featureId","ringId","eventId","intersection","sweeplineIntersections","intersection","featureId","bbox","lineString","polygon","feature","bbox","isPointOnLineSegment","epsilon","isLineOnLine","isLineInPoly","isPolyInPoly","point","compareCoords","lineString","polygon","BigNumber","v","sum","compare","format","min","max","compare","compare","v","u","set","node","v","eps","bbox","point","Segment","pt","nextPt","SplayTreeSet","evt","BigNumber","intersection","intersection","assert","DEGREES_TO_RADIANS","RADIANS_TO_DEGREES","assert","DEGREES_TO_RADIANS","RADIANS_TO_DEGREES","DEGREES_TO_RADIANS","bbox","multiLineString","lineString","polygon","multiPolygon","TRANSFORM_FN","transformPoint","transformMultiPoint","transformLineString","transformMultiLineString","transformPolygon","transformMultiPolygon","bbox","getPoints","multiLineString","lineString","polygon","multiPolygon","tiles","bbox","featureId","bbox","tiles","min","max","sin","B","S","tileToCell","tile","z","Error","BigInt","x","y","i","s","S","b","B","quadbin","cellToTile","mode","modeDep","q","Number","getResolution","cellToChildren","quadbin","resolution","getResolution","Error","zoomLevelMask","blockRange","sqrtBlockRange","blockShift","childBase","children","blockRow","blockColumn","push","geometryToCells","geometry","zoom","Number","tiles","min_zoom","max_zoom","map","x","y","z","tileToCell","bbox","intersect","feature","libh3","Module","moduleOverrides","key","hasOwnProperty","arguments_","thisProgram","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","ENVIRONMENT_HAS_NODE","ENVIRONMENT_IS_SHELL","window","importScripts","process","versions","node","scriptDirectory","locateFile","path","read_","readAsync","readBinary","__dirname","nodeFS","nodePath","shell_read","filename","binary","ret","tryParseAsDataURI","require","toString","buffer","Uint8Array","assert","length","replace","slice","read","f","data","intArrayToString","readbuffer","scriptArgs","arguments","print","console","log","warn","error","printErr","self","location","href","document","currentScript","src","indexOf","substr","lastIndexOf","url","xhr","XMLHttpRequest","open","send","responseText","err","responseType","response","onload","onerror","xhr_onload","status","out","bind","tempRet0","setTempRet0","value","getTempRet0","GLOBAL_BASE","setValue","ptr","type","noSafe","charAt","HEAP8","HEAP16","HEAP32","tempI64","tempDouble","Math_abs","Math_min","Math_floor","Math_ceil","HEAPF32","HEAPF64","abort","getValue","ABORT","condition","text","getCFunc","ident","func","ccall","returnType","argTypes","args","opts","toC","str","undefined","len","stackAlloc","stringToUTF8","arr","writeArrayToMemory","convertReturnValue","UTF8ToString","Boolean","cArgs","stack","i","converter","stackSave","apply","stackRestore","cwrap","numericArgs","every","numericRet","UTF8Decoder","TextDecoder","UTF8ArrayToString","u8Array","idx","maxBytesToRead","endIdx","endPtr","subarray","decode","u0","String","fromCharCode","u1","u2","ch","HEAPU8","stringToUTF8Array","outU8Array","outIdx","maxBytesToWrite","startIdx","u","charCodeAt","outPtr","UTF16Decoder","array","set","alignUp","x","multiple","HEAPU16","HEAPU32","updateGlobalBufferAndViews","buf","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","DYNAMIC_BASE","DYNAMICTOP_PTR","INITIAL_TOTAL_MEMORY","ArrayBuffer","byteLength","callRuntimeCallbacks","callbacks","callback","shift","arg","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","preRun","addOnPreRun","initRuntime","preMain","postRun","addOnPostRun","cb","unshift","Math","abs","ceil","floor","min","runDependencies","runDependencyWatcher","dependenciesFulfilled","addRunDependency","id","removeRunDependency","clearInterval","memoryInitializer","dataURIPrefix","isDataURI","prototype","startsWith","tempDoublePtr","demangle","demangleAll","regex","y","jsStackTrace","Error","e","stackTrace","js","___assert_fail","line","_emscripten_get_heap_size","_emscripten_memcpy_big","dest","num","___setErrNo","abortOnCannotGrowMemory","requestedSize","emscripten_realloc_buffer","size","newBuffer","_emscripten_replace_memory","_emscripten_resize_heap","oldSize","PAGE_MULTIPLE","LIMIT","MIN_TOTAL_MEMORY","newSize","max","replacement","chr","push","join","decodeBase64","atob","input","keyStr","output","chr1","chr2","chr3","enc1","enc2","enc3","enc4","intArrayFromBase64","s","Buffer","from","_","byteOffset","decoded","bytes","asmGlobalArg","asmLibraryArg","asm","global","env","a","b","c","d","o","g","p","q","r","sqrt","pow","t","cos","sin","v","tan","w","acos","asin","atan","z","atan2","A","B","imul","C","D","E","clz32","G","H","I","J","K","L","M","h","N","T","W","X","Y","Z","$","ic","rd","ld","aa","ba","j","k","ca","Bd","da","kd","jd","l","m","n","xb","ea","td","sd","Sa","vd","Fb","Lb","wd","Hb","ma","sa","Jb","Gb","na","fa","ga","ha","Ec","za","ia","F","Aa","md","Mb","ja","Fc","Pb","Gc","ka","_c","Qb","dd","cd","bd","$c","la","ad","qc","rc","ed","tc","sc","oa","pa","qa","ra","ta","ua","va","wa","xa","ya","Ub","ac","xd","yd","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","hd","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Ta","Ua","Va","Wa","Xa","Ya","Za","_a","$a","vb","ab","bb","db","ub","eb","fb","gb","Uc","Ob","qb","mb","hb","ib","jb","Zb","cc","Tc","Sc","kb","Pc","dc","lb","nb","ob","Qc","pb","rb","Rc","sb","tb","wb","Cc","pd","yb","Xb","Yb","zb","Ab","Bb","Ad","Cb","Db","Eb","Ib","Kb","Nb","Rb","Sb","Tb","Vb","Wb","_b","$b","bc","ec","fc","gc","hc","jc","kc","lc","mc","nc","oc","pc","uc","vc","wc","xc","yc","zc","Ac","Bc","zd","ud","Dc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Vc","Wc","Xc","Yc","Zc","fd","gd","Cd","Dd","nd","od","qd","___divdi3","___muldi3","___remdi3","___uremdi3","_areNeighborCells","_bitshift64Ashr","_bitshift64Lshr","_bitshift64Shl","_calloc","_cellAreaKm2","_cellAreaM2","_cellAreaRads2","_cellToBoundary","_cellToCenterChild","_cellToChildPos","_cellToChildren","_cellToChildrenSize","_cellToLatLng","_cellToLocalIj","_cellToParent","_cellToVertex","_cellToVertexes","_cellsToDirectedEdge","_cellsToLinkedMultiPolygon","_childPosToCell","_compactCells","_destroyLinkedMultiPolygon","_directedEdgeToBoundary","_directedEdgeToCells","_edgeLengthKm","_edgeLengthM","_edgeLengthRads","_free","_getBaseCellNumber","_getDirectedEdgeDestination","_getDirectedEdgeOrigin","_getHexagonAreaAvgKm2","_getHexagonAreaAvgM2","_getHexagonEdgeLengthAvgKm","_getHexagonEdgeLengthAvgM","_getIcosahedronFaces","_getNumCells","_getPentagons","_getRes0Cells","_getResolution","_greatCircleDistanceKm","_greatCircleDistanceM","_greatCircleDistanceRads","_gridDisk","_gridDiskDistances","_gridDistance","_gridPathCells","_gridPathCellsSize","_gridRingUnsafe","_i64Add","_i64Subtract","_isPentagon","_isResClassIII","_isValidCell","_isValidDirectedEdge","_isValidVertex","_latLngToCell","_llvm_maxnum_f64","_llvm_minnum_f64","_llvm_round_f64","_localIjToCell","_malloc","_maxFaceCount","_maxGridDiskSize","_maxPolygonToCellsSize","_memcpy","_memset","_originToDirectedEdges","_pentagonCount","_polygonToCells","_readInt64AsDoubleFromPointer","_res0CellCount","_round","_sbrk","_sizeOfCellBoundary","_sizeOfCoordIJ","_sizeOfGeoLoop","_sizeOfGeoPolygon","_sizeOfH3Index","_sizeOfLatLng","_sizeOfLinkedGeoPolygon","_uncompactCells","_uncompactCellsSize","_vertexToLatLng","establishStackSpace","applyMemoryInitializer","doBrowserLoad","memoryInitializerBytes","useRequest","request","setTimeout","addEventListener","calledRun","runCaller","run","doRun","what","pop","const","NUMBER","H3_ERROR","BOOLEAN","H3_LOWER","H3_UPPER","RESOLUTION","POINTER","E_SUCCESS","E_FAILED","E_DOMAIN","E_LATLNG_DOMAIN","E_RES_DOMAIN","E_CELL_INVALID","E_DIR_EDGE_INVALID","E_UNDIR_EDGE_INVALID","E_VERTEX_INVALID","E_PENTAGON","E_DUPLICATE_INPUT","E_NOT_NEIGHBORS","E_RES_MISMATCH","E_MEMORY_ALLOC","E_MEMORY_BOUNDS","E_OPTION_INVALID","H3_ERROR_MSGS","E_UNKNOWN_UNIT","E_ARRAY_LENGTH","E_NULL_INDEX","JS_ERROR_MESSAGES","UNKNOWN_ERROR_MSG","createError","messages","errCode","meta","hasValue","code","H3LibraryError","JSBindingError","throwIfError","H3","BINDINGS","forEach","def","BASE_16","const","SZ_INT","const","SZ_DBL","SZ_INT64","SZ_H3INDEX","H3","sizeOfH3Index","SZ_LATLNG","sizeOfLatLng","SZ_CELLBOUNDARY","sizeOfCellBoundary","SZ_GEOPOLYGON","sizeOfGeoPolygon","SZ_GEOLOOP","sizeOfGeoLoop","SZ_LINKED_GEOPOLYGON","sizeOfLinkedGeoPolygon","SZ_COORDIJ","sizeOfCoordIJ","validateRes","res","Math","floor","H3LibraryError","E_RES_DOMAIN","const","MAX_JS_ARRAY_LENGTH","Math","pow","validateArrayLength","length","JSBindingError","E_ARRAY_LENGTH","INVALID_HEXIDECIMAL_CHAR","h3IndexToSplitLong","h3Index","Array","isArray","Number","isInteger","test","upper","parseInt","substring","BASE_16","lower","hexFrom32Bit","num","toString","tempStr","zeroPad","topNum","splitLongToH3Index","fullLen","numStr","numZeroes","outStr","i","UPPER_BIT_DIVISOR","polygonArrayToGeoLoop","polygonArray","geoLoop","isGeoJson","numVerts","length","geoCoordArray","C","_calloc","SZ_LATLNG","latIndex","lngIndex","i","HEAPF64","set","map","degsToRads","SZ_DBL","HEAPU32","SZ_INT","coordinatesToGeoPolygon","coordinates","numHoles","geoPolygon","SZ_GEOPOLYGON","geoLoopOffset","numHolesOffset","SZ_GEOLOOP","holesOffset","holes","setValue","destroyGeoPolygon","geoLoopArrayOffset","_free","getValue","readH3IndexFromPointer","cAddress","offset","lower","SZ_H3INDEX","upper","splitLongToH3Index","readInt64AsDoubleFromPointer","cAddress","H3","readArrayOfH3Indexes","cAddress","maxCount","out","i","h3Index","readH3IndexFromPointer","push","getResolution","h3Index","h3IndexToSplitLong","lower","upper","H3","isValidCell","polygonToCells","coordinates","res","isGeoJson","validateRes","Boolean","length","polygon","geoPolygon","coordinatesToGeoPolygon","countPtr","C","_malloc","SZ_INT64","throwIfError","H3","maxPolygonToCellsSize","count","validateArrayLength","readInt64AsDoubleFromPointer","hexagons","_calloc","SZ_H3INDEX","readArrayOfH3Indexes","_free","destroyGeoPolygon","degsToRads","deg","Math","PI","tiles","getResolution","tiles","tiles","sum","feature","operation","v","min","max","operation","operation","operation","feature","feature","_GeojsonEquality","_a","_b","isObject","equals","isPointOnLineSegment","point","precision","FILTER_TYPES","tiles","operation"]}
|