@gui-chat-plugin/spreadsheet 4.2.1 → 4.2.3

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/README.md CHANGED
@@ -121,9 +121,9 @@ Dates are serial numbers on the real calendar, as in LibreOffice and Google Shee
121
121
  `AND`, `FALSE`, `IF`, `IFERROR`, `IFNA`, `IFS`, `NOT`, `OR`, `TRUE`
122
122
 
123
123
  ### Lookup & Reference
124
- `HLOOKUP`, `INDEX`, `MATCH`, `VLOOKUP`, `XLOOKUP`
124
+ `COLUMN`, `COLUMNS`, `HLOOKUP`, `INDEX`, `MATCH`, `ROW`, `ROWS`, `VLOOKUP`, `XLOOKUP`
125
125
 
126
- A range is written `A1:C10`, `Data!A1:C10` or `'My Sheet'!A1:C10`. A whole column (`A:A`, `B:D`) or a whole row (`1:1`) covers its sheet as far as the data reaches, which gives the same answers, since everything past the data is blank.
126
+ A range is written `A1:C10`, `Data!A1:C10` or `'My Sheet'!A1:C10`. A whole column (`A:A`, `B:D`) or a whole row (`1:1`) covers its sheet as far as the data reaches, which gives the same answers, since everything past the data is blank. `ROW()` and `COLUMN()` give the number of the cell the formula is in; given a range, they answer for its first cell.
127
127
 
128
128
  ### Statistical
129
129
  `AVERAGE`, `AVERAGEIF`, `AVERAGEIFS`, `CONFIDENCE.NORM`, `CONFIDENCE.T`, `CORREL`, `COUNT`, `COUNTA`, `COUNTIF`, `COUNTIFS`, `COVARIANCE.P`, `COVARIANCE.S`, `FORECAST`, `FORECAST.LINEAR`, `GEOMEAN`, `HARMEAN`, `INTERCEPT`, `KURT`, `LARGE`, `MAX`, `MAXIFS`, `MEDIAN`, `MIN`, `MINIFS`, `MODE`, `NORM.DIST`, `NORM.INV`, `NORM.S.DIST`, `NORM.S.INV`, `PEARSON`, `PERCENTILE`, `PERCENTILE.INC`, `PERCENTRANK`, `PERCENTRANK.INC`, `QUARTILE`, `QUARTILE.INC`, `RANK`, `RANK.EQ`, `RSQ`, `SKEW`, `SLOPE`, `SMALL`, `STANDARDIZE`, `STDEV`, `STDEV.P`, `STDEV.S`, `STDEVP`, `STEYX`, `SUM`, `SUMIF`, `SUMIFS`, `T.DIST`, `T.DIST.2T`, `T.DIST.RT`, `T.INV`, `T.INV.2T`, `T.TEST`, `TREND`, `TTEST`, `VAR`, `VAR.P`, `VAR.S`, `VARP`
@@ -1 +1 @@
1
- const e=require("./samples-UnTPgkyq.cjs");var t=1e5,n=e=>{if(!e)return null;let t=e.slice(0,-1);return t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).replaceAll(`''`,`'`):t};function r(t){let r=t.lastIndexOf(`!`),i=t.slice(r+1),a=e.f(i.includes(`:`)?t:`${t}:${i}`);return!a||!e.p((i.split(`:`)[0]??``).toUpperCase())?null:{sheetName:n(a.sheetPrefix),startRow:Math.min(a.startRow,a.endRow)-1,endRow:Math.max(a.startRow,a.endRow)-1,startCol:Math.min(a.startCol,a.endCol),endCol:Math.max(a.startCol,a.endCol)}}var i=/[ymdhs]/i,a=t=>e.C(t)&&typeof t.f==`string`&&t.f!==``&&!i.test(t.f);function o(e,t,n){return n===void 0||n===``?null:typeof n==`number`?n:typeof t==`number`&&a(e)?t:typeof n==`boolean`?String(n).toUpperCase():n}var s=t=>({name:t.name,data:e.s(t.data)}),c=({startRow:e,endRow:t})=>Array.from({length:t-e+1},(t,n)=>e+n),l=({startCol:e,endCol:t})=>Array.from({length:t-e+1},(t,n)=>e+n);function u(n,i,a=e.c){let u=r(i.trim());if(!u)throw Error(`"${i}" is not a range such as Data!A1:C13`);let f=(u.endRow-u.startRow+1)*(u.endCol-u.startCol+1);if(f>1e5)throw Error(`"${i}" has ${f} cells; the limit is ${t}`);let p=u.sheetName===null?0:n.findIndex(e=>e.name===u.sheetName),m=n[p];if(p<0||!m)throw Error(`the spreadsheet has no sheet named "${u.sheetName??``}"`);let h=n.map(s),g=h[p]??s(m),{calculated:_,displayed:v}=e.l(a,()=>({calculated:e.o(g,h,{skipFormatting:!0}).data,displayed:e.o(g,h).data}));return c(u).map(e=>l(u).map(t=>o(g.data[e]?.[t],d(_[e]?.[t]),d(v[e]?.[t]))))}var d=e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`?e:void 0;async function f(t,n,r){if(!e.y(n))throw Error(`path must be a .json file under artifacts/spreadsheets/`);let i=e.v(JSON.parse(await t.read(e.b(n))));if(!i)throw Error(`${n} does not hold an array of sheets`);let a=await e.u(i);try{return u(i,r,a)}finally{a.dispose()}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
1
+ const e=require("./samples-CG_0qtLD.cjs");var t=1e5,n=e=>{if(!e)return null;let t=e.slice(0,-1);return t.startsWith(`'`)&&t.endsWith(`'`)?t.slice(1,-1).replaceAll(`''`,`'`):t};function r(t){let r=t.lastIndexOf(`!`),i=t.slice(r+1),a=e.f(i.includes(`:`)?t:`${t}:${i}`);return!a||!e.p((i.split(`:`)[0]??``).toUpperCase())?null:{sheetName:n(a.sheetPrefix),startRow:Math.min(a.startRow,a.endRow)-1,endRow:Math.max(a.startRow,a.endRow)-1,startCol:Math.min(a.startCol,a.endCol),endCol:Math.max(a.startCol,a.endCol)}}var i=/[ymdhs]/i,a=t=>e.C(t)&&typeof t.f==`string`&&t.f!==``&&!i.test(t.f);function o(e,t,n){return n===void 0||n===``?null:typeof n==`number`?n:typeof t==`number`&&a(e)?t:typeof n==`boolean`?String(n).toUpperCase():n}var s=t=>({name:t.name,data:e.s(t.data)}),c=({startRow:e,endRow:t})=>Array.from({length:t-e+1},(t,n)=>e+n),l=({startCol:e,endCol:t})=>Array.from({length:t-e+1},(t,n)=>e+n);function u(n,i,a=e.c){let u=r(i.trim());if(!u)throw Error(`"${i}" is not a range such as Data!A1:C13`);let f=(u.endRow-u.startRow+1)*(u.endCol-u.startCol+1);if(f>1e5)throw Error(`"${i}" has ${f} cells; the limit is ${t}`);let p=u.sheetName===null?0:n.findIndex(e=>e.name===u.sheetName),m=n[p];if(p<0||!m)throw Error(`the spreadsheet has no sheet named "${u.sheetName??``}"`);let h=n.map(s),g=h[p]??s(m),{calculated:_,displayed:v}=e.l(a,()=>({calculated:e.o(g,h,{skipFormatting:!0}).data,displayed:e.o(g,h).data}));return c(u).map(e=>l(u).map(t=>o(g.data[e]?.[t],d(_[e]?.[t]),d(v[e]?.[t]))))}var d=e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`?e:void 0;async function f(t,n,r){if(!e.y(n))throw Error(`path must be a .json file under artifacts/spreadsheets/`);let i=e.v(JSON.parse(await t.read(e.b(n))));if(!i)throw Error(`${n} does not hold an array of sheets`);let a=await e.u(i);try{return u(i,r,a)}finally{a.dispose()}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -1,4 +1,4 @@
1
- import { C as e, b as t, c as n, f as r, l as i, o as a, p as o, s, u as c, v as l, y as u } from "./samples-C5JjpxYJ.js";
1
+ import { C as e, b as t, c as n, f as r, l as i, o as a, p as o, s, u as c, v as l, y as u } from "./samples-tIlB6kNg.js";
2
2
  //#region src/core/rangeValues.ts
3
3
  var d = 1e5, f = (e) => {
4
4
  if (!e) return null;
package/dist/core.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-UnTPgkyq.cjs"),t=require("./core-Cf9Pxo_q.cjs");exports.MAX_RANGE_CELLS=t.t,exports.SYSTEM_PROMPT=e.w,exports.TOOL_DEFINITION=e.T,exports.TOOL_NAME=e.E,exports.calculatedRange=t.n,exports.executeSpreadsheet=e.n,exports.executeSpreadsheetDispatch=e.g,exports.isSpreadsheetArtifactPath=e.y,exports.isSpreadsheetDispatchArgs=e._,exports.pluginCore=e.r,exports.readCalculatedRange=t.r,exports.samples=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-CG_0qtLD.cjs"),t=require("./core-BNJrg8mi.cjs");exports.MAX_RANGE_CELLS=t.t,exports.SYSTEM_PROMPT=e.w,exports.TOOL_DEFINITION=e.T,exports.TOOL_NAME=e.E,exports.calculatedRange=t.n,exports.executeSpreadsheet=e.n,exports.executeSpreadsheetDispatch=e.g,exports.isSpreadsheetArtifactPath=e.y,exports.isSpreadsheetDispatchArgs=e._,exports.pluginCore=e.r,exports.readCalculatedRange=t.r,exports.samples=e.t;
package/dist/core.js CHANGED
@@ -1,3 +1,3 @@
1
- import { E as e, T as t, _ as n, g as r, n as i, r as a, t as o, w as s, y as c } from "./samples-C5JjpxYJ.js";
2
- import { n as l, r as u, t as d } from "./core-CTRlKL9k.js";
1
+ import { E as e, T as t, _ as n, g as r, n as i, r as a, t as o, w as s, y as c } from "./samples-tIlB6kNg.js";
2
+ import { n as l, r as u, t as d } from "./core-Ct9CA5Ez.js";
3
3
  export { d as MAX_RANGE_CELLS, s as SYSTEM_PROMPT, t as TOOL_DEFINITION, e as TOOL_NAME, l as calculatedRange, i as executeSpreadsheet, r as executeSpreadsheetDispatch, c as isSpreadsheetArtifactPath, n as isSpreadsheetDispatchArgs, a as pluginCore, u as readCalculatedRange, o as samples };
@@ -15,6 +15,11 @@ export interface Place {
15
15
  }
16
16
  /** Each character with whether it sits in a string literal and how deeply it is nested. */
17
17
  export declare function placesOf(expr: string): Place[];
18
+ /** Where each top-level `( … )` group of `expr` opens and closes. */
19
+ export declare function topLevelGroups(expr: string): {
20
+ open: number;
21
+ close: number;
22
+ }[];
18
23
  /**
19
24
  * Excel `&` → a JS expression that concatenates with Excel's precedence.
20
25
  *
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * Evaluates spreadsheet formulas including functions, cell references, and arithmetic
5
5
  */
6
+ import { type CellCoordinates } from "./registry";
6
7
  import type { CellValue } from "./types";
7
8
  /**
8
9
  * Evaluation context for formulas
@@ -19,6 +20,7 @@ export interface EvaluatorContext {
19
20
  /** Whether the referenced cell holds nothing. `getCellValue` reads such a cell as 0, which
20
21
  * is right for arithmetic and wrong for `&`, where a blank cell joins as "". */
21
22
  isCellEmpty?: ((ref: string) => boolean) | undefined;
23
+ currentCell?: CellCoordinates | undefined;
22
24
  }
23
25
  /** Render a cell's value as the text that stands in for it inside an
24
26
  * expression. Strings are quoted so they cannot be read as identifiers or
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Where a reference written as a function argument points: `A5`, `$B$3`, `Data!C2:D9`.
3
+ */
4
+ import { type RangeBounds } from "../formulaRefs";
5
+ /** The bounds of a cell or range reference, or null when the argument is not one. A single cell
6
+ * is read as the one-cell range it is, so `ROW(A5)` and `ROW(A5:A9)` share one parse. */
7
+ export declare function referenceBounds(arg: string): RangeBounds | null;
@@ -15,10 +15,9 @@ import { type SpreadsheetError } from "./spreadsheet-errors";
15
15
  /**
16
16
  * Parse a spreadsheet string as a number, or `null` when it holds no number.
17
17
  *
18
- * Mirrors the engine's long-standing lenient read: a percentage, a currency
19
- * amount, or a thousands-separated value, else a bare `parseFloat` (which reads a
20
- * leading number out of "12abc"). The branch order is load-bearing — each strips
21
- * only its own characters, so a string mixing "%" and "$" fails in the first.
18
+ * The WHOLE text must be the number — a percentage, a currency amount, a thousands-separated value
19
+ * or a plain one, as Excel reads what is typed into a cell. Text that merely starts with one
20
+ * (`2023-01`, `12abc`, `5% off`) or holds a comma (`Tokyo, Japan`) is text, not its leading digits.
22
21
  */
23
22
  export declare function parseNumericString(value: string): number | null;
24
23
  /**
@@ -32,8 +31,7 @@ export declare function holdsNumber(value: CellValue): boolean;
32
31
  /**
33
32
  * Strict scalar coercion for single-value math functions (ABS, SIGN). Follows
34
33
  * Excel's scalar rules: a boolean is 1 / 0 and genuinely non-numeric text is
35
- * `#VALUE!` rather than a silent 0. A partly-numeric string still yields its
36
- * leading number, matching the engine's other numeric reads.
34
+ * `#VALUE!` rather than a silent 0 — including text that only starts with a number.
37
35
  */
38
36
  export declare function toScalarNumber(value: CellValue): number | SpreadsheetError;
39
37
  /**
@@ -25,6 +25,12 @@ export interface FunctionContext {
25
25
  isBlankReference?: ((arg: string) => boolean) | undefined;
26
26
  /** Read an ambiguous `01/02/2020` as day-first, as the sheet's own dates are. */
27
27
  preferDDMMYYYY?: boolean | undefined;
28
+ /** The cell whose formula is being calculated, 0-based; absent outside a sheet (`ROW()`). */
29
+ currentCell?: CellCoordinates | undefined;
30
+ }
31
+ export interface CellCoordinates {
32
+ row: number;
33
+ col: number;
28
34
  }
29
35
  /** The too-few-arguments error, raised by the evaluator from the registry's
30
36
  * `minArgs` before any handler runs — and by `requiredArg` for the argument a
@@ -2,6 +2,12 @@
2
2
  * Reading the sheet out of a sheet-qualified reference: `Data!A1`, `'My Sheet'!A1:B2`, and a
3
3
  * quoted name holding an apostrophe written twice, as Excel writes it (`'It''s'!A1` names It's).
4
4
  */
5
+ /** A sheet name Excel lets you write without quotes: letters of any script, digits, `_` and `.`,
6
+ * not starting with a digit (`基準!B1`, `Sheet_1!B1`). Every reader of a reference uses this one
7
+ * rule, with the `u` flag, so `基準!B1` and `基準!A:A` reach the same sheet. */
8
+ export declare const UNQUOTED_SHEET_NAME: string;
9
+ /** A character that continues a name, so a word touching it is part of something longer. */
10
+ export declare const NAME_CHARACTER: string;
5
11
  /** A reference split from the sheet it names. */
6
12
  export interface SheetQualifiedReference {
7
13
  sheetName: string;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Text as an operand of arithmetic, read as Excel reads it: text that is a number is that number
3
+ * (`="3"+1` is 4), and any other text makes the expression #VALUE! (`="a"+1`). In JavaScript `+`
4
+ * would join the text and `*` would give NaN, so `("a"&1)+1` came out "a11" and `0*("a"&1)`
5
+ * #DIV/0!. Text beside `&` or a comparison is left alone: joining and comparing take text.
6
+ */
7
+ import { type SpreadsheetError } from "./spreadsheet-errors";
8
+ /**
9
+ * `expr` with each literal that stands beside an arithmetic operator replaced by its number, or
10
+ * #VALUE! when one of them is not a number. Every other literal is kept as written.
11
+ */
12
+ export declare function textOperandsAsNumbers(expr: string): string | SpreadsheetError;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-UnTPgkyq.cjs"),t=require("./core-Cf9Pxo_q.cjs");exports.MAX_RANGE_CELLS=t.t,exports.SYSTEM_PROMPT=e.w,exports.TOOL_DEFINITION=e.T,exports.TOOL_NAME=e.E,exports.calculatedRange=t.n,exports.executeSpreadsheet=e.n,exports.executeSpreadsheetDispatch=e.g,exports.isSpreadsheetArtifactPath=e.y,exports.isSpreadsheetDispatchArgs=e._,exports.pluginCore=e.r,exports.readCalculatedRange=t.r,exports.samples=e.t;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./samples-CG_0qtLD.cjs"),t=require("./core-BNJrg8mi.cjs");exports.MAX_RANGE_CELLS=t.t,exports.SYSTEM_PROMPT=e.w,exports.TOOL_DEFINITION=e.T,exports.TOOL_NAME=e.E,exports.calculatedRange=t.n,exports.executeSpreadsheet=e.n,exports.executeSpreadsheetDispatch=e.g,exports.isSpreadsheetArtifactPath=e.y,exports.isSpreadsheetDispatchArgs=e._,exports.pluginCore=e.r,exports.readCalculatedRange=t.r,exports.samples=e.t;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { E as e, T as t, _ as n, g as r, n as i, r as a, t as o, w as s, y as c } from "./samples-C5JjpxYJ.js";
2
- import { n as l, r as u, t as d } from "./core-CTRlKL9k.js";
1
+ import { E as e, T as t, _ as n, g as r, n as i, r as a, t as o, w as s, y as c } from "./samples-tIlB6kNg.js";
2
+ import { n as l, r as u, t as d } from "./core-Ct9CA5Ez.js";
3
3
  export { d as MAX_RANGE_CELLS, s as SYSTEM_PROMPT, t as TOOL_DEFINITION, e as TOOL_NAME, l as calculatedRange, i as executeSpreadsheet, r as executeSpreadsheetDispatch, c as isSpreadsheetArtifactPath, n as isSpreadsheetDispatchArgs, a as pluginCore, u as readCalculatedRange, o as samples };
