{"version":3,"file":"index.min.cjs","sources":["../src/math.ts","../src/angle.ts","../node_modules/tslib/tslib.es6.js","../src/min-max-finder.ts","../src/spherical-position.ts","../src/spherical-position-3d.ts","../src/zero-finder.ts"],"sourcesContent":["const debug = false;\n\nexport interface Point {\n  x: number;\n  y: number;\n}\n\nexport interface Point3D {\n  x: number;\n  y: number;\n  z: number;\n}\n\nexport interface Rectangle {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n}\n\nexport const abs = Math.abs;\n\nexport const acos = Math.acos;\n\nexport const acosh = Math.acosh;\n\nexport function acos_deg(x: number): number {\n  return Math.acos(x) / Math.PI * 180;\n}\n\nexport function acot(x: number): number {\n  return Math.PI / 2 - Math.atan(x);\n}\n\nexport function acot2(y: number, x: number): number {\n  return Math.PI / 2 - Math.atan2(y, x);\n}\n\nexport function acot_deg(x: number): number {\n  return 180 - Math.atan(x) / Math.PI * 180;\n}\n\nexport function acot2_deg(a: number, b: number): number {\n  return 180 - Math.atan2(a, b) / Math.PI * 180;\n}\n\nexport const asin = Math.asin;\n\nexport const asinh = Math.asinh;\n\nexport function asin_deg(x: number): number {\n  return Math.asin(x) / Math.PI * 180;\n}\n\nexport const atan = Math.atan;\n\nexport const atan2 = Math.atan2;\n\nexport const atanh = Math.atanh;\n\nexport function atan_deg(x: number): number {\n  return Math.atan(x) / Math.PI * 180;\n}\n\nexport function atan2_deg(a: number, b: number): number {\n  return Math.atan2(a, b) / Math.PI * 180;\n}\n\nexport const cbrt = Math.cbrt;\n\nexport function ceil(x: number, multiple = 1): number {\n  if (multiple === 1)\n    return Math.ceil(x);\n\n  return -(-x - mod(-x, multiple));\n}\n\nexport const clz32 = Math.clz32;\n\nexport const cos = Math.cos;\n\nexport const cosh = Math.cosh;\n\nexport function cos_deg(x: number): number {\n  return Math.cos(x / 180 * Math.PI);\n}\n\n/**\n * Integer division with \"truncation toward zero\".\n */\nexport function div_tt0(x: number, y: number): number {\n  const d = x / y;\n\n  if (d >= 0)\n    return Math.floor(d);\n  else\n    return Math.ceil(d);\n}\n\n/**\n * Integer division, always rounding down to the nearest integer regardless of sign of the result.\n */\nexport function div_rd(x: number, y: number): number {\n  return Math.floor(x / y);\n}\n\nexport const E = Math.E;\n\nexport const exp = Math.exp;\n\nexport const expm1 = Math.expm1;\n\nexport function floor(x: number, multiple = 1): number {\n  if (multiple === 1)\n    return Math.floor(x);\n\n  return x - mod(x, multiple);\n}\n\nexport const fround = Math.fround;\n\nexport const hypot = Math.hypot;\n\nexport const imul = Math.imul;\n\nexport function interpolate(x0: number, x: number, x1: number, y0: number, y1: number): number {\n  if (x0 === x1)\n    return y0;\n\n  return y0 + (x - x0) * (y1 - y0) / (x1 - x0);\n}\n\nexport function interpolateModular(x0: number, x: number, x1: number, y0: number, y1: number, modulus: number, signedResult = false): number {\n  const m2 = modulus / 2;\n\n  if (y0 < 0 || y0 >= modulus)\n    // noinspection JSSuspiciousNameCombination\n    y0 = mod(y0, modulus);\n\n  while (y1 < y0 - m2)\n    y1 += modulus;\n\n  while (y1 >= y0 + m2)\n    y1 -= modulus;\n\n  let y = interpolate(x0, x, x1, y0, y1);\n\n  if (signedResult && (y < m2 || y >= m2))\n    // noinspection JSSuspiciousNameCombination\n    y = mod2(y, modulus);\n  else if (y < 0 || y >= modulus)\n    // noinspection JSSuspiciousNameCombination\n    y = mod(y, modulus);\n\n  return y;\n}\n\nfunction interpolateOverIntRange(xx: number[], yy: number[], x: number, a: number, b: number): number {\n  let y = 0;\n\n  for (let i = a; i <= b; ++i) {\n    let c = 1;\n\n    for (let j = a; j <= b; ++j) {\n      if (j !== i)\n        c *= (x - xx[j]) / (xx[i] - xx[j]);\n    }\n\n    y += c * yy[i];\n  }\n\n  return y;\n}\n\nfunction interpolateAux(xx: number[], yy: number[], x: number, maxSpan: number, xc: number): number {\n  const n = Math.min(xx.length, yy.length);\n  let a = -1;\n  let b = n - 1;\n\n  for (let i = 0; i < n; ++i) {\n    const xi = xx[i];\n\n    if (a < 0 && xi >= xc - maxSpan)\n      a = i;\n\n    if (xi >= xc + maxSpan) {\n      b = i;\n      break;\n    }\n  }\n\n  return interpolateOverIntRange(xx, yy, x, Math.max(a, 0), b);\n}\n\n// Note: To use maxSpan (by specifying a positive value) array data must be pre-sorted\n// by ascending x value.\n//\nexport function interpolateTabular(xx: number[], yy: number[], x: number, maxSpan = 0): number {\n  const n = Math.min(xx.length, yy.length);\n\n  if (maxSpan <= 0)\n    return interpolateOverIntRange(xx, yy, x, 0, n - 1);\n\n  // To avoid sudden jumps in the return value of this function as we shift\n  // from one range of table values to another, we'll construct two ranges\n  // based on maxSpan -- one for the tabular xx value just below x, another\n  // for the xx value just above x. An interpolation will be performed over\n  // both ranges, then a weighted average of the two interpolations, based\n  // on the relative position of x between the two bounding xx values, will\n  // be returned.\n\n  let ca = -1;\n  let cb = -1;\n\n  for (let i = 0; i < n; ++i) {\n    const xi = xx[i];\n\n    if (xi === x)\n      return yy[i];\n\n    if (xi < x)\n      ca = i;\n    else if (xi > x) {\n      cb = i;\n      break;\n    }\n  }\n\n  if (ca < 0)\n    return yy[0];\n  else if (cb < 0)\n    return yy[n - 1];\n\n  const xa = xx[ca];\n  const xb = xx[cb];\n  const weight = (x - xa) / (xb - xa);\n  const ya = interpolateAux(xx, yy, x, maxSpan, xa);\n  const yb = interpolateAux(xx, yy, x, maxSpan, xb);\n\n  return ya * (1 - weight) + yb * weight;\n}\n\nexport function intersects(r1: Rectangle, r2: Rectangle): boolean {\n  return (r1.x < r2.x + r2.w && r1.x + r1.w > r2.x &&\n          r1.y < r2.y + r2.h && r1.y + r1.h > r2.y);\n}\n\nexport function irandom(maxValue: number): number;\nexport function irandom(lowest: number, highest: number): number;\nexport function irandom(lowestOrMax?: number, highest?: number): number {\n  if (arguments.length === 1)\n    return 1 + Math.floor(Math.random() * lowestOrMax);\n\n  return lowestOrMax + Math.floor(Math.random() * (highest - lowestOrMax + 1));\n}\n\nfunction _limitNeg1to1(x: number, tolerance = 0.01): number {\n  if (x < -1 - tolerance) {\n    /* istanbul ignore next */\n    if (debug) {\n      console.debug('Value out of range: ' + x + ' < -1.0');\n      console.trace();\n    }\n\n    return -1;\n  }\n  else if (x > 1 + tolerance) {\n    /* istanbul ignore next */\n    if (debug) {\n      console.debug('Value out of range: ' + x + ' > 1.0');\n      console.trace();\n    }\n\n    return 1;\n  }\n  else if (x < -1)\n    return -1;\n  else if (x > 1)\n    return 1;\n  else\n    return x;\n}\n\nexport const limitNeg1to1: (x: number) => number = _limitNeg1to1;\n\nexport const LN10 = Math.LN10;\n\nexport const LN2 = Math.LN2;\n\nexport const LOG10E = Math.LOG10E;\n\nexport const LOG2E = Math.LOG2E;\n\nexport const HALF_PI = Math.PI / 2;\n\nexport const log = Math.log;\n\nexport const log10 = Math.log10;\n\nexport const log1p = Math.log1p;\n\nexport const log2 = Math.log2;\n\nexport const max = Math.max;\n\nexport const min = Math.min;\n\n/**\n * A modulo operation complementary to div_rd(), differing from % in how the relationship between\n * the signs of the arguments and the result is handled.\n */\nexport function mod(x: number, y: number): number {\n  const m = x % y;\n\n  if ((m < 0 && y > 0) || (m > 0 && y < 0)) {\n    return y + m;\n  }\n\n  return m;\n}\n\n/**\n * For use with values such as angles, this modulo function splits the range of the modulus\n * between negative and positive numbers, [-y/2, y/2), e.g., for a y of 360, the result ranges\n * from -180 up to (but not including) 180. This function can return non-integer values.\n */\nexport function mod2(x: number, y: number): number {\n  let result = x - Math.floor(x / y) * y;\n\n  if (result >= y / 2)\n    result -= y;\n\n  return result;\n}\n\nexport const PI = Math.PI;\n\nexport const pow = Math.pow;\n\nexport function random(): number;\nexport function random(maxValue: number): number;\nexport function random(lowest: number, highest: number): number;\nexport function random(lowestOrMax?: number, highest?: number): number {\n  switch (arguments.length) {\n    case 1: return Math.random() * lowestOrMax;\n    case 2: return lowestOrMax + Math.random() * (highest - lowestOrMax);\n  }\n\n  return Math.random();\n}\n\nexport function round(x: number, multiple = 1): number {\n  if (multiple === 1)\n    return Math.round(x);\n\n  return x + multiple / 2 - mod(x + multiple / 2, multiple);\n}\n\nexport const sign = Math.sign;\n\nexport function signZN(x: number): number {\n  if (x > 0)\n    return 1;\n  else\n    return -1;\n}\n\nexport function signZP(x: number): number {\n  if (x < 0)\n    return -1;\n  else\n    return 1;\n}\n\nexport const sin = Math.sin;\n\nexport const sinh = Math.sinh;\n\nexport function sin_deg(x: number): number {\n  return Math.sin(x / 180 * Math.PI);\n}\n\nexport const sqrt = Math.sqrt;\n\nexport const SQRT1_2 = Math.SQRT1_2;\n\nexport const SQRT2 = Math.SQRT2;\n\nexport function squared(x: number): number {\n  return x * x;\n}\n\nexport const tan = Math.tan;\n\nexport const tanh = Math.tanh;\n\nexport function tan_deg(x: number): number {\n  return Math.tan(x / 180 * Math.PI);\n}\n\nexport function to_degree(x: number): number {\n  return x * 180 / Math.PI;\n}\n\nexport function to_radian(x: number): number {\n  return x * Math.PI / 180;\n}\n\nexport const trunc = Math.trunc;\n\nexport const TWO_PI = Math.PI * 2;\n\nexport function union(r1: Rectangle, r2: Rectangle): Rectangle {\n  const minX = min(r1.x, r2.x);\n  const minY = min(r1.y, r2.y);\n  const maxX = max(r1.x + r1.w, r2.x + r2.w);\n  const maxY = max(r1.y + r1.h, r2.y + r2.h);\n\n  return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };\n}\n","import { abs, floor, mod, mod2, pow, round } from './math';\n\nexport enum Unit { RADIANS, DEGREES, ARC_MINUTES, ARC_SECONDS, HOURS, HOUR_ANGLE_MINUTES, HOUR_ANGLE_SECONDS, ROTATIONS, GRADS }\nexport enum Mode { RANGE_LIMIT_SIGNED, RANGE_LIMIT_NONNEGATIVE, RANGE_UNLIMITED }\n\nconst PI = Math.PI;\nconst HALF_PI = PI / 2;\nconst TWO_PI = PI * 2;\n\nexport const FMT_DD = 0x01;\nexport const FMT_HH = 0x01;\nexport const FMT_DDD = 0x02;\nexport const FMT_MINS = 0x04;\nexport const FMT_SECS = 0x08;\nexport const FMT_SIGNED = 0x10;\n\nexport function convertToRadians(angle: number, unit: Unit): number {\n  switch (unit) {\n    case Unit.RADIANS:\n      return angle;\n    case Unit.DEGREES:\n      return angle / 180 * PI;\n    case Unit.ARC_MINUTES:\n      return angle / 10800 * PI;\n    case Unit.ARC_SECONDS:\n      return angle / 648000 * PI;\n    case Unit.HOURS:\n      return angle / 12 * PI;\n    case Unit.HOUR_ANGLE_MINUTES:\n      return angle / 720 * PI;\n    case Unit.HOUR_ANGLE_SECONDS:\n      return angle / 43200 * PI;\n    case Unit.ROTATIONS:\n      return angle * TWO_PI;\n    case Unit.GRADS:\n      return angle / 200 * PI;\n  }\n\n  return NaN;\n}\n\nexport function convertFromRadians(angle: number, unit: Unit): number {\n  switch (unit) {\n    case Unit.RADIANS:\n      return angle;\n    case Unit.DEGREES:\n      return angle * 180 / PI;\n    case Unit.ARC_MINUTES:\n      return angle * 10800 / PI;\n    case Unit.ARC_SECONDS:\n      return angle * 648000 / PI;\n    case Unit.HOURS:\n      return angle * 12 / PI;\n    case Unit.HOUR_ANGLE_MINUTES:\n      return angle * 720 / PI;\n    case Unit.HOUR_ANGLE_SECONDS:\n      return angle * 43200 / PI;\n    case Unit.ROTATIONS:\n      return angle / TWO_PI;\n    case Unit.GRADS:\n      return angle * 200 / PI;\n  }\n\n  return NaN;\n}\n\nexport class Angle {\n  static ZERO = new Angle(0);\n  static RIGHT = new Angle(HALF_PI);\n  static STRAIGHT = new Angle(PI);\n\n  private readonly angle: number; // In radians\n  private cached_sin = 2;\n  private cached_cos = 2;\n  private cached_tan = 0;\n\n  static asin(x: number): Angle {\n    return new Angle(Math.asin(x));\n  }\n\n  static asin_nonneg(x: number): Angle {\n    return new Angle(Math.asin(x), Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  static acos(x: number): Angle {\n    return new Angle(Math.acos(x));\n  }\n\n  static atan(x: number): Angle {\n    return new Angle(Math.atan(x));\n  }\n\n  static atan_nonneg(x: number): Angle {\n    return new Angle(Math.atan(x), Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  static atan2(y: number, x: number): Angle {\n    return new Angle(Math.atan2(y, x));\n  }\n\n  static atan2_nonneg(y: number, x: number): Angle {\n    return new Angle(Math.atan2(y, x), Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  static parse(s: string, throwException = false): Angle {\n    const result = Angle.#parseAux(s);\n\n    if (result == null && throwException)\n      throw new Error('Invalid angle: ' + s);\n    else\n      return result;\n  }\n\n  static #parseAux(s: string): Angle {\n    const parts = (s || '').split(/([-+hms'\"’”°:new])/i);\n    let sign = 1;\n    let unit = Unit.DEGREES;\n\n    if (!parts[0] && (parts[1] === '+' || parts[1] === '-')) {\n      if (parts[1] === '-')\n        sign = -1;\n\n      parts.splice(0, 2);\n    }\n\n    const nums = parts.filter((p, i) => i % 2 === 0).map(p => parseFloat(p.trim()));\n    const delimiters = parts.filter((p, i) => i % 2 === 1).map(p => p.trim().toLowerCase());\n\n    if (nums.length > 1 && isNaN(nums.at(-1)))\n      nums.splice(nums.length - 1, 1);\n\n    if (nums.findIndex(n => isNaN(n)) >= 0)\n      return null;\n\n    if (delimiters.find(d => d === 'h' || d === 'm' || d === ':'))\n      unit = Unit.HOURS;\n    else if (delimiters.at(-1) === 's')\n      sign *= -1;\n\n    return new Angle(sign * (nums[0] + (nums[1] || 0) / 60 + (nums[2] || 0) / 3600), unit, Mode.RANGE_UNLIMITED);\n  }\n\n  constructor(angle = 0, unit?: Unit, mode = Mode.RANGE_LIMIT_SIGNED) {\n    if (unit === undefined)\n      unit = Unit.RADIANS;\n\n    if (angle === 0 && Angle.ZERO)\n      return Angle.ZERO;\n\n    if (mode === Mode.RANGE_LIMIT_SIGNED)\n      this.angle = mod2(convertToRadians(angle, unit), TWO_PI);\n    else if (mode === Mode.RANGE_LIMIT_NONNEGATIVE)\n      this.angle = mod(convertToRadians(angle, unit), TWO_PI);\n    else\n      this.angle = convertToRadians(angle, unit);\n\n    if (Angle.RIGHT && this.angle === Angle.RIGHT.angle)\n      return Angle.RIGHT;\n    else if (Angle.STRAIGHT && this.angle === Angle.STRAIGHT.angle)\n      return Angle.STRAIGHT;\n  }\n\n  get radians(): number {\n    return this.angle;\n  }\n\n  get degrees(): number {\n    return convertFromRadians(this.angle, Unit.DEGREES);\n  }\n\n  get arcMinutes(): number {\n    return convertFromRadians(this.angle, Unit.ARC_MINUTES);\n  }\n\n  get arcSeconds(): number {\n    return convertFromRadians(this.angle, Unit.ARC_SECONDS);\n  }\n\n  get hours(): number {\n    return convertFromRadians(this.angle, Unit.HOURS);\n  }\n\n  get rotations(): number {\n    return convertFromRadians(this.angle, Unit.ROTATIONS);\n  }\n\n  get grads(): number {\n    return convertFromRadians(this.angle, Unit.GRADS);\n  }\n\n  getAngle(unit = Unit.RADIANS): number {\n    return convertFromRadians(this.angle, unit);\n  }\n\n  get sin(): number {\n    if (this.cached_sin > 1)\n      this.cached_sin = Math.sin(this.angle);\n\n    return this.cached_sin;\n  }\n\n  get cos(): number {\n    if (this.cached_cos > 1)\n      this.cached_cos = Math.cos(this.angle);\n\n    return this.cached_cos;\n  }\n\n  get tan(): number {\n    if (this.angle === 0)\n      return 0;\n    else if (this.cached_tan === 0)\n      this.cached_tan = Math.tan(this.angle);\n\n    return this.cached_tan;\n  }\n\n  add(angle2: Angle, mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(this.angle + angle2.angle, Unit.RADIANS, mode);\n  }\n\n  add_nonneg(angle2: Angle): Angle {\n    return new Angle(this.angle + angle2.angle, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  subtract(angle2: Angle, mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(this.angle - angle2.angle, Unit.RADIANS, mode);\n  }\n\n  subtract_nonneg(angle2: Angle): Angle {\n    return new Angle(this.angle - angle2.angle, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  complement(mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(HALF_PI - this.angle, Unit.RADIANS, mode);\n  }\n\n  complement_nonneg(): Angle {\n    return new Angle(HALF_PI - this.angle, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  supplement(mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(PI - this.angle, Unit.RADIANS, mode);\n  }\n\n  supplement_nonneg(): Angle {\n    return new Angle(PI - this.angle, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  opposite(mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(this.angle + PI, Unit.RADIANS, mode);\n  }\n\n  opposite_nonneg(): Angle {\n    return new Angle(this.angle + PI, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  negate(mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(-this.angle, Unit.RADIANS, mode);\n  }\n\n  // Sounds contradictory, doesn't it? Return whatever angle is 180 degrees away, as a non-negative value.\n  negate_nonneg(): Angle {\n    return new Angle(-this.angle, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  multiply(x: number, mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(this.angle * x, Unit.RADIANS, mode);\n  }\n\n  multiply_nonneg(x: number): Angle {\n    return new Angle(this.angle * x, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  divide(x: number, mode = Mode.RANGE_LIMIT_SIGNED): Angle {\n    return new Angle(this.angle / x, Unit.RADIANS, mode);\n  }\n\n  divide_nonneg(x: number): Angle {\n    return new Angle(this.angle / x, Unit.RADIANS, Mode.RANGE_LIMIT_NONNEGATIVE);\n  }\n\n  toString(format?: number, precision?: number): string {\n    return Angle.toStringAux(this.degrees, '°', '\\'', '\"', format, precision);\n  }\n\n  toSuffixedString(positiveSuffix: string, negativeSuffix: string,\n                   format?: number, precision?: number): string {\n    format = (format || 0) & ~FMT_SIGNED;\n\n    return Angle.toStringAux(abs(this.degrees), '°', '\\'', '\"', format, precision) +\n           (this.degrees < 0 ? negativeSuffix : positiveSuffix);\n  }\n\n  toHourString(format?: number, precision?: number): string {\n    format = (format || 0) & ~FMT_DDD;\n\n    return Angle.toStringAux(this.hours, 'h', 'm', 's', format, precision);\n  }\n\n  toTimeString(format?: number, precision?: number): string {\n    format = (format || 0) & ~FMT_DDD;\n\n    if ((format & FMT_SECS) === 0)\n      format |= FMT_MINS;\n\n    return Angle.toStringAux(this.hours, ':', format === FMT_MINS ? '' : ':', '', format, precision, 2);\n  }\n\n  private static toStringAux(units: number, delim1: string, delim2: string, delim3: string,\n                             format: number, precision: number, unitsPadding = 0): string {\n    format = (format || 0);\n\n    const sxg = ((format & (FMT_MINS | FMT_SECS)) !== 0);\n\n    if ((format & FMT_DD) !== 0)\n      unitsPadding = 2;\n    else if ((format & FMT_DDD) !== 0)\n      unitsPadding = 3;\n\n    if (precision == null) {\n      if (format != null && sxg)\n        precision = 0;\n      else\n        precision = 3;\n    }\n\n    const sign = Math.sign(units);\n    units = abs(units);\n    let result: string;\n\n    if (sxg) {\n      const pwr = pow(10, precision);\n\n      if ((format & FMT_MINS) !== 0) {\n        let mins = round(units * 60 * pwr) / pwr;\n\n        units = floor(mins / 60);\n        mins = mins % 60;\n        result = units + delim1 + (mins < 10 ? '0' : '') + mins.toFixed(precision) + delim2;\n      }\n      else {\n        let secs = round(units * 3600 * pwr) / pwr;\n        let mins = floor(secs / 60);\n\n        secs = secs % 60;\n        units = floor(mins / 60);\n        mins = mins % 60;\n\n        result = units + delim1 + (mins < 10 ? '0' : '') + mins + delim2\n                + (secs < 10 ? '0' : '') + secs.toFixed(precision) + delim3;\n      }\n    }\n    else {\n      result = units.toFixed(precision) + delim1;\n    }\n\n    if (unitsPadding) {\n      const match = /^(\\d+)\\D/.exec(result);\n      const padding = unitsPadding - match[1].length;\n\n      for (let i = 0; i < padding; ++i)\n        result = '0' + result;\n    }\n\n    if (sign < 0)\n      result = '-' + result;\n    else if ((format & FMT_SIGNED) !== 0)\n      result = '+' + result;\n\n    return result;\n  }\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    if (typeof b !== \"function\" && b !== null)\r\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n    function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n    var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n    var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n    var _, done = false;\r\n    for (var i = decorators.length - 1; i >= 0; i--) {\r\n        var context = {};\r\n        for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n        for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n        context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n        var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n        if (kind === \"accessor\") {\r\n            if (result === void 0) continue;\r\n            if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n            if (_ = accept(result.get)) descriptor.get = _;\r\n            if (_ = accept(result.set)) descriptor.set = _;\r\n            if (_ = accept(result.init)) initializers.unshift(_);\r\n        }\r\n        else if (_ = accept(result)) {\r\n            if (kind === \"field\") initializers.unshift(_);\r\n            else descriptor[key] = _;\r\n        }\r\n    }\r\n    if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n    done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n    var useValue = arguments.length > 2;\r\n    for (var i = 0; i < initializers.length; i++) {\r\n        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n    }\r\n    return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n    return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n    if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n    return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n    return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    var desc = Object.getOwnPropertyDescriptor(m, k);\r\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n        desc = { enumerable: true, get: function() { return m[k]; } };\r\n    }\r\n    Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n        if (ar || !(i in from)) {\r\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n            ar[i] = from[i];\r\n        }\r\n    }\r\n    return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n    ownKeys = Object.getOwnPropertyNames || function (o) {\r\n        var ar = [];\r\n        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n        return ar;\r\n    };\r\n    return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n    if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n    return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n    if (value !== null && value !== void 0) {\r\n        if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n        var dispose, inner;\r\n        if (async) {\r\n            if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n            dispose = value[Symbol.asyncDispose];\r\n        }\r\n        if (dispose === void 0) {\r\n            if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n            dispose = value[Symbol.dispose];\r\n            if (async) inner = dispose;\r\n        }\r\n        if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n        env.stack.push({ value: value, dispose: dispose, async: async });\r\n    }\r\n    else if (async) {\r\n        env.stack.push({ async: true });\r\n    }\r\n    return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n    function fail(e) {\r\n        env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n        env.hasError = true;\r\n    }\r\n    var r, s = 0;\r\n    function next() {\r\n        while (r = env.stack.pop()) {\r\n            try {\r\n                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n                if (r.dispose) {\r\n                    var result = r.dispose.call(r.value);\r\n                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n                }\r\n                else s |= 1;\r\n            }\r\n            catch (e) {\r\n                fail(e);\r\n            }\r\n        }\r\n        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n        if (env.hasError) throw env.error;\r\n    }\r\n    return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n        });\r\n    }\r\n    return path;\r\n}\r\n\r\nexport default {\r\n    __extends: __extends,\r\n    __assign: __assign,\r\n    __rest: __rest,\r\n    __decorate: __decorate,\r\n    __param: __param,\r\n    __esDecorate: __esDecorate,\r\n    __runInitializers: __runInitializers,\r\n    __propKey: __propKey,\r\n    __setFunctionName: __setFunctionName,\r\n    __metadata: __metadata,\r\n    __awaiter: __awaiter,\r\n    __generator: __generator,\r\n    __createBinding: __createBinding,\r\n    __exportStar: __exportStar,\r\n    __values: __values,\r\n    __read: __read,\r\n    __spread: __spread,\r\n    __spreadArrays: __spreadArrays,\r\n    __spreadArray: __spreadArray,\r\n    __await: __await,\r\n    __asyncGenerator: __asyncGenerator,\r\n    __asyncDelegator: __asyncDelegator,\r\n    __asyncValues: __asyncValues,\r\n    __makeTemplateObject: __makeTemplateObject,\r\n    __importStar: __importStar,\r\n    __importDefault: __importDefault,\r\n    __classPrivateFieldGet: __classPrivateFieldGet,\r\n    __classPrivateFieldSet: __classPrivateFieldSet,\r\n    __classPrivateFieldIn: __classPrivateFieldIn,\r\n    __addDisposableResource: __addDisposableResource,\r\n    __disposeResources: __disposeResources,\r\n    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","// Parabolic interpolation via Brent's Method, translated from Numerical Recipes in C.\n\n/* eslint-disable @stylistic/no-multi-spaces */\n\nimport { abs } from './math';\n\nconst CGOLD = 0.381966011250105; // (3 - sqrt(5)) / 2\nconst ZEPS = 1.0E-20;\n\nexport class MinMaxFinder {\n  private _iterationCount = 0;\n  private fx: number;\n  private isMin = true;\n  private _resolved = false;\n  private _x: number;\n\n  constructor(private minMaxSeekingFunction: (x: number) => number, private tolerance: number, private maxIterations: number,\n              private xa: number, private xb: number, private xc: number) {\n  }\n\n  getXAtMinMax(): number {\n    if (this._x != null)\n      return this._x;\n\n    let a: number;\n    let b: number;\n    let d = 0;\n    let etemp: number;\n    let fu: number;\n    let fv: number;\n    let fw: number;\n    let p: number;\n    let q: number;\n    let r: number;\n    let tol1: number;\n    let tol2: number;\n    let u: number;\n    let v: number;\n    let w: number;\n    let x: number;\n    let xm: number;\n    let e = 0;\n    let sign = 1;\n\n    a = Math.min(this.xa, this.xc);\n    b = Math.max(this.xa, this.xc);\n    x = w = v = this.xb;\n    this.fx = this.minMaxSeekingFunction(x);\n\n    // Reverse the sign of the evaluated function if we're searching for a max rather than a min.\n    if (this.fx > this.minMaxSeekingFunction(this.xa)) {\n      this.isMin = false;\n      this.fx *= -1;\n      sign = -1;\n    }\n    else\n      this.isMin = true;\n\n    fw = fv = this.fx;\n    this._iterationCount = 0;\n\n    while (++this._iterationCount <= this.maxIterations) {\n      xm = 0.5 * (a + b);\n      tol1 = this.tolerance * abs(x) + ZEPS;\n      tol2 = 2 * tol1;\n\n      if (abs(x - xm) <= tol2 - 0.5 * (b - a)) {\n        this.fx *= sign;\n        this._resolved = true;\n        this._x = x;\n\n        return x;\n      }\n\n      if (abs(e) > tol1) {\n        r = (x - w) * (this.fx - fv);\n        q = (x - v) * (this.fx - fw);\n        p = (x - v) * q - (x - w) * r;\n        q = 2 * (q - r);\n\n        if (q > 0)\n          p = -p;\n\n        q = abs(q);\n        etemp = e;\n        e = d;\n\n        if (abs(p) >= abs(0.5 * q * etemp) || p <= q * (a - x) || p >= q * (b - x)) {\n          e = (x >= xm ? a - x : b - x);\n          d = CGOLD * e;\n        }\n        else {\n          d = p / q;\n          u = x + d;\n\n          /* istanbul ignore next */ // TODO: Does this condition ever come up?\n          if (u - a < tol2 || b - u < tol2)\n            d = Math.sign(xm - x) * tol1;\n        }\n      }\n      else {\n        e = (x >= xm ? a - x : b - x);\n        d = CGOLD * e;\n      }\n\n      u  = (abs(d) >= tol1 ? x + d : x + Math.sign(d) * tol1);\n      fu = sign * this.minMaxSeekingFunction(u);\n\n      if (fu <= this.fx) {\n        if (u >= x)\n          a = x;\n        else\n          b = x;\n\n        v  = w;  w  = x;       x  = u;\n        fv = fw; fw = this.fx; this.fx = fu;\n      }\n      else {\n        if (u < x)\n          a = u;\n        else\n          b = u;\n\n        if (fu <= fw || w === x) {\n          v = w;\n          w = u;\n          fv = fw;\n          fw = fu;\n        }\n        else if (fu <= fv || v === x || v === w) {\n          v = u;\n          fv = fu;\n        }\n      }\n    }\n\n    this.fx *= sign;\n    this._x = x;\n\n    return x;\n  }\n\n  get foundMaximum(): boolean {\n    if (this._x == null)\n      this.getXAtMinMax();\n\n    return !this.isMin;\n  }\n\n  get foundMinimum(): boolean {\n    if (this._x == null)\n      this.getXAtMinMax();\n\n    return this.isMin;\n  }\n\n  get lastY(): number {\n    if (this._x == null)\n      this.getXAtMinMax();\n\n    return this.fx;\n  }\n\n  get iterationCount(): number {\n    if (this._x == null)\n      this.getXAtMinMax();\n\n    return this._iterationCount;\n  }\n\n  get resolved(): boolean {\n    if (this._x == null)\n      this.getXAtMinMax();\n\n    return this._resolved && isFinite(this.fx) && !isNaN(this.fx);\n  }\n}\n","import { Angle, Mode, Unit } from './angle';\nimport { abs, acos, limitNeg1to1, mod2, TWO_PI } from './math';\n\nexport class SphericalPosition {\n  protected _longitude: Angle;\n  protected _latitude: Angle;\n\n  constructor(longitude: Angle | number = 0, latitude: Angle | number = 0,\n              longUnit = Unit.RADIANS, latUnit?: Unit) {\n    if (latUnit == null)\n      latUnit = longUnit;\n\n    if (typeof longitude === 'number')\n      this._longitude = new Angle(longitude, longUnit, Mode.RANGE_LIMIT_NONNEGATIVE);\n    else\n      this._longitude = longitude;\n\n    if (typeof latitude === 'number')\n      this._latitude = new Angle(latitude, latUnit);\n    else\n      this._latitude = latitude;\n  }\n\n  get longitude(): Angle {\n    return this._longitude;\n  }\n\n  get rightAscension(): Angle {\n    return this._longitude;\n  }\n\n  get altitude(): Angle {\n    return this._latitude;\n  }\n\n  get azimuth(): Angle {\n    return this._longitude;\n  }\n\n  get latitude(): Angle {\n    return this._latitude;\n  }\n\n  get declination(): Angle {\n    return this._latitude;\n  }\n\n  distanceFrom(p: SphericalPosition): Angle {\n    // Tiny rounding errors which can make the argument of acos very slightly larger than 1.0\n    // or very slight smaller than -1.0 are enough to blow up the acos function and get you a\n    // NaN for your trouble.\n    //\n    let d = acos(limitNeg1to1(this._latitude.sin * p._latitude.sin +\n                              this._latitude.cos * p._latitude.cos *\n                              this._longitude.subtract(p._longitude).cos));\n\n    d = abs(mod2(d, TWO_PI));\n\n    return new Angle(d);\n  }\n\n  toString(): string {\n    return `lon: ${this.longitude}, lat: ${this.latitude}`;\n  }\n}\n","import { SphericalPosition } from './spherical-position';\nimport { Angle, Unit } from './angle';\nimport { Point3D } from './math';\n\nexport class SphericalPosition3D extends SphericalPosition {\n  static convertRectangular(xOrPoint: number | Point3D, y?: number, z?: number): SphericalPosition3D {\n    let x: number;\n\n    if (typeof xOrPoint === 'number') {\n      x = xOrPoint;\n\n      if (y === undefined || z === undefined)\n        throw new Error('Invalid arguments');\n    }\n    else {\n      x = xOrPoint.x;\n      y = xOrPoint.y;\n      z = xOrPoint.z;\n    }\n\n    return new SphericalPosition3D(Angle.atan2_nonneg(y, x),\n                                   Angle.atan2(z, Math.sqrt(x * x + y * y)),\n                                   Math.sqrt(x * x + y * y + z * z));\n  }\n\n  static from2D(pos: SphericalPosition, radius: number): SphericalPosition3D {\n    return new SphericalPosition3D(pos.longitude, pos.latitude, radius);\n  }\n\n  constructor(longitude?: Angle | number, latitude?: Angle | number, protected _radius = 0, longUnit?: Unit, latUnit?: Unit) {\n    super(longitude, latitude, longUnit, latUnit);\n  }\n\n  get radius(): number {\n    return this._radius;\n  }\n\n  private _xyz: Point3D;\n\n  get xyz(): Point3D {\n    if (!this._xyz)\n      this._xyz = Object.freeze({\n        x: this._radius * this._latitude.cos * this._longitude.cos,\n        y: this._radius * this._latitude.cos * this._longitude.sin,\n        z: this._radius * this._latitude.sin\n      });\n\n    return this._xyz;\n  }\n\n  translate(newOrigin: SphericalPosition3D): SphericalPosition3D {\n    const L0 = newOrigin.longitude;\n    const B0 = newOrigin.latitude;\n    const R0 = newOrigin.radius;\n\n    const L = this.longitude;\n    const B = this.latitude;\n    const R = this.radius;\n\n    const x = R * B.cos * L.cos - R0 * B0.cos * L0.cos;\n    const y = R * B.cos * L.sin - R0 * B0.cos * L0.sin;\n    const z = R * B.sin - R0 * B0.sin;\n\n    return SphericalPosition3D.convertRectangular(x, y, z);\n  }\n\n  toString(): string {\n    return super.toString() + ', rad: ' + this.radius.toFixed(5);\n  }\n}\n","// noinspection JSSuspiciousNameCombination\n\nconst INTERVALS = 10;\n\nexport class ZeroFinder {\n  private _iterationCount = 0;\n  private x2: number;\n  private y: number;\n  private y2: number;\n  private _resolved = false;\n  private _x: number;\n  private xForY: number;\n  private maxError = 0;\n\n  constructor(zeroSeekingFunction: (x: number) => number, tolerance: number, maxIterations: number,\n    x1: number, x2: number, maxError?: number);\n\n  constructor(zeroSeekingFunction: (x: number) => number, tolerance: number, maxIterations: number,\n    x1: number, y1: number, x2: number, y2: number, maxError?: number);\n\n  constructor(private zeroSeekingFunction: (x: number) => number, private tolerance: number, private maxIterations: number,\n              private x1: number, private y1: number, x2?: number, y2?: number, maxError?: number) {\n    if (y2 == null) {\n      this.x2 = y1;\n      this.y1 = zeroSeekingFunction(x1);\n      this.y2 = zeroSeekingFunction(y1);\n\n      if (x2 != null)\n        this.maxError = x2;\n    }\n    else {\n      this.x2 = x2;\n      this.y2 = y2;\n      this.maxError = maxError || 0;\n    }\n  }\n\n  getXAtZero(): number {\n    if (this._x != null)\n      return this._x;\n\n    let x;\n    let lastY: number | undefined = 0;\n    let maxIter = this.maxIterations / 2;\n    let tryIntervals = true;\n    let stayedTheSame = 0;\n\n    this._iterationCount = 1;\n\n    outerLoop:\n    while (!this._resolved) {\n      --this._iterationCount;\n\n      while (++this._iterationCount <= maxIter && !this._resolved) {\n        const slope = (this.y2 - this.y1) / (this.x2 - this.x1);\n\n        x = slope ? this.x1 - this.y1 / slope : (this.x1 + this.x2) / 2;\n        this.y = this.zeroSeekingFunction(x);\n\n        if (this.y === lastY) {\n          if (++stayedTheSame >= 3) {\n            tryIntervals = false;\n            break;\n          }\n        }\n        else\n          stayedTheSame = 0;\n\n        lastY = this.y;\n\n        if (Math.abs(this.y) <= this.tolerance) {\n          this._resolved = Math.abs(this.x2 - this.x1) <= this.tolerance;\n          this.xForY = this._x = x;\n          break;\n        }\n\n        if ((this.y1 < this.y2 && this.y < 0) || (this.y1 > this.y2 && this.y > 0)) {\n          this.x1 = x;\n          this.y1 = this.y;\n        }\n        else {\n          this.x2 = x;\n          this.y2 = this.y;\n        }\n      }\n\n      if (!this._resolved && tryIntervals) {\n        let xa = this.x1;\n        let xb = this.x2;\n\n        --this._iterationCount;\n        tryIntervals = false;\n        maxIter = this.maxIterations;\n\n        while (++this._iterationCount <= maxIter) {\n          const step = (xb - xa) / INTERVALS;\n          let i = 1;\n          let bestX = x = xa;\n          let y = this.zeroSeekingFunction(x);\n          let bestY = Math.abs(y);\n          let sign = Math.sign(y);\n\n          do {\n            if (Math.abs(y) <= this.tolerance && step <= this.tolerance) {\n              this._resolved = true;\n              this.y = y;\n              this.xForY = x;\n              break outerLoop;\n            }\n\n            x += step;\n            y = this.zeroSeekingFunction(x);\n\n            if (Math.abs(y) < bestY) {\n              bestX = x;\n              bestY = Math.abs(y);\n            }\n\n            const sign2 = Math.sign(y);\n\n            if (sign2 !== sign) {\n              xa = x - step;\n              xb = x;\n              x = x - step / 2;\n              break;\n            }\n          } while (++i <= INTERVALS);\n\n          if (i > INTERVALS) {\n            if (this.maxError && bestY < this.maxError) {\n              xa = bestX - step;\n              xb = bestY + step;\n\n              if (maxIter === this.maxIterations)\n                maxIter = Math.min(this._iterationCount + 2, this.maxIterations);\n            }\n            else {\n              maxIter = this._iterationCount;\n              break;\n            }\n          }\n        }\n\n        if (this.xForY !== x)\n          this.y = this.zeroSeekingFunction(x); // A last approximation in case iterations are exhausted\n      }\n      else\n        break;\n    }\n\n    if (this.maxError && Math.abs(this.y) > this.maxError) {\n      x = NaN;\n      this.y = NaN;\n    }\n\n    this._x = x;\n\n    return x;\n  }\n\n  get lastY(): number {\n    if (this._x == null)\n      this.getXAtZero();\n\n    return this.y;\n  }\n\n  get iterationCount(): number {\n    if (this._x == null)\n      this.getXAtZero();\n\n    return this._iterationCount;\n  }\n\n  get resolved(): boolean {\n    if (this._x == null)\n      this.getXAtZero();\n\n    return this._resolved && isFinite(this.y) && !isNaN(this.y);\n  }\n}\n"],"names":["abs","Math","acos","acosh","asin","asinh","atan","atan2","atanh","cbrt","clz32","cos","cosh","E","exp","expm1","floor","x","multiple","mod","fround","hypot","imul","interpolate","x0","x1","y0","y1","interpolateOverIntRange","xx","yy","a","b","y","i","c","j","interpolateAux","maxSpan","xc","n","min","length","xi","max","limitNeg1to1","tolerance","LN10","LN2","LOG10E","LOG2E","HALF_PI","PI","log","log10","log1p","log2","m","mod2","result","pow","round","sign","sin","sinh","sqrt","SQRT1_2","SQRT2","tan","tanh","trunc","TWO_PI","Unit","Mode","SuppressedError","convertToRadians","angle","unit","RADIANS","DEGREES","ARC_MINUTES","ARC_SECONDS","HOURS","HOUR_ANGLE_MINUTES","HOUR_ANGLE_SECONDS","ROTATIONS","GRADS","NaN","convertFromRadians","Angle","_a","asin_nonneg","RANGE_LIMIT_NONNEGATIVE","atan_nonneg","atan2_nonneg","parse","s","throwException","receiver","state","kind","f","TypeError","has","call","value","get","__classPrivateFieldGet","_Angle_parseAux","Error","constructor","mode","RANGE_LIMIT_SIGNED","this","cached_sin","cached_cos","cached_tan","undefined","ZERO","RIGHT","STRAIGHT","radians","degrees","arcMinutes","arcSeconds","hours","rotations","grads","getAngle","add","angle2","add_nonneg","subtract","subtract_nonneg","complement","complement_nonneg","supplement","supplement_nonneg","opposite","opposite_nonneg","negate","negate_nonneg","multiply","multiply_nonneg","divide","divide_nonneg","toString","format","precision","toStringAux","toSuffixedString","positiveSuffix","negativeSuffix","toHourString","toTimeString","units","delim1","delim2","delim3","unitsPadding","sxg","pwr","mins","toFixed","secs","padding","exec","parts","split","splice","nums","filter","p","map","parseFloat","trim","delimiters","toLowerCase","isNaN","at","findIndex","find","d","RANGE_UNLIMITED","CGOLD","SphericalPosition","longitude","latitude","longUnit","latUnit","_longitude","_latitude","rightAscension","altitude","azimuth","declination","distanceFrom","SphericalPosition3D","convertRectangular","xOrPoint","z","from2D","pos","radius","_radius","super","xyz","_xyz","Object","freeze","translate","newOrigin","L0","B0","R0","L","B","R","minMaxSeekingFunction","maxIterations","xa","xb","_iterationCount","isMin","_resolved","getXAtMinMax","_x","etemp","fu","fv","fw","q","r","tol1","tol2","u","v","w","xm","e","fx","foundMaximum","foundMinimum","lastY","iterationCount","resolved","isFinite","zeroSeekingFunction","x2","y2","maxError","getXAtZero","maxIter","tryIntervals","stayedTheSame","outerLoop","slope","xForY","step","bestX","bestY","ceil","modulus","signedResult","m2","ca","cb","weight","r1","r2","h","lowestOrMax","highest","arguments","random","minX","minY"],"mappings":"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","x_google_ignoreList":[2]}