@@ -0,0 +1,2 @@
1
+ let e=require("gui-chat-protocol"),t=require("quickjs-emscripten-core");var n=`presentSpreadsheet`,r={type:`function`,name:n,description:`Display an Excel-like spreadsheet with formulas and calculations.`,parameters:{type:`object`,properties:{title:{type:`string`,description:`Title for the spreadsheet`},sheets:{type:`array`,description:`Sheets to render as spreadsheet tabs. Each sheet includes a name and 2D array of cells (rows x columns).`,items:{type:`object`,properties:{name:{type:`string`,description:`Sheet name (e.g., 'Sales Q1', 'Summary')`},data:{type:`array`,description:`Rows of cells. Each cell is an object with 'v' (value) and 'f' (format). Use Excel-style A1 notation in formulas: columns are letters (A, B, C...), rows are 1-based numbers (1, 2, 3...). Values can be text, numbers, dates, or formulas. Examples: [{"v": "Product"}, {"v": 2024, "f": "#,##0"}, {"v": "01/15/2025", "f": "MM/DD/YYYY"}, {"v": "=B2*1.05", "f": "$#,##0.00"}]. Format codes: '$#,##0.00' (currency), '#,##0' (integer), '0.00%' (percent), '0.00' (decimal), 'MM/DD/YYYY' (date), 'DD-MMM-YYYY' (date), 'YYYY-MM-DD' (ISO date).`,items:{type:`array`,description:`Row of cells. Each cell is an object with value and format.`,items:{type:`object`,description:`Cell object with value and optional format. If value is a string starting with '=', it's treated as a formula.`,properties:{v:{oneOf:[{type:`string`},{type:`number`},{type:`boolean`}],description:`Cell value. Can be text, number, date, or formula (string starting with '='). Examples: 'Revenue', 1500000, '01/15/2025', '=SUM(A1:A10)', '=B2-TODAY()'. Date strings like '01/15/2025' are automatically parsed to date serial numbers.`},f:{type:`string`,description:`Optional format code for displaying the value. Common formats: '$#,##0.00' (currency), '#,##0' (integer), '0.00%' (percent), '0.00' (decimal), 'MM/DD/YYYY' (date), 'DD-MMM-YYYY' (date), 'YYYY-MM-DD' (ISO date)`}},required:[`v`]}}},functions:{type:`array`,description:`Optional. Functions this workbook defines, for an analysis no built-in function does (a moving average, a custom score). A formula on any sheet calls one by name, e.g. =MOVING.AVG(B2:B100, 7), and it recalculates like any formula. Each is a JavaScript function body run in a sandbox with no network, files, DOM or timers, at most 50 ms per call. A range argument arrives as rows of cells (an array of arrays; a blank cell is null); a single cell and any other argument as its value. A whole column (A:A) arrives as the rows its sheet's data reaches. Return a number, text or true/false; anything else, a thrown error or a time-out shows as an error in the cell.`,items:{type:`object`,properties:{name:{type:`string`,description:`Letters and digits, parts joined by dots (MOVING.AVG). Not the name of a built-in function.`},params:{type:`array`,items:{type:`string`},description:`Parameter names, in call order, e.g. ["values", "n"].`},body:{type:`string`,description:`The function body, e.g. "const xs = values.flat().filter((v) => typeof v === 'number'); const tail = xs.slice(-n); return tail.reduce((a, b) => a + b, 0) / tail.length;"`},description:{type:`string`,description:`What it computes.`}},required:[`name`,`params`,`body`]}}},required:[`name`,`data`]}}},required:[`title`,`sheets`]}},i=`Use ${n} whenever the user needs a spreadsheet-style table, multi-step math, or dynamic what-if analysis—do not summarize in text. Build LIVE sheets where every cell is an object {"v": value, "f": format}. For formulas, set "v" to a string starting with "=" (e.g., {"v": "=B2*1.05", "f": "$#,##0.00"}). For dates, use date strings like "01/15/2025" or date formulas like "=TODAY()" or "=DATE(2025,1,15)". The spreadsheet auto-parses common date formats (MM/DD/YYYY, YYYY-MM-DD, DD-MMM-YYYY) into date serial numbers for calculations. Date arithmetic works: "=B2-TODAY()" calculates days between dates. Never pre-calculate; let the spreadsheet compute using cell refs, functions (SUM, AVERAGE, IF, TODAY, DATE, DATEDIF, etc.), and arithmetic. Standard formats: "$#,##0.00" currency, "#,##0" integer, "0.00%" percent, "0.00" decimal, "MM/DD/YYYY" date, "DD-MMM-YYYY" date, "YYYY-MM-DD" ISO date. Format is optional for plain text/numbers. When an analysis needs a method no built-in function has, define it once in the sheet's "functions" and call it from formulas, rather than pasting a computed number: it then recalculates when the data changes.`;function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e){return typeof e==`object`&&!!e}var s=(e,t)=>a(e)&&typeof e[t]==`string`;function c(e,t){return e instanceof Error?e.message:s(e,`details`)&&e.details?e.details:s(e,`message`)&&e.message?e.message:t===void 0?String(e):t}var l=`spreadsheets`,u=`.json`,d=16,f=2,p=e=>`${e.getUTCFullYear()}/${String(e.getUTCMonth()+1).padStart(f,`0`)}`,m=()=>globalThis.crypto.randomUUID().split(`-`).join(``).slice(0,d);function h(t=new Date,n=m()){let r=`${l}/${p(t)}/${n}${u}`;return{relPath:r,filePath:`${e.ARTIFACTS_ROOT}/${r}`}}var ee=new Set([``,`.`,`..`]);function g(t){return typeof t!=`string`||!t.startsWith(`${e.ARTIFACTS_ROOT}/${l}/`)||!t.endsWith(u)||t.includes(`\\`)?!1:!t.split(`/`).some(e=>ee.has(e))}var te=t=>t.slice(e.ARTIFACTS_ROOT.length+1),ne=e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`,re=e=>e===null||ne(e)||a(e)&&(e.v===void 0||e.v===null||ne(e.v))&&(e.f===void 0||typeof e.f==`string`),ie=e=>Array.isArray(e)&&e.every(re),ae=e=>a(e)&&typeof e.name==`string`&&Array.isArray(e.data)&&e.data.every(ie);function oe(e){return Array.isArray(e)&&e.every(ae)?e:null}var se=`SHA-256`,ce=16,le=2;async function ue(e){let t=await crypto.subtle.digest(se,new TextEncoder().encode(e));return Array.from(new Uint8Array(t),e=>e.toString(ce).padStart(le,`0`)).join(``)}var de=(e,t)=>e!==void 0&&t!==null&&e!==t;function fe(e){if(!a(e)||typeof e.path!=`string`)return!1;if(e.kind===`loadSpreadsheet`)return!0;let t=e.baseVersion;return e.kind===`saveSpreadsheet`&&Array.isArray(e.sheets)&&e.sheets.every(ae)&&(t===void 0||typeof t==`string`)}var pe=e=>a(e)&&typeof e.read==`function`&&typeof e.write==`function`;function me(e){if(!a(e)||!a(e.files))return null;let t=e.files.artifacts;return pe(t)?t:null}function he(e,t){let n=oe(JSON.parse(e));if(!n)throw Error(`${t} does not hold an array of sheets`);return n}async function ge(e,t){let n=await e.read(te(t));return{message:`Loaded spreadsheet ${t}`,data:{sheets:he(n,t),version:await ue(n)}}}var _e=new Map;function ve(t){let n=_e.get(t);if(n)return n;let r=(0,e.createSerialLock)();return _e.set(t,r),r}async function ye(e,t){return await e.exists(t)?e.read(t):null}function be(e,t,n){return{message:`Did not save spreadsheet ${e}: it changed since it was read`,data:{sheets:he(t,e),version:n,conflict:!0}}}async function xe(e,t,n,r){let i=te(t);return ve(i)(async()=>{let a=r===void 0?null:await ye(e,i),o=a===null?null:await ue(a);if(a!==null&&o!==null&&de(r,o))return be(t,a,o);let s=JSON.stringify(n);return await e.write(i,s),{message:`Saved spreadsheet ${t}`,data:{sheets:t,version:await ue(s)}}})}async function Se(e,t){if(!g(t.path))throw Error(`path must be a .json file under artifacts/spreadsheets/`);return t.kind===`loadSpreadsheet`?ge(e,t.path):xe(e,t.path,t.sheets,t.baseVersion)}var Ce=[`#NULL!`,`#DIV/0!`,`#VALUE!`,`#REF!`,`#NAME?`,`#NUM!`,`#N/A`,`#ERROR!`],_=class{code;constructor(e){this.code=e}toString(){return this.code}toJSON(){return this.code}},we=new _(`#NULL!`),v=new _(`#DIV/0!`),y=new _(`#VALUE!`),Te=new _(`#REF!`),Ee=new _(`#NAME?`),b=new _(`#NUM!`),x=new _(`#N/A`),De={"#NULL!":we,"#DIV/0!":v,"#VALUE!":y,"#REF!":Te,"#NAME?":Ee,"#NUM!":b,"#N/A":x,"#ERROR!":new _(`#ERROR!`)},Oe=e=>De[e],ke=new Set(Ce);function Ae(e){return typeof e==`string`&&ke.has(e)}function S(e){return e instanceof _}function je(e){return S(e)?e.code:Ae(e)?e:null}function Me(e){return e==null?!0:typeof e==`number`?Number.isNaN(e)||!Number.isFinite(e):S(e)}var Ne=/^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/,Pe=/^[-+]?\d{1,3}(?:,\d{3})+(?:\.\d*)?$/,Fe=/^(.*?)\s*%$/,Ie=/^([-+]?)\$(.*)$/,Le=e=>Number.isFinite(e)?e:null,Re=e=>Ne.test(e)?Le(Number(e)):Pe.test(e)?Le(Number(e.replace(/,/g,``))):null;function C(e){let t=e.trim(),[,n]=t.match(Fe)??[];if(n!==void 0){let e=Re(n);return e===null?null:e/100}let[,r,i]=t.match(Ie)??[];if(i!==void 0){let e=r!==``&&/^[-+]/.test(i)?null:Re(i.trim());return e===null?null:r===`-`?-e:e}return Re(t)}function w(e){return typeof e==`number`?!isNaN(e):typeof e==`string`&&C(e)!==null}function T(e){return typeof e==`number`?e:typeof e==`boolean`?+!!e:typeof e==`string`?C(e)??y:e}function ze(e){return typeof e==`number`?!isNaN(e):typeof e==`string`&&C(e)!==null}var Be=864e5,Ve=new Date(Date.UTC(1899,11,30)),E=e=>(e.getTime()-Ve.getTime())/Be,D=e=>{let t=Math.floor(e),n=e-t,r=new Date(Ve.getTime()+t*Be),i=Math.round(n*24*60*60);return r.setSeconds(r.getSeconds()+i),r},He=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],Ue=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],We=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],Ge=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function Ke(e){if(typeof e!=`string`||e.length<6||e.length>30)return!1;let t=/\d/.test(e),n=/[/\-\s,]/.test(e);return!t||!n?!1:[/^\d{1,2}\/\d{1,2}\/\d{2,4}$/,/^\d{4}-\d{1,2}-\d{1,2}$/,/^\d{4}\/\d{1,2}\/\d{1,2}$/,/^\d{1,2}-[A-Za-z]{3}-\d{2,4}$/,/^[A-Za-z]{3,9}\s+\d{1,2},?\s+\d{4}$/,/^\d{1,2}\s+[A-Za-z]{3,9}\s+\d{4}$/].some(t=>t.test(e.trim()))}function qe(e,t,n){return it(e,t,n)?E(new Date(Date.UTC(e,t-1,n))):null}function Je(e,t){let[,n,r,i]=e.match(t)??[];return n===void 0||r===void 0||i===void 0?null:[n,r,i]}var Ye=/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/,Xe=12,Ze=(e,t,n)=>e>Xe||t<=Xe&&e<=Xe&&n;function Qe(e){let t=e.toLowerCase(),n=He.findIndex(e=>e.toLowerCase()===t);if(n!==-1)return n+1;let r=Ue.findIndex(e=>e.toLowerCase()===t);return r===-1?null:r+1}function $e(e,t=!1){if(!Ke(e))return null;let n=e.trim(),r=Je(n,/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/);if(r){let[e,t,n]=r;return qe(parseInt(e),parseInt(t),parseInt(n))}let i=Je(n,/^(\d{1,2})-([A-Za-z]{3})-(\d{2,4})$/);if(i){let[e,t,n]=i;return rt(nt(parseInt(n)),t,parseInt(e))}let a=Je(n,/^([A-Za-z]{3,9})\s+(\d{1,2}),?\s+(\d{4})$/);if(a){let[e,t,n]=a;return rt(parseInt(n),e,parseInt(t))}let o=Je(n,/^(\d{1,2})\s+([A-Za-z]{3,9})\s+(\d{4})$/);if(o){let[e,t,n]=o;return rt(parseInt(n),t,parseInt(e))}let s=Je(n,Ye);if(s){let[e,n,r]=s,i=Ze(parseInt(e),parseInt(n),t),a=parseInt(i?n:e),o=parseInt(i?e:n);return qe(nt(parseInt(r)),a,o)}return null}var et=100,tt=30;function nt(e){return e>=et?e:e<tt?2e3+e:1900+e}function rt(e,t,n){let r=Qe(t);return r===null?null:qe(e,r,n)}function it(e,t,n){if(e<1900||e>2100||t<1||t>12||n<1||n>31)return!1;let r=new Date(Date.UTC(e,t-1,n));return r.getUTCFullYear()===e&&r.getUTCMonth()===t-1&&r.getUTCDate()===n}function at(e,t=!1){let n=e.trim();if(/^\d{4}-\d{1,2}-\d{1,2}$/.test(n))return`YYYY-MM-DD`;if(/^\d{4}\/\d{1,2}\/\d{1,2}$/.test(n))return`YYYY/MM/DD`;if(/^\d{1,2}-[A-Za-z]{3}-\d{2,4}$/.test(n))return`DD-MMM-YYYY`;if(/^[A-Za-z]{3}\s+\d{1,2},?\s+\d{4}$/.test(n))return`MMM D, YYYY`;if(/^[A-Za-z]{4,9}\s+\d{1,2},?\s+\d{4}$/.test(n))return`MMMM D, YYYY`;let r=Je(n,Ye);if(r){let[e,n]=r;return Ze(parseInt(e),parseInt(n),t)?`DD/MM/YYYY`:`MM/DD/YYYY`}return t?`DD/MM/YYYY`:`MM/DD/YYYY`}var ot=(e,t)=>Error(`${e} requires at least ${t} argument${t===1?``:`s`}`),O=(e,t,n)=>{let r=t[n];if(r===void 0)throw ot(e.functionName,n+1);return r},st=e=>e.getRangeValuesRaw??e.getRangeValues,k=e=>e.getRangeValuesKeepingBlanks??st(e),A=new class{functions=new Map;overlay=null;register(e){this.functions.set(e.name.toUpperCase(),e)}get(e){let t=e.toUpperCase();return this.functions.get(t)??this.overlay?.get(t)}hasFunction(e){let t=e.toUpperCase();return this.functions.has(t)||(this.overlay?.has(t)??!1)}isBuiltIn(e){return this.functions.has(e.toUpperCase())}withOverlay(e,t){let n=this.overlay;this.overlay=e;try{return t()}finally{this.overlay=n}}getAllFunctions(){return Array.from(this.functions.values())}getFunctionsByCategory(){let e=new Map;for(let t of Array.from(this.functions.values())){let n=t.category||`Other`;e.has(n)||e.set(n,[]),e.get(n).push(t)}return e}},ct=`[A-Z][A-Z0-9]*(?:\\.[A-Z0-9]+)*`,lt=e=>/^[A-Z]+(?:\.[A-Z]+)*$/i.test(e)||A.hasFunction(e);function j(e){return typeof e==`number`?e:C(String(e))??0}function ut(e){return typeof e==`boolean`?e?`TRUE`:`FALSE`:String(e)}var dt=/[.*+?^${}()|[\]\\]/,ft=e=>dt.test(e)?`\\${e}`:e,pt=/~([\s\S])|[\s\S]/g,mt=e=>e.replace(pt,(e,t)=>t===void 0?e===`*`?`.*`:e===`?`?`.`:ft(e):ft(t));function ht(e){let t=RegExp(`^${mt(e)}$`,`iu`);return e=>t.test(e)}function gt(e,t=!1){let n=e.trim().replace(/^["']|["']$/g,``);if(n===`=`)return e=>String(e).trim()===``;if(n===`<>`)return e=>String(e).trim()!==``;let[,r,i]=n.match(/^([><=!]+)(.+)$/)??[];if(r!==void 0&&i!==void 0){let e=_t(i,t),n=vt(i,t),a=e=>t=>w(t)&&e(j(t));switch(r){case`>`:return a(t=>t>e);case`>=`:return a(t=>t>=e);case`<`:return a(t=>t<e);case`<=`:return a(t=>t<=e);case`=`:case`==`:return n;case`!=`:case`<>`:return e=>!n(e);default:return()=>!1}}return vt(n,t)}function _t(e,t){return $e(e,t)??C(e)??NaN}function vt(e,t){let n=ht(e),r=_t(e,t),i=!isNaN(r);return e=>typeof e!=`number`&&n(String(e))||i&&w(e)&&j(e)===r}function yt(e,t,n){let r=e.evaluateFormula(O(e,t,n));return S(r)?r:typeof r==`boolean`?e=>e===r:gt(String(r),e.preferDDMMYYYY)}var bt=e=>e.reduce((e,t)=>e+t,0)/e.length;function xt(e){return e.length===0?v:bt(e)}function St(e){return e.length===0?b:bt(Ct([...e].sort((e,t)=>e-t)))}function Ct(e){let t=Math.floor(e.length/2);return e.slice(e.length%2==0?t-1:t,t+1)}function wt(e){let t=new Map;for(let n of e)t.set(n,(t.get(n)??0)+1);let n=0,r=x;for(let[e,i]of t.entries())i>n&&(n=i,r=e);return n>=2?r:x}var Tt=2;function Et(e){if(e.length<Tt)return v;let t=bt(e);return e.reduce((e,n)=>e+(n-t)**2,0)/(e.length-1)}function Dt(e){let t=Et(e);return typeof t==`number`?Math.sqrt(t):t}var M=255,Ot=/^\$?[A-Z]+\$?\d+$/i,kt=e=>Ot.test(e),At=e=>e.slice(e.lastIndexOf(`!`)+1),jt=e=>{if(!e)return!1;let[t,n]=At(e).split(`:`);return!t||!n?!1:kt(t)&&kt(n)},Mt=e=>jt(e)||kt(At(e)),Nt=(e,t,n)=>{let r=[];for(let i of e){let e=i?.trim();e&&(Mt(e)?n(e).forEach(e=>r.push({value:e,isScalar:!1})):r.push({value:t.evaluateFormula(e),isScalar:!0}))}return r},Pt=(e,t)=>{if(!t.getRangeValuesKeepingBlanks)return It(e,t);let n=Nt(e,t,t.getRangeValuesKeepingBlanks).flatMap(Ft);return n.find(S)??n.filter(e=>typeof e==`number`)},Ft=({value:e,isScalar:t})=>S(e)?[e]:t?[T(e)]:ze(e)?[j(e)]:[];function It(e,t){let n=e.map(e=>e?.trim()??``).filter(e=>e!==``).map(e=>{if(Mt(e))return{error:t.getRangeValuesRaw?.(e).find(S),numbers:t.getRangeValues(e).map(j)};let n=T(t.evaluateFormula(e));return typeof n==`number`?{numbers:[n]}:{error:n,numbers:[]}});return n.find(({error:e})=>e)?.error??n.flatMap(({numbers:e})=>e)}var Lt=e=>e.filter(ze).map(j),N=e=>(t,n)=>{let r=Pt(t,n);return Array.isArray(r)?e(r):r},Rt=(e,t)=>Nt(e,t,k(t)).map(({value:e})=>e),zt=N(e=>e.reduce((e,t)=>e+t,0)),Bt=N(xt),Vt=N(e=>e.length>0?Math.max(...e):0),Ht=N(e=>e.length>0?Math.min(...e):0),Ut=({value:e,isScalar:t})=>!t||typeof T(e)==`number`,Wt=(e,t)=>Nt(e,t,t.getRangeValues).filter(Ut).length,Gt=N(St),Kt=N(wt),qt=N(Dt),Jt=N(Et),Yt=e=>e!=null&&e!==``,Xt=(e,t)=>Mt(e)&&t.countFilledCells?t.countFilledCells(e):Rt([e],t).filter(Yt).length,Zt=(e,t)=>e.reduce((e,n)=>{let r=n?.trim();return r?e+Xt(r,t):e},0),Qt=(e,t)=>{let n=k(t)(O(t,e,0)),r=yt(t,e,1);return typeof r==`function`?n.filter(r).length:r},$t=(e,t)=>{let n=O(t,e,0),r=k(t),i=e.length===3?O(t,e,2):n;return{criteriaRange:r(n),valueRange:r(i),matches:yt(t,e,1)}},en=(e,t,n)=>e.reduce((e,r,i)=>{if(!n(r))return e;let a=t[i]??``;return S(a)?{...e,error:e.error??a}:{...e,sum:e.sum+j(a),count:e.count+ +!!w(a)}},{sum:0,count:0});A.register({name:`SUM`,handler:zt,minArgs:1,maxArgs:M,description:`Returns the sum of all numbers in a range`,examples:[`SUM(A1:A10)`,`SUM(B2:B20)`],category:`Statistical`}),A.register({name:`AVERAGE`,handler:Bt,minArgs:1,maxArgs:M,description:`Returns the average (arithmetic mean) of numbers in a range`,examples:[`AVERAGE(A1:A10)`,`AVERAGE(B2:B20)`],category:`Statistical`}),A.register({name:`MAX`,handler:Vt,minArgs:1,description:`Returns the largest value in a range`,examples:[`MAX(A1:A10)`,`MAX(B2:B20)`],category:`Statistical`}),A.register({name:`MIN`,handler:Ht,minArgs:1,description:`Returns the smallest value in a range`,examples:[`MIN(A1:A10)`,`MIN(B2:B20)`],category:`Statistical`}),A.register({name:`COUNT`,handler:Wt,minArgs:1,maxArgs:M,description:`Counts the number of cells in a range`,examples:[`COUNT(A1:A10)`,`COUNT(B2:B20)`],category:`Statistical`}),A.register({name:`MEDIAN`,handler:Gt,minArgs:1,maxArgs:M,description:`Returns the median (middle) value in a range`,examples:[`MEDIAN(A1:A10)`,`MEDIAN(B2:B20)`],category:`Statistical`}),A.register({name:`MODE`,handler:Kt,minArgs:1,maxArgs:M,description:`Returns the most frequently occurring value in a range`,examples:[`MODE(A1:A10)`,`MODE(B2:B20)`],category:`Statistical`}),A.register({name:`STDEV`,handler:qt,minArgs:1,maxArgs:M,description:`Returns the standard deviation of numbers in a range`,examples:[`STDEV(A1:A10)`,`STDEV(B2:B20)`],category:`Statistical`}),A.register({name:`VAR`,handler:Jt,minArgs:1,maxArgs:M,description:`Returns the variance of numbers in a range`,examples:[`VAR(A1:A10)`,`VAR(B2:B20)`],category:`Statistical`}),A.register({name:`COUNTA`,handler:Zt,minArgs:1,maxArgs:M,description:`Counts the number of non-empty cells in a range`,examples:[`COUNTA(A1:A10)`,`COUNTA(B2:B20)`],category:`Statistical`}),A.register({name:`COUNTIF`,handler:Qt,minArgs:2,maxArgs:2,description:`Counts cells in a range that match a criteria`,examples:[`COUNTIF(A1:A10, ">5")`,`COUNTIF(B1:B10, "Yes")`],category:`Statistical`}),A.register({name:`SUMIF`,handler:(e,t)=>{let{criteriaRange:n,valueRange:r,matches:i}=$t(e,t);if(typeof i!=`function`)return i;let{sum:a,error:o}=en(n,r,i);return o??a},minArgs:2,maxArgs:3,description:`Sums cells in a range that match a criteria`,examples:[`SUMIF(A1:A10, ">5")`,`SUMIF(A1:A10, ">5", B1:B10)`],category:`Statistical`}),A.register({name:`AVERAGEIF`,handler:(e,t)=>{let{criteriaRange:n,valueRange:r,matches:i}=$t(e,t);if(typeof i!=`function`)return i;let{sum:a,count:o,error:s}=en(n,r,i);return s||(o>0?a/o:v)},minArgs:2,maxArgs:3,description:`Averages cells in a range that match a criteria`,examples:[`AVERAGEIF(A1:A10, ">5")`,`AVERAGEIF(A1:A10, ">5", B1:B10)`],category:`Statistical`});var tn=2,nn=1,rn=4,P=e=>e.reduce((e,t)=>e+t,0)/e.length,F=e=>{let t=P(e);return e.reduce((e,n)=>e+(n-t)**2,0)};function an(e,t){if(e.length!==t.length)return x;let n=e.flatMap((e,n)=>{let r=t[n];return w(e)&&r!==void 0&&w(r)?[{y:j(e),x:j(r)}]:[]});return{ys:n.map(e=>e.y),xs:n.map(e=>e.x)}}var I=({ys:e,xs:t})=>{let n=P(e),r=P(t);return e.reduce((e,i,a)=>e+(i-n)*((t[a]??r)-r),0)};function on(e){if(e.ys.length<tn)return v;let t=Math.sqrt(F(e.ys)*F(e.xs));return t===0?v:I(e)/t}function sn(e){if(e.ys.length<tn)return v;let t=F(e.xs);return t===0?v:I(e)/t}function cn(e){let t=sn(e);return typeof t==`number`?P(e.ys)-t*P(e.xs):t}function ln(e){let t=on(e);return typeof t==`number`?t*t:t}function un(e,t){if(e.length===0||t<0||t>nn)return b;let n=[...e].sort((e,t)=>e-t),r=t*(n.length-1),i=n[Math.floor(r)]??0,a=n[Math.ceil(r)]??i;return i+(r-Math.floor(r))*(a-i)}function dn(e,t){let n=Math.trunc(t);return n<0||n>rn?b:un(e,n/rn)}function fn(e,t){let n=Math.ceil(t);return n<1||n>e.length?b:[...e].sort((e,t)=>t-e)[n-1]??b}function pn(e,t){let n=Math.ceil(t);return n<1||n>e.length?b:[...e].sort((e,t)=>e-t)[n-1]??b}function mn(e,t,n){return t.includes(e)?t.filter(t=>n?t<e:t>e).length+1:x}function hn(e){return e.length===0?v:F(e)/e.length}function gn(e){let t=hn(e);return typeof t==`number`?Math.sqrt(t):t}function _n(e,t){return t.some(({range:t})=>t.length!==e)?y:Array.from({length:e},(e,n)=>t.every(({range:e,matches:t})=>t(e[n]??``)))}var L=255,vn=(e,t,n)=>T(t.evaluateFormula(O(t,e,n))),yn=(e,t,n=0)=>{let r=k(t),[i,a]=[r(O(t,e,n)),r(O(t,e,n+1))];return[...i,...a].find(S)??an(i,a)},R=e=>(t,n)=>{let r=yn(t,n);return`ys`in r?e(r):r},bn=e=>(t,n)=>{let r=Pt([O(n,t,0)],n);if(!Array.isArray(r))return r;let i=vn(t,n,1);return typeof i==`number`?e(r,i):i},xn=(e,t)=>{let n=vn(e,t,0);if(typeof n!=`number`)return n;let r=Pt([O(t,e,1)],t);if(!Array.isArray(r))return r;let i=e.length>2?vn(e,t,2):0;return typeof i==`number`?mn(n,r,i!==0):i},Sn=(e,t,n)=>{let r=k(t),i=Array.from({length:Math.ceil((e.length-n)/2)},(e,t)=>n+t*2).map(n=>({range:r(O(t,e,n)),matches:yt(t,e,n+1)}));return i.map(({matches:e})=>e).find(S)||i.flatMap(({range:e,matches:t})=>typeof t==`function`?[{range:e,matches:t}]:[])},Cn=(e,t)=>{let n=k(t)(O(t,e,0)),r=Sn(e,t,1);if(!Array.isArray(r))return r;let i=_n(n.length,r);if(!Array.isArray(i))return i;let a=n.filter((e,t)=>i[t]);return a.find(S)??a},wn=(e,t)=>{let n=Cn(e,t);return Array.isArray(n)?n.reduce((e,t)=>e+j(t),0):n},Tn=(e,t)=>{let n=Cn(e,t);if(!Array.isArray(n))return n;let r=n.filter(w).map(j);return r.length>0?r.reduce((e,t)=>e+t,0)/r.length:v},En=e=>(t,n)=>{let r=Cn(t,n);if(!Array.isArray(r))return r;let i=r.filter(w).map(j);return i.length>0?i.reduce((t,n)=>e(t,n)):0};[{name:`CORREL`,handler:R(on),minArgs:2,maxArgs:2,description:`Returns the correlation coefficient of two ranges`,examples:[`CORREL(A2:A20, B2:B20)`]},{name:`SLOPE`,handler:R(sn),minArgs:2,maxArgs:2,description:`Returns the slope of the least-squares line through known_y and known_x`,examples:[`SLOPE(B2:B20, A2:A20)`]},{name:`INTERCEPT`,handler:R(cn),minArgs:2,maxArgs:2,description:`Returns where the least-squares line crosses the y axis`,examples:[`INTERCEPT(B2:B20, A2:A20)`]},{name:`RSQ`,handler:R(ln),minArgs:2,maxArgs:2,description:`Returns the square of the correlation coefficient`,examples:[`RSQ(B2:B20, A2:A20)`]},{name:`PERCENTILE`,handler:bn(un),minArgs:2,maxArgs:2,description:`Returns the k-th percentile (k from 0 to 1), interpolated like PERCENTILE.INC`,examples:[`PERCENTILE(A2:A100, 0.9)`]},{name:`QUARTILE`,handler:bn(dn),minArgs:2,maxArgs:2,description:`Returns a quartile (0 to 4), interpolated like QUARTILE.INC`,examples:[`QUARTILE(A2:A100, 1)`]},{name:`LARGE`,handler:bn(fn),minArgs:2,maxArgs:2,description:`Returns the k-th largest value`,examples:[`LARGE(A2:A100, 3)`]},{name:`SMALL`,handler:bn(pn),minArgs:2,maxArgs:2,description:`Returns the k-th smallest value`,examples:[`SMALL(A2:A100, 3)`]},{name:`RANK`,handler:xn,minArgs:2,maxArgs:3,description:`Returns the rank of a number in a range (largest first unless order is non-zero)`,examples:[`RANK(A2, A2:A100)`,`RANK(A2, A2:A100, 1)`]},{name:`STDEVP`,handler:N(gn),minArgs:1,maxArgs:L,description:`Returns the population standard deviation`,examples:[`STDEVP(A2:A100)`]},{name:`VARP`,handler:N(hn),minArgs:1,maxArgs:L,description:`Returns the population variance`,examples:[`VARP(A2:A100)`]},{name:`SUMIFS`,handler:wn,minArgs:3,maxArgs:L,description:`Sums the cells whose rows meet every condition`,examples:[`SUMIFS(C2:C100, A2:A100, "East", B2:B100, ">10")`]},{name:`COUNTIFS`,handler:(e,t)=>{let n=Sn(e,t,0);if(!Array.isArray(n))return n;let r=_n(n[0]?.range.length??0,n);return Array.isArray(r)?r.filter(Boolean).length:r},minArgs:2,maxArgs:L,description:`Counts the rows that meet every condition`,examples:[`COUNTIFS(A2:A100, "East", B2:B100, ">10")`]},{name:`MAXIFS`,handler:En(Math.max),minArgs:3,maxArgs:L,description:`Returns the largest value whose row meets every condition (0 when none does)`,examples:[`MAXIFS(C2:C100, A2:A100, "East")`]},{name:`MINIFS`,handler:En(Math.min),minArgs:3,maxArgs:L,description:`Returns the smallest value whose row meets every condition (0 when none does)`,examples:[`MINIFS(C2:C100, A2:A100, "East")`]},{name:`AVERAGEIFS`,handler:Tn,minArgs:3,maxArgs:L,description:`Averages the cells whose rows meet every condition`,examples:[`AVERAGEIFS(C2:C100, A2:A100, "East")`]}].forEach(e=>A.register({...e,category:`Statistical`}));var Dn=3,On=2;function kn(e,t){if(e.ys.length===0)return x;let n=sn(e);return typeof n==`number`?P(e.ys)+n*(t-P(e.xs)):n}function An(e){let t=e.ys.length;if(t===0)return x;let n=F(e.xs);if(t<Dn||n===0)return v;let r=I(e)/n,[i,a]=[P(e.ys),P(e.xs)],o=e.ys.reduce((t,n,o)=>t+(n-i-r*((e.xs[o]??a)-a))**2,0);return Math.sqrt(o/(t-2))}function jn(e){return e.ys.length===0?v:I(e)/e.ys.length}function Mn(e){return e.ys.length<On?v:I(e)/(e.ys.length-1)}var Nn=e=>Array.from({length:e},(e,t)=>t+1);function Pn(e,t,n,r){if(e.length!==t.length)return Te;let i=[...e,...t],a=i.find(S);if(a)return a;if(e.length===0||!i.every(w))return y;let o={ys:e.map(j),xs:t.map(j)};return r?Fn(o,n):In(o,n)}function Fn(e,t){let n=F(e.xs),r=P(e.ys);return n===0?r:r+I(e)/n*(t-P(e.xs))}function In({ys:e,xs:t},n){let r=t.reduce((e,t)=>e+t*t,0),i=e.reduce((e,n,r)=>e+n*(t[r]??0),0);return r===0?0:i/r*n}function z(e){if(typeof e==`boolean`)return e;if(e==null)return!1;if(typeof e==`number`)return e!==0;if(S(e))return!0;let t=e.trim();if(t===``)return!1;let n=t.toLowerCase();if(n===`true`)return!0;if(n===`false`)return!1;let r=Number(t);return Number.isNaN(r)?!0:r!==0}var Ln=(e,t)=>{let n=vn(e,t,0);if(typeof n!=`number`)return n;let r=yn(e,t,1);return`ys`in r?kn(r,n):r};function Rn(e,t){let[n,...r]=Nt([e],t,k(t));return n===void 0||r.length>0?y:n.isScalar?T(n.value):S(n.value)?n.value:w(n.value)?j(n.value):y}function zn(e,t){let n=e[3]?.trim();if(!n)return!0;let r=t.evaluateFormula(n);return S(r)?r:z(r)}[{name:`FORECAST.LINEAR`,handler:Ln,minArgs:3,maxArgs:3,description:`Returns the value of the least-squares line through known_y and known_x at x`,examples:[`FORECAST.LINEAR(30, B2:B20, A2:A20)`]},{name:`TREND`,handler:(e,t)=>{let n=k(t),r=n(O(t,e,0)),i=e[1]?.trim(),a=i?n(i):Nn(r.length),o=Rn(O(t,e,2),t);if(typeof o!=`number`)return o;let s=zn(e,t);return typeof s==`boolean`?Pn(r,a,o,s):s},minArgs:3,maxArgs:4,description:`Returns the least-squares line's value at one new x (known_x defaults to 1, 2, 3, …; const FALSE fits through the origin)`,examples:[`TREND(B2:B20, A2:A20, 30)`,`TREND(B2:B20, , 21)`]},{name:`STEYX`,handler:R(An),minArgs:2,maxArgs:2,description:`Returns the standard error of the y predicted by the least-squares line`,examples:[`STEYX(B2:B20, A2:A20)`]},{name:`COVARIANCE.P`,handler:R(jn),minArgs:2,maxArgs:2,description:`Returns the population covariance of two ranges`,examples:[`COVARIANCE.P(A2:A20, B2:B20)`]},{name:`COVARIANCE.S`,handler:R(Mn),minArgs:2,maxArgs:2,description:`Returns the sample covariance of two ranges`,examples:[`COVARIANCE.S(A2:A20, B2:B20)`]}].forEach(e=>A.register({...e,category:`Statistical`}));var Bn=.5*Math.log(2*Math.PI),Vn=1e-16,Hn=1e-300,Un=2e3,B=e=>Math.abs(e)<Hn?Hn:e,Wn=10,Gn=7,Kn=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],qn=[1/12,-1/360,1/1260,-1/1680,1/1188,-691/360360,1/156,-3617/122400];function Jn(e){let t=1/(e*e);return qn.reduceRight((e,n)=>e*t+n,0)/e}function Yn(e){let t=e-1,n=Kn.slice(1).reduce((e,n,r)=>e+n/(t+r+1),Kn[0]??1),r=t+Gn+.5;return Bn+(t+.5)*Math.log(r)-r+Math.log(n)}function V(e){return e>=Wn?Bn+(e-.5)*Math.log(e)-e+Jn(e):Yn(e)}function Xn(e,t){let n=Math.min(e,t),r=Math.max(e,t);if(r>=Wn){let e=Jn(r)-Jn(n+r);return V(n)+e+n-n*Math.log(n+r)+(r-.5)*Math.log1p(-n/(n+r))}return V(n)+V(r)-V(n+r)}function Zn(e,t,n){let r={c:1,d:1/B(1-(t+n)*e/(t+1)),result:0};r.result=r.d;for(let i=1;i<=Un;i+=1){let a=i*(n-i)*e/((t+2*i-1)*(t+2*i));r.d=1/B(1+a*r.d),r.c=B(1+a/r.c),r.result*=r.d*r.c;let o=-(t+i)*(t+n+i)*e/((t+2*i)*(t+2*i+1));r.d=1/B(1+o*r.d),r.c=B(1+o/r.c);let s=r.d*r.c;if(r.result*=s,Math.abs(s-1)<Vn)return r.result}return r.result}var Qn=1e4,$n=8;function er(e,t,n,r,i){let a={term:1,sum:1};for(let t=0;t<Un&&a.term>a.sum*Vn;t+=1)a.term*=(r+i+t)/(r+1+t)*e,a.sum+=a.term;return Math.exp(r*t+i*n-Xn(r,i))/r*a.sum}function tr(e,t,n,r){if(e===-1/0)return 0;if(t===-1/0)return 1;let i=Math.exp(e),a=Math.exp(t);if(Math.max(n,r)>=Qn&&a*(n+r)<=$n)return 1-er(a,t,e,r,n);let o=Math.exp(n*e+r*t-Xn(n,r));return i<(n+1)/(n+r+2)?o*Zn(i,n,r)/n:1-o*Zn(a,r,n)/r}function nr(e,t){let n={term:1/e,sum:1/e};for(let r=1;r<=Un&&Math.abs(n.term)>=Math.abs(n.sum)*Vn;r+=1)n.term*=t/(e+r),n.sum+=n.term;return n.sum*Math.exp(-t+e*Math.log(t)-V(e))}function rr(e,t){let n={b:t+1-e,c:1/Hn,d:0,result:0};n.d=1/B(n.b),n.result=n.d;for(let t=1;t<=Un;t+=1){let r=-t*(t-e);n.b+=2,n.d=1/B(r*n.d+n.b),n.c=B(n.b+r/n.c);let i=n.d*n.c;if(n.result*=i,Math.abs(i-1)<Vn)break}return Math.exp(-t+e*Math.log(t)-V(e))*n.result}function ir(e,t){return t<=0?1:t<e+1?1-nr(e,t):rr(e,t)}var ar=Math.sqrt(2*Math.PI),or=e=>e===0?0:-e,sr=1e-15,cr=200,lr=e=>Math.exp(-.5*e*e)/ar;function ur(e){let t=.5*ir(.5,.5*e*e);return e>=0?t:1-t}var dr=e=>ur(-e),fr=[-39.69683028665376,220.9460984245205,-275.9285104469687,138.357751867269,-30.66479806614716,2.506628277459239],pr=[-54.47609879822406,161.5858368580409,-155.6989798598866,66.80131188771972,-13.28068155288572],mr=[-.007784894002430293,-.3223964580411365,-2.400758277161838,-2.549732539343734,4.374664141464968,2.938163982698783],hr=[.007784695709041462,.3224671290700398,2.445134137142996,3.754408661907416],gr=.02425,_r=(e,t)=>e.reduce((e,n)=>e*t+n,0);function vr(e){if(e<gr){let t=Math.sqrt(-2*Math.log(e));return _r(mr,t)/(_r(hr,t)*t+1)}let t=e-.5,n=t*t;return _r(fr,n)*t/(_r(pr,n)*n+1)}function yr(e){if(e>.5)return or(yr(1-e));let t={z:vr(e)};for(let n=0;n<3;n+=1){let n=(dr(t.z)-e)/lr(t.z);t.z-=n/(1+t.z*n/2)}return t.z}var br=e=>or(yr(e));function xr(e,t){return Math.exp(-Xn(t/2,.5)-.5*Math.log(t)-(t+1)/2*Math.log1p(e*e/t))}function Sr(e){if(e>0){let t=Math.log1p(Math.exp(-e));return{logX:-t,logComplement:-e-t}}let t=Math.log1p(Math.exp(e));return{logX:e-t,logComplement:-t}}function H(e,t){if(e===0)return .5;let{logX:n,logComplement:r}=Sr(Math.log(t)-2*Math.log(Math.abs(e))),i=.5*tr(n,r,t/2,.5);return e>=0?i:1-i}var Cr=(e,t)=>H(-e,t);function wr(e,t){let n={high:1};for(;H(n.high,t)>e&&n.high<Number.MAX_VALUE/2;)n.high*=2;return n.high}function Tr(e,t,n,r){let i=H(e,n);i>t?r.low=e:r.high=e;let a=e+(Math.log(i)-Math.log(t))*i/xr(e,n);return a>r.low&&a<r.high&&Number.isFinite(a)?a:(r.low+r.high)/2}function Er(e,t){if(e===.5)return 0;let n={low:0,high:wr(e,t)},r={t:Math.min(Math.max(br(e),0),n.high)};for(let i=0;i<cr;i+=1){let i=Tr(r.t,e,t,n),a=Math.abs(i-r.t)<=sr*Math.abs(i);if(r.t=i,a)break}return r.t}function Dr(e,t){return e>.5?or(Er(1-e,t)):Er(e,t)}var Or=(e,t)=>or(Dr(e,t));function kr(e){let t=e.length,n=e.reduce((e,t)=>e+t,0)/t;return{count:t,mean:n,variance:e.reduce((e,t)=>e+(t-n)**2,0)/(t-1)}}function Ar(e){let{count:t,mean:n,variance:r}=kr(e);return{t:n/Math.sqrt(r/t),df:t-1}}function jr(e,t){let n=e.count+t.count-2,r=((e.count-1)*e.variance+(t.count-1)*t.variance)/n;return{t:(e.mean-t.mean)/Math.sqrt(r*(1/e.count+1/t.count)),df:n}}function Mr(e,t){let n=e.variance/e.count,r=t.variance/t.count,i=(n+r)**2/(n**2/(e.count-1)+r**2/(t.count-1));return{t:(e.mean-t.mean)/Math.sqrt(n+r),df:i}}var Nr=({t:e,df:t},n)=>n*H(Math.abs(e),t),Pr=(e,t,n)=>T(t.evaluateFormula(O(t,e,n)));function Fr(e,t,n){let r=t.evaluateFormula(O(t,e,n));return S(r)?r:z(r)}function Ir(e,t,n){let r=Array.from({length:n},(n,r)=>Pr(e,t,r));return r.find(e=>typeof e!=`number`)??r.filter(e=>typeof e==`number`)}var U=(e,t)=>(n,r)=>{let i=Ir(n,r,e);return Array.isArray(i)?t(i):i},Lr=e=>{let t=Math.trunc(e);return t>=1?t:null},Rr=e=>e>0&&e<1,zr=(e,t)=>{let n=Ir(e,t,2);if(!Array.isArray(n))return n;let[r=0,i=0]=n,a=Fr(e,t,2);if(typeof a!=`boolean`)return a;let o=Lr(i);return o===null?b:a?Cr(r,o):xr(r,o)},Br=([e=0,t=0])=>{let n=Lr(t);return n===null||e<0?b:2*H(e,n)},Vr=([e=0,t=0])=>{let n=Lr(t);return n===null?b:H(e,n)},Hr=([e=0,t=0])=>{let n=Lr(t);return n===null||!Rr(e)?b:Or(e,n)},Ur=([e=0,t=0])=>{let n=Lr(t);return n===null||e<=0||e>1?b:Dr(e/2,n)},Wr=1,Gr=2,Kr=3;function qr([e,t]){let n=an(e,t);return`ys`in n?Ar(n.ys.map((e,t)=>e-(n.xs[t]??0))):n}function Jr([e,t],n){let[r,i]=[kr(Lt(e)),kr(Lt(t))];return n===Gr?jr(r,i):Mr(r,i)}var Yr=e=>`t`in e&&!(Number.isFinite(e.t)&&Number.isFinite(e.df))?v:e,Xr=(e,t)=>{let n=k(t),r=[n(O(t,e,0)),n(O(t,e,1))],i=r.flat().find(S);if(i)return i;let a=[Pr(e,t,2),Pr(e,t,3)],o=a.find(e=>typeof e!=`number`);if(o)return o;let[s,c]=a.map(e=>Math.trunc(Number(e)));if(s!==1&&s!==2||c===void 0||c<Wr||c>Kr)return b;let l=Yr(c===Wr?qr(r):Jr(r,c));return`t`in l?Nr(l,s===1?1:2):l},Zr=(e,t)=>{let n=Ir(e,t,3);if(!Array.isArray(n))return n;let[r=0,i=0,a=0]=n,o=Fr(e,t,3);if(typeof o!=`boolean`)return o;if(a<=0)return b;let s=(r-i)/a;return o?dr(s):lr(s)/a},Qr=(e,t)=>{let n=Pr(e,t,0);if(typeof n!=`number`)return n;let r=Fr(e,t,1);return typeof r==`boolean`?r?dr(n):lr(n):r},$r=([e=0,t=0,n=0])=>!Rr(e)||n<=0?b:t+n*yr(e),ei=([e=0])=>Rr(e)?yr(e):b;function ti([e=0,t=0,n=0]){let r=Math.trunc(n);return!Rr(e)||t<=0||r<1?b:{alpha:e,sd:t,size:r}}[{name:`T.TEST`,handler:Xr,minArgs:4,maxArgs:4,description:`Returns the p-value of a t-test: tails 1 or 2; type 1 paired, 2 equal variance, 3 unequal variance (Welch)`,examples:[`T.TEST(A2:A20, B2:B20, 2, 3)`]},{name:`T.DIST`,handler:zr,minArgs:3,maxArgs:3,description:`Returns the left-tailed Student's t distribution (cumulative TRUE) or its density`,examples:[`T.DIST(1.96, 30, TRUE)`]},{name:`T.DIST.2T`,handler:U(2,Br),minArgs:2,maxArgs:2,description:`Returns the two-tailed Student's t distribution for x >= 0`,examples:[`T.DIST.2T(1.96, 30)`]},{name:`T.DIST.RT`,handler:U(2,Vr),minArgs:2,maxArgs:2,description:`Returns the right-tailed Student's t distribution`,examples:[`T.DIST.RT(1.96, 30)`]},{name:`T.INV`,handler:U(2,Hr),minArgs:2,maxArgs:2,description:`Returns the t value with the given left-tailed probability`,examples:[`T.INV(0.975, 30)`]},{name:`T.INV.2T`,handler:U(2,Ur),minArgs:2,maxArgs:2,description:`Returns the t value whose two tails hold the given probability`,examples:[`T.INV.2T(0.05, 30)`]},{name:`NORM.DIST`,handler:Zr,minArgs:4,maxArgs:4,description:`Returns the normal distribution (cumulative TRUE) or its density`,examples:[`NORM.DIST(42, 40, 1.5, TRUE)`]},{name:`NORM.S.DIST`,handler:Qr,minArgs:2,maxArgs:2,description:`Returns the standard normal distribution (cumulative TRUE) or its density`,examples:[`NORM.S.DIST(1.96, TRUE)`]},{name:`NORM.INV`,handler:U(3,$r),minArgs:3,maxArgs:3,description:`Returns the value with the given cumulative normal probability`,examples:[`NORM.INV(0.9, 40, 1.5)`]},{name:`NORM.S.INV`,handler:U(1,ei),minArgs:1,maxArgs:1,description:`Returns the z with the given cumulative standard normal probability`,examples:[`NORM.S.INV(0.975)`]},{name:`CONFIDENCE.NORM`,handler:U(3,e=>{let t=ti(e);return`size`in t?br(t.alpha/2)*t.sd/Math.sqrt(t.size):t}),minArgs:3,maxArgs:3,description:`Returns the half-width of a confidence interval for a mean, using the normal distribution`,examples:[`CONFIDENCE.NORM(0.05, 2.5, 50)`]},{name:`CONFIDENCE.T`,handler:U(3,e=>{let t=ti(e);return`size`in t?t.size===1?v:Dr(t.alpha/2,t.size-1)*t.sd/Math.sqrt(t.size):t}),minArgs:3,maxArgs:3,description:`Returns the half-width of a confidence interval for a mean, using Student's t distribution`,examples:[`CONFIDENCE.T(0.05, 1, 50)`]}].forEach(e=>A.register({...e,category:`Statistical`}));var ni=3,ri=4,ii=e=>e.reduce((e,t)=>e+t,0)/e.length;function ai(e,t){let n=ii(e),r=e.map(e=>e-n),i=Math.sqrt(r.reduce((e,t)=>e+t*t,0)/(e.length-1));return i===0?null:r.reduce((e,n)=>e+(n/i)**t,0)}function oi(e){let t=e.length,n=t<ni?null:ai(e,3);return n===null?v:t/((t-1)*(t-2))*n}function si(e){let t=e.length,n=t<ri?null:ai(e,4);return n===null?v:t*(t+1)/((t-1)*(t-2)*(t-3))*n-3*(t-1)**2/((t-2)*(t-3))}var ci=(e,t,n)=>n>0?(e-t)/n:b;function li(e){return e.length===0||e.some(e=>e<=0)?b:Math.exp(ii(e.map(Math.log)))}function ui(e){return e.length===0||e.some(e=>e<=0)?b:e.length/e.reduce((e,t)=>e+1/t,0)}function di(e,t){let n=e.length-1,r=e.filter(e=>e<t).length;if(e[r]===t)return r/n;let i=e[r-1]??t,a=e[r]??t;return(r-1+(t-i)/(a-i))/n}function fi(e,t,n){let r=Math.trunc(n);if(r<1||e.length===0)return b;let i=Array.from(Float64Array.from(e).sort()),[a,o]=[i[0],i.at(-1)];if(a===void 0||o===void 0||t<a||t>o)return x;if(i.length===1)return 1;let s=10**r;return Math.floor(di(i,t)*s*(1+2**-52*4))/s}var pi=255,mi=3,hi=(e,t,n)=>T(t.evaluateFormula(O(t,e,n))),gi=e=>(t,n)=>{let r=Pt(t,n);return Array.isArray(r)?e(r):r};[{name:`SKEW`,handler:gi(oi),minArgs:1,maxArgs:pi,description:`Returns the skewness of a sample`,examples:[`SKEW(A2:A100)`]},{name:`KURT`,handler:gi(si),minArgs:1,maxArgs:pi,description:`Returns the excess kurtosis of a sample`,examples:[`KURT(A2:A100)`]},{name:`STANDARDIZE`,handler:(e,t)=>{let n=[0,1,2].map(n=>hi(e,t,n)),r=n.find(e=>typeof e!=`number`);if(r)return r;let[i=0,a=0,o=0]=n.map(Number);return ci(i,a,o)},minArgs:3,maxArgs:3,description:`Returns (x - mean) / standard deviation`,examples:[`STANDARDIZE(A2, AVERAGE(A2:A100), STDEV(A2:A100))`]},{name:`PERCENTRANK.INC`,handler:(e,t)=>{let n=hi(e,t,1);if(typeof n!=`number`)return n;let r=e.length>2?hi(e,t,2):mi;if(typeof r!=`number`)return r;let i=Pt([O(t,e,0)],t);return Array.isArray(i)?fi(i,n,r):i},minArgs:2,maxArgs:3,description:`Returns the rank of x in a range as a fraction from 0 to 1, to significance digits (3 by default)`,examples:[`PERCENTRANK.INC(A2:A100, A2)`]},{name:`GEOMEAN`,handler:gi(li),minArgs:1,maxArgs:pi,description:`Returns the geometric mean of positive numbers`,examples:[`GEOMEAN(A2:A20)`]},{name:`HARMEAN`,handler:gi(ui),minArgs:1,maxArgs:pi,description:`Returns the harmonic mean of positive numbers`,examples:[`HARMEAN(A2:A20)`]}].forEach(e=>A.register({...e,category:`Statistical`}));var _i=10,vi=e=>_i**+e,yi=15,bi=e=>Number(e.toPrecision(yi)),xi=(e,t,n)=>{if(vi(t)===0)return 0;let r=Math.abs(e)*vi(t);return!Number.isFinite(r)||Number.isInteger(r)&&r!==0?e:Math.sign(e)*n(bi(r))/vi(t)},Si=(e,t,n)=>{let r=e/t;return!Number.isFinite(r)||Number.isInteger(r)?e:bi(n(bi(r))*t)};function Ci(e,t){return xi(e,t,Math.round)}function wi(e,t){return vi(t)===0&&e!==0?b:xi(e,t,Math.ceil)}function Ti(e,t){return xi(e,t,Math.floor)}var Ei=(e,t)=>e===0||Math.sign(e)===Math.sign(t);function Di(e,t){return t===0?v:Ei(e,t)?Si(e,t,Math.floor):b}function Oi(e,t){return t===0?0:Ei(e,t)?Si(e,t,Math.ceil):b}function ki(e,t){return t===0?v:e-t*Math.floor(e/t)}function Ai(e,t){if(e<0&&!Number.isInteger(t))return b;if(e===0&&t<0)return v;if(e===0&&t===0)return b;let n=e**+t;return Number.isFinite(n)?n:b}function ji(e){return e<=0?b:Math.log(e)}function Mi(e,t){let n=ji(e);return S(n)?n:t<=0||t===1?b:n/Math.log(t)}function Ni(e){return e<=0?b:Math.log10(e)}function Pi(e){return e<0?b:Math.sqrt(e)}A.register({name:`ROUND`,handler:(e,t)=>Ci(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Rounds a number to a specified number of digits`,examples:[`ROUND(3.14159, 2)`,`ROUND(A1, 0)`],category:`Mathematical`}),A.register({name:`ROUNDUP`,handler:(e,t)=>wi(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Rounds a number up, away from zero`,examples:[`ROUNDUP(3.14159, 2)`,`ROUNDUP(A1, 0)`],category:`Mathematical`}),A.register({name:`ROUNDDOWN`,handler:(e,t)=>Ti(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Rounds a number down, toward zero`,examples:[`ROUNDDOWN(3.14159, 2)`,`ROUNDDOWN(A1, 0)`],category:`Mathematical`}),A.register({name:`FLOOR`,handler:(e,t)=>Di(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Rounds a number down to the nearest multiple of significance`,examples:[`FLOOR(3.7, 1)`,`FLOOR(24, 5)`],category:`Mathematical`}),A.register({name:`CEILING`,handler:(e,t)=>Oi(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Rounds a number up to the nearest multiple of significance`,examples:[`CEILING(3.2, 1)`,`CEILING(24, 5)`],category:`Mathematical`}),A.register({name:`ABS`,handler:(e,t)=>{let n=T(t.evaluateFormula(O(t,e,0)));return S(n)?n:Math.abs(n)},minArgs:1,maxArgs:1,description:`Returns the absolute value of a number`,examples:[`ABS(-5)`,`ABS(A1)`],category:`Mathematical`}),A.register({name:`POWER`,handler:(e,t)=>Ai(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Returns the result of a number raised to a power`,examples:[`POWER(2, 3)`,`POWER(A1, 2)`],category:`Mathematical`}),A.register({name:`SQRT`,handler:(e,t)=>Pi(j(t.evaluateFormula(O(t,e,0)))),minArgs:1,maxArgs:1,description:`Returns the square root of a number`,examples:[`SQRT(16)`,`SQRT(A1)`],category:`Mathematical`}),A.register({name:`MOD`,handler:(e,t)=>ki(j(t.evaluateFormula(O(t,e,0))),j(t.evaluateFormula(O(t,e,1)))),minArgs:2,maxArgs:2,description:`Returns the remainder after division`,examples:[`MOD(10, 3)`,`MOD(A1, 2)`],category:`Mathematical`}),A.register({name:`INT`,handler:(e,t)=>{let n=j(t.evaluateFormula(O(t,e,0)));return Math.floor(n)},minArgs:1,maxArgs:1,description:`Rounds a number down to the nearest integer`,examples:[`INT(3.7)`,`INT(A1)`],category:`Mathematical`}),A.register({name:`TRUNC`,handler:(e,t)=>Ti(j(t.evaluateFormula(O(t,e,0))),e.length===2?j(t.evaluateFormula(O(t,e,1))):0),minArgs:1,maxArgs:2,description:`Truncates a number to a specified number of decimal places`,examples:[`TRUNC(3.14159, 2)`,`TRUNC(A1)`],category:`Mathematical`}),A.register({name:`SIGN`,handler:(e,t)=>{let n=T(t.evaluateFormula(O(t,e,0)));return S(n)?n:Math.sign(n)},minArgs:1,maxArgs:1,description:`Returns the sign of a number (1, 0, or -1)`,examples:[`SIGN(-5)`,`SIGN(A1)`],category:`Mathematical`}),A.register({name:`PI`,handler:()=>Math.PI,minArgs:0,maxArgs:0,description:`Returns the value of pi (3.14159...)`,examples:[`PI()`,`PI()*2`],category:`Mathematical`}),A.register({name:`EXP`,handler:(e,t)=>{let n=j(t.evaluateFormula(O(t,e,0)));return Math.exp(n)},minArgs:1,maxArgs:1,description:`Returns e raised to the power of a number`,examples:[`EXP(1)`,`EXP(A1)`],category:`Mathematical`}),A.register({name:`LN`,handler:(e,t)=>ji(j(t.evaluateFormula(O(t,e,0)))),minArgs:1,maxArgs:1,description:`Returns the natural logarithm of a number`,examples:[`LN(10)`,`LN(A1)`],category:`Mathematical`}),A.register({name:`LOG`,handler:(e,t)=>Mi(j(t.evaluateFormula(O(t,e,0))),e.length===2?j(t.evaluateFormula(O(t,e,1))):10),minArgs:1,maxArgs:2,description:`Returns the logarithm of a number to a specified base`,examples:[`LOG(100)`,`LOG(8, 2)`],category:`Mathematical`}),A.register({name:`LOG10`,handler:(e,t)=>Ni(j(t.evaluateFormula(O(t,e,0)))),minArgs:1,maxArgs:1,description:`Returns the base-10 logarithm of a number`,examples:[`LOG10(100)`,`LOG10(A1)`],category:`Mathematical`});function W(e,t){let n={position:t};for(;n.position>0&&e[n.position-1]===`\\`;)--n.position;return(t-n.position)%2==1}function Fi(e){return aa(Yi(e))}function Ii(e,t){return e===``?t:t===e?``:e}function Li(e){let t=e.split(``),n=[],r=``;return t.forEach((t,i)=>{(t===`"`||t===`'`)&&!W(e,i)&&(r=Ii(r,t)),n.push(t===`&`&&r===``?`+`:t)}),n.join(``)}function Ri(e){let t=[],n={openQuote:``};return e.split(``).forEach((r,i)=>{(r===`"`||r===`'`)&&!W(e,i)&&(n.openQuote=Ii(n.openQuote,r));let a=t.at(-1);n.openQuote===``&&(r===`-`||r===`+`)&&a===r&&t.push(` `),t.push(r)}),t.join(``)}function zi(e){return e.replace(/([^<>!])=([^=])/g,`$1==$2`)}function Bi(e){return/^[\d+\-*/(). ]+$/.test(e)}function Vi(e){return/^[\d+\-*/(). <>!=]+$/.test(e)}var Hi=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/,Ui=/^[A-Za-z_$][\w$]*/,Wi=/^\s+/;function Gi(e,t){let n=e[t],r=Array.from(e.slice(t+1)).findIndex((r,i)=>r===n&&!W(e,t+1+i));return r===-1?e.length:t+r+2}var Ki={"(":`open`,")":`close`,"^":`caret`},qi=[{kind:`number`,pattern:Hi},{kind:`word`,pattern:Ui},{kind:`space`,pattern:Wi}];function Ji(e,t){let n=e[t];if(n===`"`||n===`'`)return{kind:`literal`,text:e.slice(t,Gi(e,t))};let r=e.slice(t),i=qi.map(({kind:e,pattern:t})=>({kind:e,text:t.exec(r)?.[0]})).find(e=>e.text!==void 0);return i?.text===void 0?{kind:Ki[n]??`symbol`,text:n}:{kind:i.kind,text:i.text}}function Yi(e){let t=[],n={position:0};for(;n.position<e.length;){let r=Ji(e,n.position);t.push(r),n.position+=r.text.length}return t}var Xi=e=>e?.kind===`symbol`&&(e.text===`-`||e.text===`+`);function Zi(e,t){let n={depth:0};return e.findIndex((e,r)=>r<t?!1:(e.kind===`open`&&(n.depth+=1),e.kind===`close`&&--n.depth,n.depth===0))}function Qi(e,t){let n=e[t];if(n===void 0)return null;if(n.kind===`number`||n.kind===`literal`||n.kind===`word`)return{text:n.text,end:t+1};if(n.kind!==`open`)return null;let r=Zi(e,t);return r===-1?null:{text:`(${aa(e.slice(t+1,r))})`,end:r+1}}function $i(e,t){let n={index:t};for(;Xi(e[n.index])||e[n.index]?.kind===`space`;)n.index+=1;let r=Qi(e,n.index);if(r===null)return null;let i=e.slice(t,n.index),a=i.filter(e=>e.kind===`symbol`).map(e=>e.text),o=i.map(e=>e.text).join(``);return{text:a.join(` `)+r.text,source:o+r.text,signed:a.length>0,end:r.end}}function ea(e,t){let n={index:t};for(;e[n.index]?.kind===`space`;)n.index+=1;return e[n.index]?.kind===`caret`?n.index:-1}var ta=e=>e.signed?`(${e.text})`:e.text;function na(e,t){let n={text:ta(t),end:t.end,links:0};for(let t=ea(e,n.end);t!==-1;t=ea(e,n.end)){let r=$i(e,t+1);if(r===null)break;let i=n.links===0?n.text:`(${n.text})`;Object.assign(n,{text:`${i}**${ta(r)}`,end:r.end,links:n.links+1})}return n.links===0?{text:t.source,end:t.end}:n}var ra=e=>e===void 0||e.kind===`open`||e.kind===`symbol`||e.kind===`caret`,ia=(e,t)=>e.kind!==`space`&&(!Xi(e)||ra(t));function aa(e){let t=[],n={index:0,previous:void 0};for(;n.index<e.length;){let r=e[n.index],i=ia(r,n.previous)?$i(e,n.index):null,a=i===null?null:na(e,i);t.push(a===null?r.kind===`caret`?`**`:r.text:a.text);let o=a===null?n.index+1:a.end;r.kind!==`space`&&(n.previous=e[o-1]),n.index=o}return t.join(``)}var oa=e=>e===`"`||e===`'`;function sa(e){let t={quote:``,depth:0};return e.split(``).map((n,r)=>{let i=oa(n)&&!W(e,r)&&(t.quote===``||t.quote===n),a=t.quote!==``||i;i&&(t.quote=t.quote===``?n:``),!a&&n===`)`&&--t.depth;let o={char:n,inLiteral:a,depth:t.depth};return!a&&n===`(`&&(t.depth+=1),o})}var ca=(e,t)=>!e.inLiteral&&t.includes(e.char);function la(e){let t=sa(e).flatMap((e,t)=>e.depth===0&&ca(e,`&`)?[t]:[]);return[-1,...t].map((n,r)=>e.slice(n+1,t[r]??e.length))}function ua(e){let t=sa(e),n=t.flatMap((e,t)=>e.depth===0&&ca(e,`(`)?[t]:[]),r=e=>t.findIndex((t,n)=>n>e&&t.depth===0&&ca(t,`)`));return n.map(e=>({open:e,close:r(e)})).filter(({close:e})=>e>0)}function da(e){let{pieces:t,cursor:n}=ua(e).reduce((t,{open:n,close:r})=>({pieces:[...t.pieces,e.slice(t.cursor,n+1),ha(e.slice(n+1,r))],cursor:r}),{pieces:[],cursor:0});return[...t,e.slice(n)].join(``)}var fa={true:`"TRUE"`,false:`"FALSE"`};function pa(e){let t=e.trim(),n=sa(t);return t.startsWith(`(`)&&n.findIndex((e,t)=>t>0&&e.depth===0&&ca(e,`)`))===t.length-1?pa(t.slice(1,-1)):t}var ma=e=>fa[pa(e)]??e;function ha(e){let t=la(e).map(da);return t.length===1?t[0]??``:`(""+${t.map(e=>`(${ma(e)})`).join(`+`)})`}function ga(e){if(sa(e).some(e=>ca(e,`=<>`)))return Li(e);let t=la(e);return t.length>1&&t.some(e=>e.trim()===``)?Li(e):ha(e)}function _a(e){let t=la(e),n=t.flatMap(e=>ua(e).flatMap(({open:t,close:n})=>_a(e.slice(t+1,n))));return t.length>1?[...t,...n]:n}var va=`
2
+ \v\f\r _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,ya=74,ba=8,xa=14,Sa=31,Ca=127;function wa(e){let t=e.codePointAt(0)??0;return t<=ba||t>=xa&&t<=Sa||t===Ca}var Ta=/^[\u0300-\u036f]$/u,Ea=`34f.332.313 343.314.301 341.300 340.306.302.30c.30a.342.308.344.30b.303.307.338.327.328.304.30d 30e 312 315 31a 33d 33e 33f 346 34a 34b 34c 350 351 352 357 35b 35d 35e.316 317 318 319 31c 31d 31e 31f 320 329 32a 32b 32c 32f 333 33a 33b 33c 347 348 349 34d 34e 353 354 355 356 359 35a 35c 35f 362.336 337.335.305.309.30f.310.311.31b.321.322.323.324.325.326.32d.32e.330.331.334.339.345.358.360.361`.split(`.`),Da=0,Oa=`aeioucdhmrtvx`,ka=867,Aa=e=>Oa.charAt((e.codePointAt(0)??0)-ka)||e,ja=new Map(Ea.flatMap((e,t)=>e.split(` `).map(e=>[String.fromCodePoint(Number.parseInt(e,16)),t])));function Ma(e){let t=va.indexOf(e);return t>=0?t:ya+(e.codePointAt(0)??0)}function Na(e){let t={primary:[],accents:[]};return Array.from(e.normalize(`NFD`)).filter(e=>!wa(e)).map(Aa).forEach(e=>{let n=t.accents.at(-1);if(Ta.test(e)&&n!==void 0){let t=ja.get(e)??Da;t!==Da&&n.push(t)}else t.primary.push(Ma(e.toLowerCase())),t.accents.push([])}),t}function Pa(e,t){let n=Math.min(e.length,t.length);for(let r=0;r<n;r+=1){let[n,i]=[e[r],t[r]];if(n!==void 0&&i!==void 0&&n!==i)return n<i?-1:1}return e.length-t.length}function Fa(e,t){return e.reduce((e,n,r)=>e||Pa(n,t[r]??[]),0)}function Ia(e,t){let[n,r]=[Na(e),Na(t)];return Pa(n.primary,r.primary)||Fa(n.accents,r.accents)}var La=[`<>`,`<=`,`>=`,`=`,`<`,`>`],Ra=`=<>!`;function za(e){let t=[];return sa(e).forEach((e,n)=>{if(e.inLiteral||e.depth!==0||!Ra.includes(e.char))return;let r=t.at(-1);r!==void 0&&r.start+r.text.length===n?r.text+=e.char:t.push({start:n,text:e.char})}),t}var Ba=e=>La.some(t=>t===e);function Va(e){let t=za(e);if(t.length===0)return null;let n=t.map(e=>e.text);if(!n.every(Ba))return null;let r=[{start:0,text:``},...t].map((n,r)=>({from:n.start+n.text.length,to:t[r]?.start??e.length})).map(({from:t,to:n})=>e.slice(t,n).trim());return r.some(e=>e===``)?null:{operands:r,operators:n.filter(Ba)}}var Ha=0,Ua=1,Wa=2,Ga=e=>typeof e==`number`?Ha:typeof e==`boolean`?Wa:Ua;function Ka(e,t){let n=Ga(e)-Ga(t);return n===0?typeof e==`number`&&typeof t==`number`?e-t:typeof e==`boolean`&&typeof t==`boolean`?Number(e)-Number(t):Ia(String(e),String(t)):n}var qa={"=":e=>e===0,"<>":e=>e!==0,"<":e=>e<0,">":e=>e>0,"<=":e=>e<=0,">=":e=>e>=0};function Ja(e,t,n){return qa[e](Ka(t,n))}function Ya(e,t){return t.reduce((t,n,r)=>Ja(n,t,e[r+1]??``),e[0]??``)}var Xa=e=>typeof e==`number`?0:typeof e!=`boolean`&&``;function Za(e,t){return e.map((n,r)=>t[r]?r===0?Xa(e[1]??0):r===1&&Xa(e[0]??0):n)}var Qa=[`>=`,`<=`,`<>`,`!=`,`==`,`=`,`>`,`<`];function*$a(e){let t=null;for(let n=0;n<e.length;n++){let r=e[n];t===null?r===`"`||r===`'`?t=r:yield n:r===`\\`?n++:r===t&&(t=null)}}function eo(e){let t=e.trim();for(;t.startsWith(`(`)&&t.endsWith(`)`);){let e=0,n=!0;for(let r of $a(t)){let i=t[r];if(i===`(`)e++;else if(i===`)`){if(e--,e===0&&r<t.length-1){n=!1;break}if(e<0)return t}}if(!n||e!==0)return t;t=t.slice(1,-1).trim()}return t}function to(e){let t=eo(e);for(let e of $a(t))for(let n of Qa)if(t.startsWith(n,e))return{left:t.slice(0,e).trim(),operator:n,right:t.slice(e+n.length).trim()};return null}function no(e){return e.length>=2&&(e.startsWith(`"`)&&e.endsWith(`"`)||e.startsWith(`'`)&&e.endsWith(`'`))?{value:e.slice(1,-1).replace(/\\(["'\\])/g,`$1`),quoted:!0}:{value:e,quoted:!1}}function ro(e){let{value:t,quoted:n}=no(e.trim());if(n)return t;if(t===``)return``;let r=t.toUpperCase();if(r===`TRUE`)return!0;if(r===`FALSE`)return!1;let i=Number(t);return Number.isNaN(i)?t:i}var io={">=":`>=`,"<=":`<=`,"<>":`<>`,"!=":`<>`,"==":`=`,"=":`=`,">":`>`,"<":`<`};function ao(e,t){let[n,r]=[t(e.left),t(e.right)],i=e.left===``?Xa(r):n,a=e.right===``?Xa(n):r;return Ja(io[e.operator],i,a)}function oo(e){return typeof e==`boolean`?e:typeof e==`number`?e!==0:e!==``}function so(e,t){let n=to(e);return n?ao(n,t):oo(t(eo(e)))}function co(e){if(e==null)return`""`;let t=S(e)?e.code:e;return typeof t==`string`?`"${t.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`:t.toString()}var lo=String.raw`[\p{L}_][\p{L}\p{N}_.]*`,uo=String.raw`[\p{L}\p{N}_]`,fo=/^(?:'((?:[^']|'')+)'|([^!]+))!(.+)$/;function po(e){let[,t,n,r]=e.match(fo)??[],i=t===void 0?n:t.replace(/''/g,`'`);return i===void 0||r===void 0?null:{sheetName:i,ref:r}}function mo(e,t){let n=e.indexOf(`'`,t+1);return n===-1?-1:e[n+1]===`'`?mo(e,n+1):n+1}var ho=e=>e.trim()===``;function go(e,t){let n={at:t-1};for(;n.at>=0&&(ho(e[n.at]??``)||e[n.at]===`(`);)--n.at;return n.at<0?``:e[n.at]??``}function _o(e,t){let n={at:t};for(;n.at<e.length&&(ho(e[n.at]??``)||e[n.at]===`)`);)n.at+=1;return n.at>=e.length?``:e[n.at]??``}var vo=e=>e===``||e===`&`;function yo(e,t,n){let r=go(e,t),i=_o(e,n);return vo(r)&&vo(i)&&(r===`&`||i===`&`)}var G={div_zero:`#DIV/0!`,invalid_ref:`#REF!`,syntax:`#NAME?`,unknown:`#ERROR!`},bo={[G.div_zero]:`div_zero`,[G.invalid_ref]:`invalid_ref`,[G.syntax]:`syntax`},K=class extends Error{errorType;display;constructor(e,t,n){super(n??t),this.errorType=e,this.display=t,this.name=`FormulaError`}},xo=e=>e instanceof K,So=()=>new K(`div_zero`,G.div_zero,`Division by zero`),Co=e=>new K(`invalid_ref`,G.invalid_ref,`Invalid reference: ${e}`),wo=e=>new K(`syntax`,G.syntax,`Unknown function: ${e}`),To=e=>new K(`unknown`,G.unknown,e),Eo=e=>new K(bo[e]??`unknown`,e,`Propagated error: ${e}`),Do=e=>xo(e)?{type:e.errorType,display:e.display}:{type:`unknown`,display:G.unknown},Oo=/("(?:[^"\\]|\\.|"")*"?|'(?:[^']|'')*'?)/,ko=new RegExp(String.raw`(?<!${uo}|[$.!])(TRUE|FALSE)(?!${uo}|[$.]|\s*[(!])`,`giu`);function Ao(e){return e.split(Oo).map((e,t)=>t%2==1?e:e.replace(ko,e=>e.toLowerCase())).join(``)}var jo=/^\(*\s*(true|false)\s*\)*$/;function Mo(e){let[,t]=e.trim().match(jo)??[];return t===void 0?null:t===`true`}function No(e){return/["']/.test(e)?e:e.replace(/\btrue\b/g,`1`).replace(/\bfalse\b/g,`0`)}var Po=`+-*/^`;function Fo(e,t){let n=e.slice(t+1).split(``).findIndex((e,t,n)=>e===`"`&&!Io(n,t));return n===-1?e.length:t+1+n+1}function Io(e,t){let n=e.slice(0,t).reverse().findIndex(e=>e!==`\\`);return(n===-1?t:n)%2==1}function Lo(e){let t=[],n={index:0};for(;n.index<e.length;)if(e[n.index]===`"`){let r=Fo(e,n.index);t.push({start:n.index,end:r}),n.index=r}else n.index+=1;return t}var Ro=e=>e!==void 0&&Po.includes(e);function zo(e){let t=Lo(e),n=[],r={at:0};for(let{start:i,end:a}of t){let t=e.slice(0,i).trimEnd().at(-1),o=e.slice(a).trimStart()[0];if(!Ro(t)&&!Ro(o))continue;let s=C(e.slice(i+1,a-1).replace(/\\(.)/g,`$1`));if(s===null)return y;n.push(e.slice(r.at,i),`(${s})`),r.at=a}return n.push(e.slice(r.at)),n.join(``)}var Bo=RegExp(`^(${ct})\\((.*)\\)$`,`i`),Vo=RegExp(`^(${ct})\\(`,`i`);function Ho(e){if(e==null)return`0`;let t=S(e)?e.code:e;return typeof t==`string`?`"${t.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`:t.toString()}function Uo(e){let t=``,n=null;for(let r=0;r<e.length;r++){let i=e[r];if(n!==null){if(i===`\\`){r++;continue}i===n&&(n=null,t+=i)}else(i===`"`||i===`'`)&&(n=i),t+=i}return t}function Wo(e){let t=Uo(e).replace(/\b(?:true|false)\b/g,``);return/^[\d+\-*/(). "']*$/.test(t)}function Go(e,t){let n=e[t],r=t+1;for(;r<e.length;)if(e[r]===`\\`)r+=2;else{if(e[r]===n)return r+1;r++}return e.length}function Ko(e,t){let n=mo(e,t);if(n===-1||e[n]!==`!`)return null;let r=e.substring(n+1).match(/^(\$?[A-Z]+\$?\d+)/);return r?e.substring(t,n+1+r[0].length):null}var qo=new RegExp(String.raw`^(${lo})!`,`u`);function Jo(e,t){let n=e.substring(t),r=n.match(qo);if(r){let e=n.substring(r[0].length).match(/^(\$?[A-Z]+\$?\d+)/);if(e)return r[0]+e[0]}let i=n.match(/^(\$?[A-Z]+\$?\d+)/);return i?i[0]:null}function Yo(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`"`){n=Go(e,n);continue}if(r===`'`){let r=Ko(e,n);r?(t.push({ref:r,start:n}),n+=r.length):n=Go(e,n);continue}let i=Jo(e,n);i?(t.push({ref:i,start:n}),n+=i.length):n++}return t}function Xo(e,t,n){return[...t].reverse().reduce((e,{ref:t,start:r})=>e.slice(0,r)+n(t,r)+e.slice(r+t.length),e)}function Zo(e){let t=[],n=``,r=0,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];(s===`"`||s===`'`)&&!W(e,o)?(i?s===a&&(i=!1,a=``):(i=!0,a=s),n+=s):!i&&(s===`(`&&r++,s===`)`&&r--,s===`,`&&r===0)?(t.push(n.trim()),n=``):n+=s}return n.trim()&&t.push(n.trim()),t}function Qo(e){let t;try{t=Function(`return (${Ri(e)})`)()}catch{throw To()}if(typeof t==`number`){if(!Number.isFinite(t))throw So();return t}if(typeof t==`string`||typeof t==`boolean`)return t;throw To()}function $o(e){if(!e.includes(`&`))return null;let t=ga(e);return Wo(t)?(_a(e).filter(Bi).forEach(Qo),Qo(t)):null}var es=/^\(*\s*(true|false)\s*\)*$/i,ts=e=>(e.startsWith(`"`)||e.startsWith(`'`))&&e.endsWith(e[0]??``)&&Go(e,0)===e.length;function ns(e){let t=es.exec(e)?.[1];if(t!==void 0)return t.toLowerCase()===`true`;let n=$o(e);return n===null?Bi(e)||ts(eo(e))?Qo(e):null:n}var rs=e=>e!==null;function is(e,t){let n=Va(e),r=t.isCellEmpty;return!n||!r?null:n.operands.map(e=>{let t=as(e);return t!==null&&r(t)})}function as(e){let t=eo(e).trim(),[n,...r]=Yo(t);return n&&r.length===0&&n.start===0&&n.ref.length===t.length?n.ref:null}function os(e,t){return ua(e).filter(({open:t,close:n})=>{let r=e.slice(t+1,n).trim();return!/[\w.$]$/.test(e.slice(0,t))&&r!==``&&!r.includes(`:`)&&as(r)===null}).reduceRight((n,{open:r,close:i})=>{let a=t.evaluateFormula(e.slice(r+1,i));if(S(a))throw Eo(a.code);return n.slice(0,r)+Ho(a)+n.slice(i+1)},e)}function ss(e,t){let n=Ao(e),r=n.trim();if(ts(r)){let e=r.slice(1,-1),n=$e(e,t.preferDDMMYYYY);return n===null?e:n}let[,i,a]=n.match(Bo)??[];if(i!==void 0&&a!==void 0&&lt(i)){let e=0,n=!0;for(let t of a)if(t===`(`)e++;else if(t===`)`&&(e--,e<0)){n=!1;break}let r=i.toUpperCase(),o=A.get(r);if(o&&n){let e=Zo(a);if(o.minArgs!==void 0&&e.length<o.minArgs)throw ot(r,o.minArgs);if(o.maxArgs!==void 0&&e.length>o.maxArgs)throw Error(`${r} accepts at most ${o.maxArgs} argument${o.maxArgs===1?``:`s`}`);return o.handler(e,{functionName:r,getCellValue:t.getCellValue,getRangeValues:t.getRangeValues,getRangeValuesRaw:t.getRangeValuesRaw,getRangeValuesKeepingBlanks:t.getRangeValuesKeepingBlanks,countFilledCells:t.countFilledCells,evaluateFormula:t.evaluateFormula,isBlankReference:e=>{let n=as(e);return n!==null&&t.isCellEmpty?.(n)===!0},preferDDMMYYYY:t.preferDDMMYYYY,currentCell:t.currentCell})}if(n&&!o)throw wo(r)}let o=n,s=0,c=0;for(;s<o.length&&c<100;){if(c++,o[s]===`"`||o[s]===`'`){s=Go(o,s);continue}let[,e]=o.substring(s).match(Vo)??[];if(e===void 0||!lt(e)){if(s++,s>=o.length)break;continue}let n=s,r=s+e.length+1,i=1,a=r,l=!1,u=``;for(;a<o.length&&i>0;){let e=o[a];(e===`"`||e===`'`)&&!W(o,a)&&(l?e===u&&(l=!1,u=``):(l=!0,u=e)),l||(e===`(`?i++:e===`)`&&i--),a++}if(i===0){let e=o.substring(n,a),r=t.evaluateFormula(e);if(S(r))throw Eo(r.code);let i=typeof r==`string`?Ho(r):`(${r})`;o=o.substring(0,n)+i+o.substring(a),s=n+i.length}else s++}o=os(o,t);let l=Yo(o),u=l.length===1?l[0]:void 0;if(u){let e=o.slice(0,u.start),n=o.slice(u.start+u.ref.length);if(e.trim()===``&&n.trim()===``)return t.getCellValue(u.ref)}let d=o,f=is(d,t);o=Xo(o,l,(e,n)=>{if(yo(d,n,n+e.length)&&t.isCellEmpty?.(e))return`""`;let r=t.getCellValue(e),i=je(r);if(i!==null)throw Eo(i);return Ho(r)}),o=o.replace(/"([^"]+)"/g,(e,n)=>{let r=$e(n,t.preferDDMMYYYY);return r===null?e:r.toString()});let p=zo(o);if(S(p))throw Eo(p.code);o=p,o=Fi(o);let m=Va(o);if(m){let e=m.operands.map(ns),t=f?.length===e.length;if(e.every(rs))return Ya(t?Za(e,f):e,m.operators)}let h=$o(o);if(h!==null)return h;let ee=Mo(o);if(ee!==null)return ee;if(o=No(o),Vi(o))return Qo(zi(o));if(Bi(o))return Qo(o);let g=o.trim();return g.startsWith(`"`)&&g.endsWith(`"`)||g.startsWith(`'`)&&g.endsWith(`'`)?g.slice(1,-1):o}A.register({name:`IF`,handler:(e,t)=>{let n=O(t,e,0),r=O(t,e,1),i=O(t,e,2),a=z(t.evaluateFormula(n))?r:i;return/^["'](.*)["']$/.test(a)?a.slice(1,-1):t.evaluateFormula(a)},minArgs:3,maxArgs:3,description:`Returns one value if a condition is true and another if false`,examples:[`IF(A1>10, "High", "Low")`,`IF(B2>=5, SUM(C1:C10), 0)`],category:`Logical`}),A.register({name:`AND`,handler:(e,t)=>{for(let n of e)if(!z(t.evaluateFormula(n.trim())))return!1;return!0},minArgs:1,description:`Returns TRUE if all arguments are true`,examples:[`AND(A1>5, B1<10)`,`AND(A1>0, B1>0, C1>0)`],category:`Logical`}),A.register({name:`OR`,handler:(e,t)=>{for(let n of e)if(z(t.evaluateFormula(n.trim())))return!0;return!1},minArgs:1,description:`Returns TRUE if any argument is true`,examples:[`OR(A1>5, B1<10)`,`OR(A1>0, B1>0)`],category:`Logical`}),A.register({name:`NOT`,handler:(e,t)=>!z(t.evaluateFormula(O(t,e,0))),minArgs:1,maxArgs:1,description:`Reverses the logical value of its argument`,examples:[`NOT(A1>5)`,`NOT(B1)`],category:`Logical`}),A.register({name:`IFERROR`,handler:(e,t)=>{try{let n=t.evaluateFormula(O(t,e,0));return Me(n)?t.evaluateFormula(O(t,e,1)):n}catch{return t.evaluateFormula(O(t,e,1))}},minArgs:2,maxArgs:2,description:`Returns a value if expression is an error, otherwise returns the expression`,examples:[`IFERROR(A1/B1, 0)`,`IFERROR(VLOOKUP(A1, B1:C10, 2), "Not found")`],category:`Logical`}),A.register({name:`IFNA`,handler:(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=S(n)&&n.code===x.code;return n==null||r?t.evaluateFormula(O(t,e,1)):n},minArgs:2,maxArgs:2,description:`Returns a value if expression is #N/A, otherwise returns the expression`,examples:[`IFNA(A1, "N/A")`,`IFNA(MATCH(A1, B1:B10), 0)`],category:`Logical`}),A.register({name:`IFS`,handler:(e,t)=>{if(e.length<2||e.length%2!=0)throw Error(`IFS requires an even number of arguments (condition-value pairs)`);for(let n=0;n<e.length;n+=2){let r=O(t,e,n),i=O(t,e,n+1);if(so(Xo(r,Yo(r),e=>co(t.getCellValue(e))),e=>{let n=ro(e);return typeof n==`string`&&n===e.trim()?t.evaluateFormula(e):n}))return/^["'](.*)["']$/.test(i)?i.slice(1,-1):t.evaluateFormula(i)}return x},minArgs:2,description:`Checks multiple conditions and returns the first true result`,examples:[`IFS(A1>90, "A", A1>80, "B", A1>70, "C")`,`IFS(B1="Yes", 1, B1="No", 0)`],category:`Logical`}),A.register({name:`TRUE`,handler:()=>!0,minArgs:0,maxArgs:0,description:`Returns the logical value TRUE`,examples:[`TRUE()`,`IF(A1>0, TRUE(), FALSE())`],category:`Logical`}),A.register({name:`FALSE`,handler:()=>!1,minArgs:0,maxArgs:0,description:`Returns the logical value FALSE`,examples:[`FALSE()`,`IF(A1>0, TRUE(), FALSE())`],category:`Logical`});function cs(e){return/[YMD]|MMM|DD|YYYY|h:mm|AM\/PM/i.test(e)}var ls=/YYYY|YY|MMMM|MMM|MM|M|dddd|ddd|DD|D|AM\/PM|am\/pm|HH|H|hh|h|mm|ss/g;function us(e,t){let n=D(e),r=n.getUTCFullYear(),i=n.getUTCMonth(),a=n.getUTCDate(),o=n.getUTCHours(),s=n.getUTCMinutes(),c=n.getUTCSeconds(),l=n.getUTCDay(),u=/AM\/PM|am\/pm/.test(t),d=o%12||12,f=o>=12,p={YYYY:r.toString(),YY:(r%100).toString().padStart(2,`0`),MMMM:Ue[i]??Ue[0],MMM:He[i]??He[0],MM:(i+1).toString().padStart(2,`0`),M:(i+1).toString(),dddd:Ge[l]??Ge[0],ddd:We[l]??We[0],DD:a.toString().padStart(2,`0`),D:a.toString(),"AM/PM":f?`PM`:`AM`,"am/pm":f?`pm`:`am`,HH:o.toString().padStart(2,`0`),H:o.toString(),hh:(u?d:o).toString().padStart(2,`0`),h:(u?d:o).toString(),mm:s.toString().padStart(2,`0`),ss:c.toString().padStart(2,`0`)};return t.replace(ls,e=>p[e]??e)}var ds=3,fs=e=>Array.from(e).reduce((t,n,r)=>r>0&&(e.length-r)%ds===0?`${t},${n}`:`${t}${n}`,``),ps=e=>{let[t,...n]=e.split(`.`);return t===void 0?e:[fs(t),...n].join(`.`)};function ms(e,t){if(!t)return e.toString();try{if(cs(t))return us(e,t);if(t.includes(`$`)){let n=(t.match(/\.0+/)||[``])[0].length-1,r=Math.abs(e).toFixed(n>=0?n:0),i=`$`+(t.includes(`,`)?ps(r):r);return e<0?`-`+i:i}if(t.includes(`%`)){let n=(t.match(/\.0+/)||[``])[0].length-1;return(e*100).toFixed(n>=0?n:2)+`%`}if(t.includes(`,`)){let n=(t.match(/\.0+/)||[``])[0].length-1,r=ps(Math.abs(e).toFixed(n>=0?n:0));return e<0?`-`+r:r}let n=(t.match(/\.0+/)||[``])[0].length-1;return n>=0?e.toFixed(n):e.toString()}catch(t){return console.error(`Format error:`,t),e.toString()}}var hs=100,gs=`?\\*_[]"@;/`,_s=/[#0][#0,.]*/,vs=/[#0]/,ys=/0+$/,bs=(e,t)=>Array.from(e).filter(e=>t.includes(e)).length,xs=e=>Array.from(e).some(e=>gs.includes(e)),Ss=e=>{let t=_s.exec(e);if(!t||t[0].endsWith(`,`))return null;let n=e.slice(0,t.index),r=e.slice(t.index+t[0].length);if(vs.test(r)||xs(n)||xs(r))return null;let[i,a=``,...o]=t[0].split(`.`);return i===void 0||o.length>0?null:{prefix:n,suffix:r,useGrouping:i.includes(`,`),integerMinDigits:bs(i,`0`),minDecimals:bs(a,`0`),maxDecimals:bs(a,`#0`),isPercent:n.includes(`%`)||r.includes(`%`)}},Cs=(e,t)=>{let n=e.replace(ys,``);return n.length>=t?n:e.slice(0,t)},ws=(e,t)=>{let n=e.toFixed(t.maxDecimals),r=n.indexOf(`.`),i=r===-1?n:n.slice(0,r),a=r===-1?``:n.slice(r+1),o=i.padStart(t.integerMinDigits,`0`),s=t.useGrouping?fs(o):o,c=Cs(a,t.minDecimals);return c?`${s}.${c}`:s},Ts=e=>Array.from(e).every(e=>e===`0`||e===`,`||e===`.`),Es=(e,t)=>{if(!Number.isFinite(e))return null;let n=Ss(t);if(!n)return null;let r=n.isPercent?e*hs:e,i=ws(Math.abs(r),n);return`${r<0&&!Ts(i)?`-`:``}${n.prefix}${i}${n.suffix}`},Ds=e=>/[\p{L}\p{M}]/u.test(e),Os=e=>{let t=Array.from(e);return t.map((e,n)=>{let r=t[n-1];return r===void 0||!Ds(r)?e.toUpperCase():e.toLowerCase()}).join(``)},ks=e=>!Number.isFinite(e)||e<0?y:Math.trunc(e),As=(e,t)=>{let n=ks(t);return S(n)?n:e.substring(0,n)},js=(e,t)=>{let n=ks(t);return S(n)?n:e.substring(e.length-n)},Ms=(e,t,n,r)=>{let i=e.split(t);return r>i.length-1?e:i.slice(0,r).join(t)+n+i.slice(r).join(t)},Ns=(e,t,n,r)=>{if(t===``)return e;if(r===void 0)return e.split(t).join(n);let i=Math.trunc(r);return!Number.isFinite(i)||i<=0?y:Ms(e,t,n,i)},Ps=(e,t)=>e.isBlankReference?.(t)?``:ut(e.evaluateFormula(t)),q=(e,t,n)=>Ps(e,O(e,t,n)),Fs=(e,t)=>e.map(e=>Ps(t,e.trim())).join(``),Is=Fs,Ls=(e,t)=>As(q(t,e,0),e.length===2?Number(t.evaluateFormula(O(t,e,1))):1),Rs=(e,t)=>js(q(t,e,0),e.length===2?Number(t.evaluateFormula(O(t,e,1))):1),zs=(e,t,n)=>{let r=ks(n);if(S(r))return r;if(!Number.isFinite(t)||t<1)return y;let i=Math.trunc(t)-1;return e.substring(i,i+r)},Bs=(e,t)=>zs(q(t,e,0),Number(t.evaluateFormula(O(t,e,1))),Number(t.evaluateFormula(O(t,e,2)))),Vs=(e,t)=>q(t,e,0).length,Hs=(e,t)=>q(t,e,0).toUpperCase(),Us=(e,t)=>q(t,e,0).toLowerCase(),Ws=(e,t)=>Os(q(t,e,0)),Gs=(e,t)=>q(t,e,0).trim().replace(/\s+/g,` `),Ks=(e,t)=>Ns(q(t,e,0),q(t,e,1),q(t,e,2),e.length===4?Number(t.evaluateFormula(O(t,e,3))):void 0),qs=(e,t)=>{let n=q(t,e,0),r=Number(t.evaluateFormula(O(t,e,1)))-1,i=Number(t.evaluateFormula(O(t,e,2))),a=q(t,e,3);return n.substring(0,r)+a+n.substring(r+i)},Js=(e,t,n,r)=>{let i=r.caseInsensitive?e.toLowerCase():e,a=(r.caseInsensitive?t.toLowerCase():t).indexOf(i,n);return a===-1?y:a+1},Ys=e=>(t,n)=>Js(q(n,t,0),q(n,t,1),t.length===3?Number(n.evaluateFormula(O(n,t,2)))-1:0,{caseInsensitive:e}),Xs=Ys(!1),Zs=Ys(!0),Qs=e=>e.replace(/^["']/,``).replace(/["']$/,``),$s=(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=Qs(q(t,e,1));return typeof n==`number`?Es(n,r)??ut(n):ut(n)},ec=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/,tc=e=>{if(!ec.test(e))return null;let t=Number(e);return Number.isFinite(t)?t:null},nc=e=>{let t=e.replace(/[$,]/g,``).trim();if(t.endsWith(`%`)){let e=tc(t.slice(0,-1).trim());return e===null?y:e/100}let n=tc(t);return n===null?y:n};A.register({name:`CONCATENATE`,handler:Fs,minArgs:1,description:`Joins several text strings into one string`,examples:[`CONCATENATE("Hello", " ", "World")`,`CONCATENATE(A1, B1)`],category:`Text`}),A.register({name:`CONCAT`,handler:Is,minArgs:1,description:`Joins several text strings into one string (same as CONCATENATE)`,examples:[`CONCAT("Hello", " ", "World")`,`CONCAT(A1, B1)`],category:`Text`}),A.register({name:`LEFT`,handler:Ls,minArgs:1,maxArgs:2,description:`Returns the leftmost characters from a text string`,examples:[`LEFT("Hello", 2)`,`LEFT(A1, 3)`],category:`Text`}),A.register({name:`RIGHT`,handler:Rs,minArgs:1,maxArgs:2,description:`Returns the rightmost characters from a text string`,examples:[`RIGHT("Hello", 2)`,`RIGHT(A1, 3)`],category:`Text`}),A.register({name:`MID`,handler:Bs,minArgs:3,maxArgs:3,description:`Returns characters from the middle of a text string`,examples:[`MID("Hello", 2, 3)`,`MID(A1, 1, 5)`],category:`Text`}),A.register({name:`LEN`,handler:Vs,minArgs:1,maxArgs:1,description:`Returns the number of characters in a text string`,examples:[`LEN("Hello")`,`LEN(A1)`],category:`Text`}),A.register({name:`UPPER`,handler:Hs,minArgs:1,maxArgs:1,description:`Converts text to uppercase`,examples:[`UPPER("hello")`,`UPPER(A1)`],category:`Text`}),A.register({name:`LOWER`,handler:Us,minArgs:1,maxArgs:1,description:`Converts text to lowercase`,examples:[`LOWER("HELLO")`,`LOWER(A1)`],category:`Text`}),A.register({name:`PROPER`,handler:Ws,minArgs:1,maxArgs:1,description:`Capitalizes the first letter of each word`,examples:[`PROPER("hello world")`,`PROPER(A1)`],category:`Text`}),A.register({name:`TRIM`,handler:Gs,minArgs:1,maxArgs:1,description:`Removes extra spaces from text`,examples:[`TRIM(" hello world ")`,`TRIM(A1)`],category:`Text`}),A.register({name:`SUBSTITUTE`,handler:Ks,minArgs:3,maxArgs:4,description:`Replaces old text with new text in a string`,examples:[`SUBSTITUTE("Hello World", "World", "Earth")`,`SUBSTITUTE(A1, "old", "new", 1)`],category:`Text`}),A.register({name:`REPLACE`,handler:qs,minArgs:4,maxArgs:4,description:`Replaces part of a text string with a different text string`,examples:[`REPLACE("Hello World", 7, 5, "Earth")`,`REPLACE(A1, 1, 3, "New")`],category:`Text`}),A.register({name:`FIND`,handler:Xs,minArgs:2,maxArgs:3,description:`Finds one text string within another (case-sensitive)`,examples:[`FIND("o", "Hello")`,`FIND("World", A1)`],category:`Text`}),A.register({name:`SEARCH`,handler:Zs,minArgs:2,maxArgs:3,description:`Finds one text string within another (case-insensitive)`,examples:[`SEARCH("O", "Hello")`,`SEARCH("world", A1)`],category:`Text`}),A.register({name:`TEXT`,handler:$s,minArgs:2,maxArgs:2,description:`Formats a number and converts it to text`,examples:[`TEXT(1234.5, "$#,##0.00")`,`TEXT(0.5, "0%")`],category:`Text`}),A.register({name:`VALUE`,handler:(e,t)=>nc(ut(t.evaluateFormula(O(t,e,0)))),minArgs:1,maxArgs:1,description:`Converts a text string to a number`,examples:[`VALUE("123")`,`VALUE("$1,234.56")`],category:`Text`}),A.register({name:`EXACT`,handler:(e,t)=>q(t,e,0)===q(t,e,1),minArgs:2,maxArgs:2,description:`Checks if two text strings are exactly the same`,examples:[`EXACT("Hello", "hello")`,`EXACT(A1, B1)`],category:`Text`});function rc(e,t,n,r,i){if(e===0)return-(r+n*t);let a=(1+e)**+t;return-r*a-n*(a-1)*(1+e*i)/e}function ic(e,t,n,r,i){if(e===0)return-(r+n)/t;let a=(1+e)**+t;return-e*(r+n*a)/((a-1)*(1+e*i))}function ac(e,t,n,r,i,a){let o=ic(e,n,r,i,a);if(t===1&&a===1)return 0;let s=rc(e,a===1?t-2:t-1,o,r,a)*e;return a===1?s/(1+e):s}function oc(e,t,n,r,i,a){return ic(e,n,r,i,a)-ac(e,t,n,r,i,a)}function sc(e,t,n,r,i){if(e===0)return-(r+n*t);let a=(1+e)**+t;return(-r-n*(a-1)*(1+e*i)/e)/a}function cc(e,t,n,r,i){if(e===0)return-(r+n)/t;let a=t*(1+e*i);return Math.log((a-r*e)/(a+n*e))/Math.log(1+e)}var lc=100,uc=1e-7;function dc(e,t,n,r,i,a){let o=a;for(let a=0;a<lc;a++){Math.abs(o)<uc&&(o=uc);let a=(1+o)**+e,s=n*a+t*((a-1)/o)*(1+o*i)+r,c=e*n*(1+o)**(e-1)+t*(1+o*i)*(e*(1+o)**(e-1)*o-(a-1))/(o*o)+t*i*((a-1)/o),l=o-s/c;if(Math.abs(l-o)<uc)return Number.isFinite(l)?l:b;o=l}return b}function fc(e,t){return t.reduce((t,n,r)=>t+n/(1+e)**+(r+1),0)}function pc(e,t){return e.reduce((e,n,r)=>{let i=(1+t)**+r;return{npv:e.npv+n/i,dnpv:e.dnpv-r*n/(i*(1+t))}},{npv:0,dnpv:0})}function mc(e,t){let n=t;for(let t=0;t<lc;t++){let{npv:t,dnpv:r}=pc(e,n);if(Math.abs(t)<uc)return n;if(Math.abs(r)<uc)return b;let i=n-t/r;if(Math.abs(i-n)<uc)return Number.isFinite(i)?i:b;n=i}return b}var hc=(e,t,n,r)=>{let i=n=>j(t.evaluateFormula(O(t,e,n))),a=Array.from({length:n},(e,t)=>i(t)),o=r.map((t,r)=>e.length>n+r?i(n+r):t);return[...a,...o]},gc=(e,t)=>{let[n,r,i,a,o]=hc(e,t,3,[0,0]);return rc(n,r,i,a,o)},_c=(e,t)=>{let[n,r,i,a,o]=hc(e,t,3,[0,0]);return sc(n,r,i,a,o)},vc=(e,t)=>{let[n,r,i,a,o]=hc(e,t,3,[0,0]);return ic(n,r,i,a,o)},yc=(e,t)=>{let[n,r,i,a,o]=hc(e,t,3,[0,0]);return cc(n,r,i,a,o)},bc=(e,t)=>{let[n,r,i,a,o,s]=hc(e,t,3,[0,0,.1]);return dc(n,r,i,a,o,s)},xc=e=>(t,n)=>{let[r,i,a,o,s,c]=hc(t,n,4,[0,0]);return e(r,i,a,o,s,c)},Sc=xc(ac),Cc=xc(oc),wc=(e,t)=>e.flatMap(e=>(e.includes(`:`)?t.getRangeValues(e):[t.evaluateFormula(e)]).map(j));A.register({name:`FV`,handler:gc,minArgs:3,maxArgs:5,description:`Calculates the future value of an investment based on periodic, constant payments and a constant interest rate`,examples:[`FV(0.06/12, 12, -100, -1000, 1)`,`FV(A1, A2, A3)`],category:`Financial`}),A.register({name:`PV`,handler:_c,minArgs:3,maxArgs:5,description:`Calculates the present value of an investment based on periodic, constant payments and a constant interest rate`,examples:[`PV(0.08/12, 12*20, 500, 0, 0)`,`PV(A1, A2, A3)`],category:`Financial`}),A.register({name:`PMT`,handler:vc,minArgs:3,maxArgs:5,description:`Calculates the payment for a loan based on constant payments and a constant interest rate`,examples:[`PMT(0.06/12, 30*12, 250000)`,`PMT(A1, A2, A3)`],category:`Financial`}),A.register({name:`NPER`,handler:yc,minArgs:3,maxArgs:5,description:`Calculates the number of periods for an investment based on periodic, constant payments and a constant interest rate`,examples:[`NPER(0.06/12, -1000, 50000, 0, 0)`,`NPER(A1, A2, A3)`],category:`Financial`}),A.register({name:`RATE`,handler:bc,minArgs:3,maxArgs:6,description:`Calculates the interest rate per period of an annuity using iteration`,examples:[`RATE(12, -100, 1000, 0, 0, 0.1)`,`RATE(A1, A2, A3)`],category:`Financial`}),A.register({name:`IPMT`,handler:Sc,minArgs:4,maxArgs:6,description:`Calculates the interest payment for a given period for an investment`,examples:[`IPMT(0.06/12, 1, 30*12, 250000)`,`IPMT(A1, A2, A3, A4)`],category:`Financial`}),A.register({name:`PPMT`,handler:Cc,minArgs:4,maxArgs:6,description:`Calculates the payment on the principal for a given period for an investment`,examples:[`PPMT(0.06/12, 1, 30*12, 250000)`,`PPMT(A1, A2, A3, A4)`],category:`Financial`}),A.register({name:`NPV`,handler:(e,t)=>fc(j(t.evaluateFormula(O(t,e,0))),wc(e.slice(1),t)),minArgs:2,description:`Calculates the net present value of an investment based on a discount rate and a series of future cash flows`,examples:[`NPV(0.1, -10000, 3000, 4200, 6800)`,`NPV(A1, B1:B10)`],category:`Financial`}),A.register({name:`IRR`,handler:(e,t)=>{let n=t.getRangeValues(O(t,e,0)).map(j),r=e.length===2?j(t.evaluateFormula(O(t,e,1))):.1;if(n.length===0)throw Error(`IRR requires at least one value`);return mc(n,r)},minArgs:1,maxArgs:2,description:`Calculates the internal rate of return for a series of cash flows`,examples:[`IRR(A1:A5, 0.1)`,`IRR(B1:B10)`],category:`Financial`});function Tc(e){let t=0;for(let n=0;n<e.length;n++)t=t*26+(e.charCodeAt(n)-64);return t-1}function J(e){let t=``,n=e+1;for(;n>0;){let e=(n-1)%26;t=String.fromCharCode(65+e)+t,n=Math.floor((n-1)/26)}return t}var Ec=/\$?[A-Z]+\$?\d+:\$?[A-Z]+\$?\d+/g,Dc=/\$?[A-Z]+\$?\d+/g;function Oc(e){return e.startsWith(`=`)?e.slice(1):e}var kc=/^([A-Z]+)(\d+)$/;function Ac(e){let[,t,n]=e.match(kc)??[];return t===void 0||n===void 0?null:{col:Tc(t),rowNumber:parseInt(n,10)}}function jc(e){let[t,n,...r]=e.split(`:`);if(t===void 0||n===void 0||r.length>0)return null;let i=Ac(t),a=Ac(n);return i&&a?{start:i,end:a}:null}function Mc(e){let t=jc(e.replace(/\$/g,``));if(!t)return[];let{start:n,end:r}=t,i=[];for(let e=n.rowNumber-1;e<=r.rowNumber-1;e++)for(let t=n.col;t<=r.col;t++)i.push({row:e,col:t});return i}function Nc(e){let t=e.trim().toUpperCase();if(t.includes(`:`)){let e=Mc(t);return e.length>0?e:null}let n=Pc(t);return n?[n]:null}function Pc(e){let t=Ac(e.replace(/\$/g,``));return t?{col:t.col,row:t.rowNumber-1}:null}var Fc=/^\$?[A-Za-z]+\$?\d+$/;function Ic(e){let t=e.lastIndexOf(`!`),n=t>=0?e.slice(0,t+1):``,r=t>=0?e.slice(t+1):e,i=r.split(`:`).every(e=>Fc.test(e))?jc(r.replace(/\$/g,``).toUpperCase()):null;if(!i)return null;let{start:a,end:o}=i;return{sheetPrefix:n,startCol:a.col,startRow:a.rowNumber,endCol:o.col,endRow:o.rowNumber}}var Lc=0,Rc=1;function zc(e,t){let n=Math.trunc(e);return Number.isFinite(n)?n===Lc?t===1?0:null:n<Rc||n>t?null:n-Rc:null}function Bc(e,t,n){let r=zc(t,e.endRow-e.startRow+1),i=zc(n,e.endCol-e.startCol+1);return r===null||i===null?null:{colIndex:e.startCol+i,row:e.startRow+r}}function Vc(e,t){let n=Math.trunc(e);return!Number.isFinite(n)||n<Rc||n>t?null:n-Rc}function Hc(e){let t=Oc(e),n=[],r=new Set,i=e=>{let t=`${e.row},${e.col}`;r.has(t)||(r.add(t),n.push(e))};for(let e of t.match(Ec)??[])for(let t of Mc(e))i(t);let a=t.replace(Ec,``);for(let e of a.match(Dc)??[]){let t=Pc(e);t&&i(t)}return n}function Uc(e){if(typeof e==`boolean`)return e;if(typeof e==`number`)return e!==0;if(S(e))return!1;let t=e.trim().toUpperCase();return t===`TRUE`||t===`1`}function Wc(e){let t=e.trim();return t.includes(`:`)?Ic(t):Ic(`${t}:${t.slice(t.lastIndexOf(`!`)+1)}`)}var Gc=(e,t)=>Array.from({length:Math.max(0,t-e+1)},(t,n)=>e+n),Kc=(e,t,n,r,i)=>Gc(r,i).map(r=>e.getCellValue(`${t}${n}${r}`)),qc=(e,t,n,r,i)=>Gc(r,i).map(r=>e.getCellValue(`${t}${J(r)}${n}`)),Jc=(e,t)=>e.reduce((e,n,r)=>t(n)?r:e,-1),Yc=(e,t)=>{let n=e.findIndex(e=>!t(e));return(n===-1?e.length:n)-1},Xc=(e,t)=>typeof e==`number`&&typeof t==`number`?e-t:String(e).localeCompare(String(t)),Zc=(e,t,n=1,r=1)=>{if(n===0){let n=typeof e==`string`&&(e.includes(`*`)||e.includes(`?`))?gt(e):t=>t==e;return r===1?t.findIndex(n):Jc(t,n)}return n===1?Yc(t,t=>Xc(t,e)<=0):n===-1?Yc(t,t=>Xc(t,e)>=0):-1},Qc=(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=Ic(O(t,e,1));if(!r)throw Error(`Invalid table array range`);let i=j(t.evaluateFormula(O(t,e,2))),a=+!!Uc(e.length!==4||t.evaluateFormula(O(t,e,3))),o=Vc(i,r.endCol-r.startCol+1);if(o===null)return Te;let s=J(r.startCol),c=Zc(n,Kc(t,r.sheetPrefix,s,r.startRow,r.endRow),a);if(c===-1)return x;let l=J(r.startCol+o),u=r.startRow+c;return t.getCellValue(`${r.sheetPrefix}${l}${u}`)},$c=(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=Ic(O(t,e,1));if(!r)throw Error(`Invalid range format`);let i=j(t.evaluateFormula(O(t,e,2))),a=+!!Uc(e.length!==4||t.evaluateFormula(O(t,e,3))),o=Vc(i,r.endRow-r.startRow+1);if(o===null)return Te;let s=Zc(n,qc(t,r.sheetPrefix,r.startRow,r.startCol,r.endCol),a);if(s===-1)return x;let c=J(r.startCol+s),l=r.startRow+o;return t.getCellValue(`${r.sheetPrefix}${c}${l}`)},el=(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=O(t,e,1),i=e.length===3?j(t.evaluateFormula(O(t,e,2))):1,a=Zc(n,st(t)(r),i);return a===-1?x:a+1},tl=(e,t)=>{let n=Ic(O(t,e,0));if(!n)throw Error(`Invalid range format`);let r=Bc(n,j(t.evaluateFormula(O(t,e,1))),e.length>=3?j(t.evaluateFormula(O(t,e,2))):1);return r?t.getCellValue(`${n.sheetPrefix}${J(r.colIndex)}${r.row}`):Te},nl=(e,t)=>{let n=t.evaluateFormula(O(t,e,0)),r=O(t,e,1),i=O(t,e,2),a=e.length>=4?t.evaluateFormula(O(t,e,3)):x,o=e.length>=5?j(t.evaluateFormula(O(t,e,4))):0,s=e.length>=6?j(t.evaluateFormula(O(t,e,5))):1,c=st(t),l=c(r),u=c(i),d=-1;if(o===0||o===2)d=Zc(n,l,0,s);else{let e=1/0;for(let t=0;t<l.length;t++){let r=s===1?t:l.length-1-t,i=l[r];if(i==n){d=r;break}if(typeof i==`number`&&typeof n==`number`){let t=i-n;o===-1&&t<0&&Math.abs(t)<e?(e=Math.abs(t),d=r):o===1&&t>0&&t<e&&(e=t,d=r)}}}if(d===-1)return a;let f=u[d];return f===void 0?x:f},rl=e=>(t,n)=>{if(t.length===0)return n.currentCell?e(n.currentCell):y;let r=Wc(O(n,t,0));return r?e({row:r.startRow-1,col:r.startCol}):y},il=e=>(t,n)=>{let r=Wc(O(n,t,0));return r?e(r):y};A.register({name:`VLOOKUP`,handler:Qc,minArgs:3,maxArgs:4,description:`Looks for a value in the leftmost column of a table, and then returns a value in the same row from a column you specify`,examples:[`VLOOKUP(105, A2:C10, 2)`,`VLOOKUP("Smith", A2:E10, 5, FALSE)`],category:`Lookup & Reference`}),A.register({name:`HLOOKUP`,handler:$c,minArgs:3,maxArgs:4,description:`Looks for a value in the top row of a table, and then returns a value in the same column from a row you specify`,examples:[`HLOOKUP("Axles", A1:C10, 2, TRUE)`],category:`Lookup & Reference`}),A.register({name:`MATCH`,handler:el,minArgs:2,maxArgs:3,description:`Returns the relative position of an item in an array that matches a specified value`,examples:[`MATCH(25, A1:A10, 0)`,`MATCH("b", A1:A5, 0)`],category:`Lookup & Reference`}),A.register({name:`INDEX`,handler:tl,minArgs:2,maxArgs:4,description:`Returns the value of an element in a table or an array, selected by the row and column number indexes`,examples:[`INDEX(A1:B5, 2, 2)`,`INDEX(A1:A10, 5)`],category:`Lookup & Reference`}),A.register({name:`XLOOKUP`,handler:nl,minArgs:3,maxArgs:6,description:`Searches a range or an array, and returns an item corresponding to the first match it finds`,examples:[`XLOOKUP(A1, B1:B10, C1:C10)`,`XLOOKUP("USA", Countries, Populations)`],category:`Lookup & Reference`}),A.register({name:`ROW`,handler:rl(e=>e.row+1),minArgs:0,maxArgs:1,description:`Returns the row number of a reference, or of the cell the formula is in`,examples:[`ROW()`,`ROW(C10)`,`ROW()-1`],category:`Lookup & Reference`}),A.register({name:`COLUMN`,handler:rl(e=>e.col+1),minArgs:0,maxArgs:1,description:`Returns the column number of a reference, or of the cell the formula is in`,examples:[`COLUMN()`,`COLUMN(D3)`],category:`Lookup & Reference`}),A.register({name:`ROWS`,handler:il(e=>e.endRow-e.startRow+1),minArgs:1,maxArgs:1,description:`Returns the number of rows in a reference`,examples:[`ROWS(A2:C10)`],category:`Lookup & Reference`}),A.register({name:`COLUMNS`,handler:il(e=>e.endCol-e.startCol+1),minArgs:1,maxArgs:1,description:`Returns the number of columns in a reference`,examples:[`COLUMNS(A2:C10)`],category:`Lookup & Reference`});var al=864e5,Y=12;function ol(e,t){let n=e.getUTCMonth()+t,r=e.getUTCFullYear()+Math.floor(n/Y),i=(n%Y+Y)%Y,a=new Date(Date.UTC(r,i+1,0)).getUTCDate(),o=Math.min(e.getUTCDate(),a);return new Date(Date.UTC(r,i,o))}function sl(e,t,n){if(e>t)return b;let r=D(e),i=D(t),a=i.getUTCFullYear()-r.getUTCFullYear(),o=i.getUTCMonth()-r.getUTCMonth(),s=i.getUTCDate()-r.getUTCDate();switch(n.toUpperCase()){case`Y`:{let e=a;return o<0||o===0&&s<0?e-1:e}case`M`:{let e=a*Y+o;return s<0?e-1:e}case`D`:return Math.floor(t-e);case`MD`:{let e=ol(r,a*Y+o-+(s<0)),t=Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate());return Math.round((t-e.getTime())/al)}case`YM`:{let e=s<0?o-1:o;return e<0?e+Y:e}case`YD`:{let e=new Date(r);return e.setUTCFullYear(i.getUTCFullYear()),e.getTime()-i.getTime()>0&&e.setUTCFullYear(i.getUTCFullYear()-1),Math.floor((i.getTime()-e.getTime())/al)}default:return b}}var cl=()=>{let e=new Date;return E(new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds())))},ll=()=>{let e=new Date;return E(new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())))},ul=(e,t)=>{let n=j(t.evaluateFormula(O(t,e,0))),r=j(t.evaluateFormula(O(t,e,1))),i=j(t.evaluateFormula(O(t,e,2)));return E(new Date(Date.UTC(n,r-1,i)))},dl=(e,t)=>{let n=j(t.evaluateFormula(O(t,e,0))),r=j(t.evaluateFormula(O(t,e,1))),i=j(t.evaluateFormula(O(t,e,2))),a=n*3600+r*60+i,o=86400;return a%o/o},fl=(e,t,n)=>T(t.evaluateFormula(O(t,e,n))),pl=e=>(t,n)=>{let r=fl(t,n,0);return S(r)?r:e(r)},ml=86400,hl=e=>Math.round((e-Math.floor(e))*ml),gl=pl(e=>D(e).getUTCFullYear()),_l=pl(e=>D(e).getUTCMonth()+1),vl=pl(e=>D(e).getUTCDate()),yl=pl(e=>Math.floor(hl(e)/3600)),bl=pl(e=>Math.floor(hl(e)%3600/60)),xl=pl(e=>hl(e)%60);A.register({name:`NOW`,handler:cl,minArgs:0,maxArgs:0,description:`Returns the serial number of the current date and time`,examples:[`NOW()`],category:`Date & Time`}),A.register({name:`TODAY`,handler:ll,minArgs:0,maxArgs:0,description:`Returns the serial number of today's date`,examples:[`TODAY()`],category:`Date & Time`}),A.register({name:`DATE`,handler:ul,minArgs:3,maxArgs:3,description:`Returns the serial number that represents a particular date`,examples:[`DATE(2023, 11, 25)`],category:`Date & Time`}),A.register({name:`TIME`,handler:dl,minArgs:3,maxArgs:3,description:`Returns the serial number of a particular time`,examples:[`TIME(14, 30, 0)`],category:`Date & Time`}),A.register({name:`YEAR`,handler:gl,minArgs:1,maxArgs:1,description:`Converts a serial number to a year`,examples:[`YEAR(TODAY())`,`YEAR(A1)`],category:`Date & Time`}),A.register({name:`MONTH`,handler:_l,minArgs:1,maxArgs:1,description:`Converts a serial number to a month`,examples:[`MONTH(TODAY())`,`MONTH(A1)`],category:`Date & Time`}),A.register({name:`DAY`,handler:vl,minArgs:1,maxArgs:1,description:`Converts a serial number to a day of the month`,examples:[`DAY(TODAY())`,`DAY(A1)`],category:`Date & Time`}),A.register({name:`HOUR`,handler:yl,minArgs:1,maxArgs:1,description:`Converts a serial number to an hour`,examples:[`HOUR(NOW())`,`HOUR(A1)`],category:`Date & Time`}),A.register({name:`MINUTE`,handler:bl,minArgs:1,maxArgs:1,description:`Converts a serial number to a minute`,examples:[`MINUTE(NOW())`,`MINUTE(A1)`],category:`Date & Time`}),A.register({name:`SECOND`,handler:xl,minArgs:1,maxArgs:1,description:`Converts a serial number to a second`,examples:[`SECOND(NOW())`,`SECOND(A1)`],category:`Date & Time`}),A.register({name:`DATEDIF`,handler:(e,t)=>{let n=fl(e,t,0);if(S(n))return n;let r=fl(e,t,1);return S(r)?r:sl(n,r,ut(t.evaluateFormula(O(t,e,2))))},minArgs:3,maxArgs:3,description:`Calculates the number of days, months, or years between two dates`,examples:[`DATEDIF(A1, B1, "Y")`,`DATEDIF(DATE(2020,1,1), TODAY(), "D")`],category:`Date & Time`});var X=7,Sl=5,Cl=0,wl=6,Tl=wl,Z=e=>Math.floor(e),Q=e=>Number.isFinite(e)&&e>=0&&e<=2958465,El=e=>((Z(e)+Tl)%X+X)%X,Dl={1:0,2:1,11:1,12:2,13:3,14:4,15:5,16:6,17:0},Ol=3;function kl(e,t=1){if(!Q(e))return b;let n=El(e);if(t===Ol)return(n+X-1)%X;let r=Dl[t];return r===void 0?b:(n-r+X)%X+1}function Al(e,t){return!Q(e)||!Q(t)?b:Z(e)-Z(t)}var jl=(e,t)=>new Date(Date.UTC(e,t+1,0)).getUTCDate(),Ml=e=>Q(e)?e:b;function Nl(e,t){if(!Q(e)||!Number.isFinite(t))return b;let n=D(Z(e)),r=n.getUTCFullYear(),i=n.getUTCMonth()+Math.trunc(t),a=Math.min(n.getUTCDate(),jl(r,i));return Ml(E(new Date(Date.UTC(r,i,a))))}function Pl(e,t){if(!Q(e)||!Number.isFinite(t))return b;let n=D(Z(e));return Ml(E(new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth()+Math.trunc(t)+1,0))))}var Fl=e=>{let t=El(e);return t!==Cl&&t!==wl},Il=e=>new Set(e.map(Z));function Ll(e,t,n=[]){if(!Q(e)||!Number.isFinite(t))return b;let r=Il(n),i=Math.sign(t),a={date:Z(e),left:Math.abs(Math.trunc(t))};for(;a.left>0;){if(a.date+=i,!Q(a.date))return b;Fl(a.date)&&!r.has(a.date)&&--a.left}return a.date}function Rl(e,t){let n=t-e+1,r=Math.floor(n/X),i=Array.from({length:n%X},(t,n)=>e+r*X+n);return r*Sl+i.filter(Fl).length}function zl(e,t,n=[]){if(!Q(e)||!Q(t))return b;let[r,i]=[Z(e),Z(t)],[a,o]=r<=i?[r,i]:[i,r],s=[...Il(n)].filter(e=>e>=a&&e<=o&&Fl(e)).length,c=Rl(a,o)-s;return r<=i?c:-c}var $=(e,t,n)=>T(t.evaluateFormula(O(t,e,n))),Bl=e=>e.find(S)??e.filter(e=>typeof e==`number`);function Vl(e,t,n){if(e.length<=n)return[];let r=st(t)(O(t,e,n));return r.length===0?Bl([$(e,t,n)]):r.find(S)??r.filter(w).map(j)}var Hl=(e,t)=>{let n=Bl([$(e,t,0),e.length>1?$(e,t,1):1]);if(S(n))return n;let[r=0,i=1]=n;return kl(r,i)},Ul=e=>(t,n)=>{let r=Bl([$(t,n,0),$(t,n,1)]);if(S(r))return r;let[i=0,a=0]=r;return e(i,a)},Wl=e=>(t,n)=>{let r=Bl([$(t,n,0),$(t,n,1)]);if(S(r))return r;let i=Vl(t,n,2);if(S(i))return i;let[a=0,o=0]=r;return e(a,o,i)};[{name:`WEEKDAY`,handler:Hl,minArgs:1,maxArgs:2,description:`Returns the day of the week (1 = Sunday by default)`,examples:[`WEEKDAY(A2)`,`WEEKDAY(A2, 2)`]},{name:`DAYS`,handler:Ul(Al),minArgs:2,maxArgs:2,description:`Returns the number of days between two dates`,examples:[`DAYS(B2, A2)`]},{name:`EDATE`,handler:Ul(Nl),minArgs:2,maxArgs:2,description:`Returns the date a number of months before or after a date`,examples:[`EDATE(A2, 1)`]},{name:`EOMONTH`,handler:Ul(Pl),minArgs:2,maxArgs:2,description:`Returns the last day of the month a number of months away`,examples:[`EOMONTH(A2, 0)`]},{name:`WORKDAY`,handler:Wl(Ll),minArgs:2,maxArgs:3,description:`Returns the date a number of working days away, skipping weekends and holidays`,examples:[`WORKDAY(A2, 10)`,`WORKDAY(A2, 10, H2:H5)`]},{name:`NETWORKDAYS`,handler:Wl(zl),minArgs:2,maxArgs:3,description:`Returns the number of working days between two dates, both included`,examples:[`NETWORKDAYS(A2, B2)`,`NETWORKDAYS(A2, B2, H2:H5)`]}].forEach(e=>A.register({...e,category:`Date & Time`})),Object.entries({"PERCENTILE.INC":`PERCENTILE`,"QUARTILE.INC":`QUARTILE`,"STDEV.S":`STDEV`,"STDEV.P":`STDEVP`,"VAR.S":`VAR`,"VAR.P":`VARP`,"RANK.EQ":`RANK`,TTEST:`T.TEST`,PERCENTRANK:`PERCENTRANK.INC`,FORECAST:`FORECAST.LINEAR`,PEARSON:`CORREL`}).forEach(([e,t])=>{let n=A.get(t);if(!n)throw Error(`alias ${e} names ${t}, which is not registered`);A.register({...n,name:e,description:`Same as ${t}`,examples:[]})});var Gl=RegExp(`^${ct}$`,`i`),Kl=/^[A-Za-z_$][\w$]*$/,ql=32,Jl=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Yl=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),Xl=e=>Jl(e)&&typeof e.name==`string`&&typeof e.body==`string`&&Yl(e.params)&&(e.description===void 0||typeof e.description==`string`);function Zl(e){return Array.isArray(e)?e.filter(Xl):[]}function Ql(e,t){if(!Gl.test(e.name))return`a name is letters and digits, parts joined by dots (MOVING.AVG)`;if(t(e.name))return`${e.name.toUpperCase()} is a built-in function`;if(e.params.length>ql)return`at most ${ql} parameters`;let n=e.params.find(e=>!Kl.test(e));return n===void 0?new Set(e.params).size===e.params.length?null:`a parameter is named twice`:`"${n}" is not a parameter name`}function $l(e,t){let n=new Map,r=[];return e.forEach(e=>{let i=e.name.toUpperCase(),a=n.has(i)?`${i} is defined twice`:Ql(e,t);a?r.push({name:e.name,reason:a}):n.set(i,e)}),{usable:n,problems:r}}var eu=e=>`Function(${[...e.params,`"use strict";\n${e.body}`].map(e=>JSON.stringify(e)).join(`, `)})`,tu=50,nu=2e3,ru=16777216,iu=1048576,au=1e5,ou=`(fn, args) => fn(...JSON.parse(args))`,su=`(?:(?:'(?:[^']|'')+'|[^!'"(),]+)!)?`,cu=RegExp(`^${su}\\$?[A-Z]+\\$?\\d+:\\$?[A-Z]+\\$?\\d+$`,`i`),lu=RegExp(`^${su}\\$?[A-Z]+\\$?\\d+$`,`i`),uu=null,du=async()=>(uu??=import(`@jitl/quickjs-singlefile-mjs-release-sync`).then(e=>e.default,e=>{throw uu=null,e}),(0,t.newQuickJSWASMModuleFromVariant)(await uu)),fu=()=>void 0,pu={definitions:new Map,problems:[],startCalculation:fu,dispose:fu};function mu(e,t){return e.startCalculation(),A.withOverlay(e.definitions,t)}async function hu(e){let{usable:t,problems:n}=$l(e.flatMap(e=>Zl(e.functions)),e=>A.isBuiltIn(e));return t.size===0?{...pu,problems:n}:gu(await du(),t,n)}function gu(e,t,n){let r=e.newRuntime();r.setMemoryLimit(ru),r.setMaxStackSize(iu);let i={calculationStart:Date.now()},a=[],o=new Map;return t.forEach((e,t)=>{let s=r.newContext(),c=[];a.push({vm:s,handles:c});let l=bu(r,Date.now()+tu,()=>{let t=s.evalCode(eu(e));return t.error?{error:_u(s,t.error)||`it stopped while loading`}:{fn:t.value}});if(`error`in l){n.push({name:e.name,reason:`does not compile: ${l.error}`});return}let u=s.unwrapResult(s.evalCode(ou));c.push(l.fn,u);let d={vm:s,runtime:r,caller:u,fn:l.fn};o.set(t,Cu(e,e=>vu(d,e,i.calculationStart)))}),{definitions:o,problems:n,startCalculation:()=>i.calculationStart=Date.now(),dispose:()=>{try{a.forEach(({vm:e,handles:t})=>{t.forEach(e=>e.dispose()),e.dispose()}),r.dispose()}catch{}}}}function _u(e,t){try{let n=e.getProp(t,`message`),r=e.typeof(n)===`string`?e.getString(n):``;return n.dispose(),r}catch{return``}finally{t.dispose()}}function vu({vm:e,runtime:t,caller:n,fn:r},i,a){let o=Math.min(Date.now()+tu,a+nu);return Date.now()>=o?b:bu(t,o,()=>{let t=e.newString(i),a=e.callFunction(n,e.undefined,r,t);if(t.dispose(),a.error)return _u(e,a.error)===yu?b:y;let o=xu(e,a.value);return a.value.dispose(),o})}var yu=`interrupted`;function bu(e,n,r){e.setInterruptHandler((0,t.shouldInterruptAfterDeadline)(n));try{return r()}finally{e.removeInterruptHandler()}}function xu(e,t){let n=e.typeof(t);return n===`number`?Su(e.getNumber(t)):n===`string`?e.getString(t):n===`boolean`?Su(e.dump(t)):y}function Su(e){return typeof e==`number`?Number.isFinite(e)?e:b:typeof e==`string`||typeof e==`boolean`?e:y}function Cu(e,t){let n=e.description??`Defined in this workbook (${e.params.join(`, `)})`;return{name:e.name.toUpperCase(),minArgs:e.params.length,maxArgs:e.params.length,description:n,category:`Workbook`,handler:(e,n)=>{let r=e.map(e=>Tu(e.trim(),n));return r.find(S)??t(JSON.stringify(r))}}}var wu=e=>S(e)?e:e===``?null:e;function Tu(e,t){return cu.test(e)?Du(e,t):lu.test(e)?wu(Eu(t)(e)[0]??``):wu(t.evaluateFormula(e))}var Eu=e=>e.getRangeValuesKeepingBlanks??e.getRangeValuesRaw??e.getRangeValues;function Du(e,t){let n=e.lastIndexOf(`!`),r=n>=0?e.slice(0,n+1):``,i=Nc(e.slice(n+1))??[];if(i.length>au)return y;let a=Eu(t),o=new Map;for(let{row:e,col:t}of i){let n=wu(a(`${r}${J(t)}${e+1}`)[0]??``);if(S(n))return n;o.set(e,[...o.get(e)??[],n])}return Array.from(o.values())}function Ou(e){if(e==null)return!0;if(typeof e==`string`)return e.trim()===``;if(o(e)){if(!(`v`in e))return!0;let t=e.v;return t==null||typeof t==`string`&&t.trim()===``}return!1}function ku(e){return!S(e)&&Ou(e)}var Au=36e3,ju=63499,Mu=e=>a(e)&&`v`in e,Nu=e=>typeof e==`number`&&Number.isInteger(e)&&e>=Au&&e<=ju,Pu=(e,t,n,r)=>{if(S(t))return t.code;if(!Mu(e)||typeof t!=`number`)return t;let i=typeof e.f==`string`?e.f:``;return i?ms(t,i):typeof e.v==`string`&&e.v.startsWith(`=`)&&r&&Nu(t)?ms(t,n?`DD/MM/YYYY`:`MM/DD/YYYY`):t},Fu=new Set([`DATE`,`TODAY`,`EDATE`,`EOMONTH`,`WORKDAY`]),Iu=/^[\s(+-]*([A-Z][A-Z0-9]*(?:\.[A-Z0-9]+)*)\s*\(/i;function Lu(e){let t=Iu.exec(e)?.[1];return t===void 0?null:t.toUpperCase()}function Ru(e,t,n,r=new Set){let i=e.replace(/^=/,``),a=Lu(i);if(a!==null&&Fu.has(a))return!0;let o=Yo(i)[0]?.ref,s=o===void 0?null:n(o,t);if(s===null||o===void 0)return!1;if(cs(s.format))return!0;let c=`${s.sheet}!${o.replace(/^.*!/,``).replace(/\$/g,``).toUpperCase()}`;return s.formula===null||r.has(c)?!1:Ru(s.formula,s.sheet,n,new Set([...r,c]))}var zu=String.raw`(?:'((?:[^']|'')+)'|(${lo}))!`,Bu=String.raw`[(,+\-*/^&=<>\s]`,Vu=String.raw`[),+\-*/^&=<>\s]`,Hu=new RegExp(String.raw`(?<=^|${Bu})(?:${zu})?(?:(\$?[A-Za-z]{1,3}):(\$?[A-Za-z]{1,3})|(\$?\d+):(\$?\d+))(?=$|${Vu})`,`gu`),Uu=e=>e.replace(`$`,``).toUpperCase(),Wu=([e,t],n)=>{let r=[Uu(e),Uu(t)];return n(r[0])<=n(r[1])?r:[r[1],r[0]]};function Gu({whole:e,sheetName:t,columns:n,rows:r},i){let a=i(t);if(!a)return null;let o=e.slice(0,e.lastIndexOf(`!`)+1),s=Math.max(a.rows,1);if(n){let[e,t]=Wu(n,Tc);return`${o}${e}1:${t}${s}`}let c=J(Math.max(a.columns,1)-1),[l,u]=Wu(r??[`1`,`1`],Number);return`${o}A${l}:${c}${u}`}function Ku(e,t){return e.replace(Hu,(e,n,r,i,a,o,s)=>Gu({whole:e,sheetName:n?.replace(/''/g,`'`)??r??null,columns:i&&a?[i,a]:void 0,rows:o&&s?[o,s]:void 0},t)??e)}function qu(e,t){return e.split(/("(?:[^"]|"")*(?:"|$))/).map((e,n)=>n%2==1?e:Ku(e,t)).join(``)}function Ju(e){return(t,n)=>{let r=po(t),i=r?.sheetName??n,a=Pc(r?.ref??t),s=a?e.find(e=>e.name===i)?.data[a.row]?.[a.col]:void 0;if(!o(s))return null;let c=typeof s.v==`string`&&s.v.startsWith(`=`)?s.v:null;return{format:typeof s.f==`string`?s.f:``,formula:c,sheet:i}}}function Yu(e){if(!e||!Array.isArray(e)||e.length===0)return[];if(Array.isArray(e[0]))return e;if(o(e[0])){let t=[];for(let n=0;n<e.length;n+=2){let r=[e[n]];n+1<e.length&&r.push(e[n+1]),t.push(r)}return t}return console.warn(`Unknown data structure in spreadsheet, returning empty:`,e),[]}function Xu(e,t){return e.map(e=>e.map(e=>{if(!o(e)||!(`v`in e))return e;let n=e.v;if(typeof n==`string`&&!n.startsWith(`=`)){let r=$e(n,t);if(r!==null)return{v:r,f:e.f||at(n,t)}}return e}))}function Zu(e,t,n={}){return Qu(e,t,n,new Map).finish()}function Qu(e,t,n,r){let i=n.preferDDMMYYYY??!1,s=n.skipFormatting??!1,l=Xu(Yu(e.data),i),u=t?.map(e=>({...e,data:Xu(Yu(e.data),i)})),d=l,f=e.name,p=[],m=[],h=d.map(e=>[...e]),ee=new Set,g=new Set,te=[],ne=e=>{let t=e===null||e===f?d:u?.find(t=>t.name===e)?.data;return t?{rows:t.length,columns:t.reduce((e,t)=>Math.max(e,t.length),0)}:null},re=(e,{cells:t,row:n,col:r})=>{let i=`${n},${r}`;if(ee.has(i))return p.push({cell:{row:n,col:r},formula:e,error:`Circular reference detected`,type:`circular`}),0;if(g.has(i))return t[r];ee.add(i),te.push({row:n,col:r});try{let n=he(qu(e.substring(1),ne));return t[r]=n,n}catch(i){let{type:a,display:o}=Do(i);p.push({cell:{row:n,col:r},formula:e,error:c(i),type:a});let s=Oe(o);return t[r]=s,s}finally{te.pop(),ee.delete(i),g.add(i)}},ie=(e,t)=>{if(e==null)return 0;if(S(e)||typeof e==`number`)return e;if(typeof e==`string`)return e.trim()===``?0:C(e)??e;if(o(e)){let n=`v`in e?e.v:void 0;return typeof n==`string`&&n.startsWith(`=`)?t?re(n,t):0:ie(n)}let n=parseFloat(e);return isNaN(n)?e:n},ae=e=>{let t=po(e);if(!t)return{sheetData:h,ref:e,read:ie};let n=r.get(t.sheetName)??oe(t.sheetName);return n?{sheetData:n.calculated,ref:t.ref,read:n.read}:null},oe=e=>{let t=u?.find(t=>t.name===e);return!t||!t.data?null:(Qu(t,u,{preferDDMMYYYY:i,skipFormatting:!0},r),r.get(e)??null)},se=e=>{let t=ae(e);if(!t)throw Co(e);let{sheetData:n,ref:r,read:i}=t,a=Pc(r);if(!a)return null;let{row:o,col:s}=a,c=o>=0?n[o]:void 0;return!c||s<0||s>=c.length?null:{cell:c[s],position:{cells:c,row:o,col:s},read:i}},ce=e=>{let t=se(e);return t?t.read(t.cell,t.position):0},le=e=>{let t=se(e);if(t===null)return!0;let{cell:n,position:r,read:i}=t,o=a(n)?n.v:void 0;return ku(typeof o==`string`&&o.startsWith(`=`)?i(n,r):n)},ue=(e,t)=>{let n=ae(e);if(!n)return[];let{sheetData:r,ref:i,read:a}=n,o=Nc(i);if(!o)return[];let s=[];for(let{row:e,col:n}of o){let i=e>=0?r[e]:void 0,o=i&&n>=0?i[n]:void 0,c=a(o,i?{cells:i,row:e,col:n}:void 0);if(t.numericOnly)!Ou(o)&&ze(c)&&s.push(c);else{let e=Ou(o)&&!S(o);s.push(t.keepBlanks&&e?``:c)}}return s},de=e=>ue(e,{numericOnly:!0}),fe=e=>ue(e,{numericOnly:!1}),pe=e=>ue(e,{numericOnly:!1,keepBlanks:!0}),me=e=>{let t=ae(e),n=t?Nc(t.ref):null;if(!t||!n)return 0;let r=po(e)?.sheetName??f,i=r===f?d:u?.find(e=>e.name===r)?.data;return i?n.filter(({row:e,col:t})=>{let n=i[e]?.[t];return n!==void 0&&!Ou(n)}).length:0},he=e=>ss(e,{getCellValue:ce,getRangeValues:de,getRangeValuesRaw:fe,getRangeValuesKeepingBlanks:pe,countFilledCells:me,evaluateFormula:he,preferDDMMYYYY:i,isCellEmpty:le,currentCell:te.at(-1)}),ge=(e,t)=>{if(!o(e)||!(`v`in e))return;let n=e.v;if(typeof n!=`string`||!n.startsWith(`=`)){t.cells[t.col]=n;return}let r={cell:{row:t.row,col:t.col},formula:n,dependencies:[],result:0};m.push(r),r.result=re(n,t),t.cells[t.col]=r.result},_e=e=>{d.forEach((t,n)=>{let r=h[n];r&&t.forEach((t,i)=>e(t,{cells:r,row:n,col:i}))})};return r.set(f,{calculated:h,read:ie}),{finish:()=>{if(_e(ge),!s){let e=Ju([{name:f,data:d},...(u??[]).filter(e=>e.name!==f)]);_e((t,{cells:n,col:r})=>{let a=o(t)&&typeof t.v==`string`?t.v:``,s=a.startsWith(`=`)&&Ru(a,f,e);n[r]=Pu(t,n[r],i,s)})}return{name:f,data:h,formulas:m,errors:p}}}}function $u(e,t={}){return e.map(n=>Zu(n,e,t))}var ed=RegExp(`^[-+]?\\s*(${ct})\\s*\\(`,`i`),td=e=>{let t=e.match(ed)?.[1];return t!==void 0&&lt(t)},nd=/[A-Z]+\d+\s*[+\-*/^]/,rd=/\d+\s*[+\-*/^]\s*\d+/,id=/^[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?$/;function ad(e){return td(e)||nd.test(e)||rd.test(e)}function od(e){let t=e.trim();return t===``?``:ad(t)?`=${t}`:id.test(t)?Number(t):t}function sd(e){if(e.type===`string`)return{v:String(e.value)};let t={v:od(e.formula??``)};return e.format&&e.format.length>0&&(t.f=e.format),t}var cd=class{options;constructor(e={}){this.options={maxIterations:e.maxIterations??100,enableCrossSheetRefs:e.enableCrossSheetRefs??!0,strictMode:e.strictMode??!1,preferDDMMYYYY:e.preferDDMMYYYY??!1}}calculate(e,t){return Zu(e,t,{preferDDMMYYYY:this.options.preferDDMMYYYY})}calculateWorkbook(e){return $u(e,{preferDDMMYYYY:this.options.preferDDMMYYYY})}getOptions(){return{...this.options}}setOptions(e){this.options={...this.options,...e}}createSheet(e,t){return{name:e,data:t.map(e=>e.map(e=>o(e)&&`v`in e?e:{v:e}))}}toStringArray(e){return e.data.map(e=>e.map(e=>String(e??``)))}},ld=e=>e.length>80?`${e.slice(0,80)}…`:e,ud=e=>{let t=typeof e==`object`&&e&&`v`in e?e.v:e;return typeof t==`string`&&t.startsWith(`=`)?t:null};function dd(e,t=pu){let n=e.map(e=>({name:e.name,data:Yu(e.data)})),r=mu(t,()=>n.map(e=>Zu(e,n,{skipFormatting:!0}))).flatMap((t,n)=>t.data.flatMap((t,r)=>t.flatMap((t,i)=>{let a=ud(e[n]?.data[r]?.[i]);return a===null||!S(t)?[]:[`${e[n]?.name??``}!${J(i)}${r+1} = ${t.code} (${ld(a)})`]})));return{count:r.length,samples:r.slice(0,5)}}function fd({count:e,samples:t}){if(e===0)return``;let n=e>t.length?`, and ${e-t.length} more`:``;return` ${e} formula cell(s) calculate to an error; fix any that are not meant to be errors before telling the user the spreadsheet is ready: ${t.join(`; `)}${n}.`}function pd(e){if(typeof e!=`string`)return e;try{let t=JSON.parse(e);return console.warn(`Sheets was provided as a string and has been parsed to an array`),t}catch(e){throw Error(`Invalid sheets format: sheets must be an array, not a string. Parse error: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}function md(e){if(!Array.isArray(e)||e.length===0)throw Error(`At least one sheet is required. Sheets must be an array of sheet objects.`);e.forEach(e=>{if(!e.name||!e.data||e.data.length===0)throw Error(`Invalid sheet: ${e.name||`unnamed`}. Each sheet must have a name and data array.`)})}async function hd(e){let t=await hu(e);try{return(t.problems.length===0?``:` These functions could not be used and calls to them show #NAME?: ${t.problems.slice(0,5).map(({name:e,reason:t})=>`${e} (${t})`).join(`; `)}.`)+fd(dd(e,t))}finally{t.dispose()}}var gd=async(e,t)=>{let{title:n}=t,r=pd(t.sheets);md(r);let i=`Acknowledge that the spreadsheet has been created and is displayed to the user.`,a=await hd(r),o=me(e);if(!o)return{message:`Created spreadsheet: ${n}${a}`,title:n,data:{sheets:r},instructions:i};let{relPath:s,filePath:c}=h();return await o.write(s,JSON.stringify(r)),{message:`Created spreadsheet: ${n}. Saved to ${c}; the user can edit cells there, so read that file for the current values.${a}`,title:n,data:{sheets:c},instructions:i}};async function _d(e,t){if(!(`kind`in t))return gd(e,t);let n=me(e);if(!n)throw Error(`This host does not provide files.artifacts, so spreadsheets cannot be loaded or saved`);if(!fe(t))throw Error(`Invalid spreadsheet dispatch`);return Se(n,t)}var vd={toolDefinition:r,execute:_d,generatingMessage:`Creating spreadsheet...`,waitingMessage:`Tell the user that the spreadsheet was created and will be presented shortly.`,isEnabled:()=>!0,systemPrompt:i},yd=[{name:`Simple Budget`,args:{title:`Monthly Budget`,sheets:[{name:`Budget`,data:[[{v:`Category`},{v:`Amount`}],[{v:`Income`},{v:5e3,f:`$#,##0.00`}],[{v:`Rent`},{v:-1500,f:`$#,##0.00`}],[{v:`Utilities`},{v:-200,f:`$#,##0.00`}],[{v:`Food`},{v:-600,f:`$#,##0.00`}],[{v:`Transport`},{v:-300,f:`$#,##0.00`}],[{v:`Total`},{v:`=SUM(B2:B6)`,f:`$#,##0.00`}]]}]}},{name:`Sales Report`,args:{title:`Q1 Sales Report`,sheets:[{name:`Sales`,data:[[{v:`Product`},{v:`Jan`},{v:`Feb`},{v:`Mar`},{v:`Total`}],[{v:`Widget A`},{v:1200},{v:1350},{v:1500},{v:`=SUM(B2:D2)`}],[{v:`Widget B`},{v:800},{v:920},{v:1100},{v:`=SUM(B3:D3)`}],[{v:`Widget C`},{v:450},{v:480},{v:520},{v:`=SUM(B4:D4)`}],[{v:`Total`},{v:`=SUM(B2:B4)`},{v:`=SUM(C2:C4)`},{v:`=SUM(D2:D4)`},{v:`=SUM(E2:E4)`}]]}]}},{name:`Loan Calculator`,args:{title:`Loan Calculator`,sheets:[{name:`Calculator`,data:[[{v:`Loan Amount`},{v:25e4,f:`$#,##0`}],[{v:`Interest Rate`},{v:.065,f:`0.00%`}],[{v:`Term (Years)`},{v:30}],[{v:``},{v:``}],[{v:`Monthly Payment`},{v:`=PMT(B2/12, B3*12, -B1)`,f:`$#,##0.00`}],[{v:`Total Interest`},{v:`=B5*B3*12-B1`,f:`$#,##0.00`}]]}]}},{name:`World Population`,args:{title:`世界人口(上位10)`,sheets:[{name:`世界人口(上位10)`,data:[[{v:`順位`},{v:`国・地域`},{v:`人口(概数)`,f:`#,##0`},{v:`上位10合計に占める割合`},{v:`世界人口に占める割合`}],[{v:1,f:`#,##0`},{v:`インド`},{v:1428627e3,f:`#,##0`},{v:`=C2/$C$12`,f:`0.00%`},{v:`=C2/$C$13`,f:`0.00%`}],[{v:2,f:`#,##0`},{v:`中国`},{v:1425671e3,f:`#,##0`},{v:`=C3/$C$12`,f:`0.00%`},{v:`=C3/$C$13`,f:`0.00%`}],[{v:3,f:`#,##0`},{v:`アメリカ合衆国`},{v:334e6,f:`#,##0`},{v:`=C4/$C$12`,f:`0.00%`},{v:`=C4/$C$13`,f:`0.00%`}],[{v:4,f:`#,##0`},{v:`インドネシア`},{v:277e6,f:`#,##0`},{v:`=C5/$C$12`,f:`0.00%`},{v:`=C5/$C$13`,f:`0.00%`}],[{v:5,f:`#,##0`},{v:`パキスタン`},{v:24e7,f:`#,##0`},{v:`=C6/$C$12`,f:`0.00%`},{v:`=C6/$C$13`,f:`0.00%`}],[{v:6,f:`#,##0`},{v:`ナイジェリア`},{v:219e6,f:`#,##0`},{v:`=C7/$C$12`,f:`0.00%`},{v:`=C7/$C$13`,f:`0.00%`}],[{v:7,f:`#,##0`},{v:`ブラジル`},{v:216e6,f:`#,##0`},{v:`=C8/$C$12`,f:`0.00%`},{v:`=C8/$C$13`,f:`0.00%`}],[{v:8,f:`#,##0`},{v:`バングラデシュ`},{v:172e6,f:`#,##0`},{v:`=C9/$C$12`,f:`0.00%`},{v:`=C9/$C$13`,f:`0.00%`}],[{v:9,f:`#,##0`},{v:`ロシア`},{v:146e6,f:`#,##0`},{v:`=C10/$C$12`,f:`0.00%`},{v:`=C10/$C$13`,f:`0.00%`}],[{v:10,f:`#,##0`},{v:`メキシコ`},{v:13e7,f:`#,##0`},{v:`=C11/$C$12`,f:`0.00%`},{v:`=C11/$C$13`,f:`0.00%`}],[{v:``},{v:`合計(上位10)`},{v:`=SUM(C2:C11)`,f:`#,##0`},{v:``},{v:``}],[{v:``},{v:`世界推定人口(例)`},{v:805e7,f:`#,##0`},{v:``},{v:``}]]}]}}];Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return sd}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return pu}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return Hc}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return Ic}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return cd}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return mu}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return gd}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Zu}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return Pc}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return vd}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return Yu}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return yd}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return hu}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return g}});